在Python中将函数与多个数组集成的问题

问题描述 投票:0回答:1

我正在处理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)

这里是错误消息:

提前感谢您的帮助,并对我的英语感到抱歉。 克莱门特

python arrays numpy function numerical-integration
1个回答
1
投票

如果您要逐步执行此部分:

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]))
© www.soinside.com 2019 - 2024. All rights reserved.