我正在处理Python脚本,我需要集成一个很长的函数。该函数包含多个数组,但我没有成功将其集成。 我需要将它集成到 teta1 (80,) 上,但它还包含 w (22,),f (22,),Gam_Mag (22,)。我尝试分解它,但我不确定它是否好。 这是我的功能:
def function1(teta1,w,f,Mag_Gam):
Zp1=i*w*ms1*(1-(1+i*Nu)*np.sin(teta1)**4*(f/fc1)**2)
a1=1
b1=Zp1
c1=0
d1=1
ac=np.cosh(Mag_Gam*d*np.cos(teta1))
bc=Zc*np.sinh(Mag_Gam*d*np.cos(teta1))/np.cos(teta1)
cc=np.sinh(Mag_Gam*d*np.cos(teta1))/Zc*np.cos(teta1)
dc=np.cosh(Mag_Gam*d*np.cos(teta1))
Zp2=i*w*ms2*(1-(1+i*Nu)*np.sin(teta1)**4*(f/fc2)**2)#B1/(i*w)*(k0**4*np.sin(teta)**4-kb1**4)
a2=1
b2=Zp2
c2=0
d2=1
at=a1*ac+b1*cc
bt=a1*bc+b1*dc
ct=c1*ac+d1*cc
dt=c1*bc+d1*dc
aT=at*a2+bt*c2
bT=at*b2+bt*d2
cT=ct*a2+dt*c2
dT=ct*b2+d2*dt
T=np.array([[aT,bT],[cT,dT]])
return 4*abs(T[0,0]+T[0,1]/Zc+Zc*T[1,0]+Zc*T[1,1]/Zc)**(-2)
这里是集成:
Tau=np.zeros(len(f))
err=np.zeros(len(f))
for n in range(len(f)):
Tau,err=quad(function1(teta1,w[n],f[n],Mag_Gam[n]),0,80,args=(1,)) #Integration on teta1
TL=10*np.log10(1/Tau)
提前感谢您的帮助,并对我的英语感到抱歉。 克莱门特
如果您要逐步执行此部分:
Tau,err=quad(function1(teta1,w[n],f[n],Mag_Gam[n]),0,80,args=(1,)) #Integration on teta1
您会注意到,您提供的
quad
(我认为是 scipy.integrate.quad
)不是一个可调用函数,而是一个已计算值的数组!
尝试这样做,传递函数对象(并且实际上记住在输出数组中设置值,而不是用单个数字覆盖它们):
Tau[n], err[n] = quad(function1, 0,80,args=(w[n],f[n],Mag_Gam[n]))