问题描述
首先,我想计算积分
然后我想绘制一个函数 F(x) 但我有以下错误: F() 缺少 1 个必需的位置参数:'t'
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad
x=np.arange(-20,20,0.5)
class NLA():
def __init__(self,b=-20*10**-15,E=200*10**-9,w0=18*10**-6,t=50*10**-15,s=1.76,A=0.2,L=0.1):
self.b=b
self.E=E
self.w0=w0
self.t=t
self.s=s
self.A=A
self.L=L
self.I0=self.s*self.E/(self.t*np.pi*self.w0**2)
self.a0=(1/self.L)*np.log(10)*self.A
self.Leff=0.01*(1-np.exp(-self.L*self.a0))/self.a0
self.c=self.b*self.I0*self.Leff
def f(self,t,x):
return np.log(1+((self.c*np.exp(-t**2))/(1+self.x**2)))
def F(self,x,t):
return ((1+x**2)/(self.c*np.pi**(1/2)))*quad(self.f(t),-np.inf,np.inf,args=(x))[0]
nla=NLA()
T=nla.F(x)
解决方法
def F(self,x,t):
return ((1+x**2)/(self.c*np.pi**(1/2)))*quad(self.f(t),-np.inf,np.inf,args=(x))[0]
改为
def F(self,x):
temp = quad(self.f,args=(x,))[0]
return ((1+x**2)/(self.c*np.pi**(1/2)))*temp
quad
应该得到一个函数,在本例中为 self.f
。 quad
将使用集成变量 t
和 args
元组调用它。
我拆分了 temp
,所以 quad
调用更容易看到(如果需要调试)。
F
不应将 t
作为参数。
使用 quad
等函数时,请仔细遵循文档。如果有任何令人困惑的地方,请练习其示例。我不认为 OOP 会导致问题,只是所有这些“自我”可能会让您感到困惑,并掩盖了基本的 quad
调用。