我想使用 python 集成一个函数,其中输出是一个新函数而不是一个数值。例如,我有一个方程(来自 Arnett 1982——超新星的分析描述):
def A(z,tm,tni):
y=tm/(2*tni)
tm=8.8 # diffusion parameter
tni=8.77 # efolding time of Ni56
return 2*z*np.exp((-2*z*y)+(z**2))
然后我想找到 A 的积分,然后绘制结果。首先,我天真地尝试了 scipy.quad:
def Arnett(t,z,tm,tni,tco,Mni,Eni,Eco):
x=t/tm
Eni=3.90e+10 # Heating from Ni56 decay
Eco=6.78e+09 # Heating from Co56 decay
tni=8.77 # efolding time of Ni56
tco=111.3 # efolding time of Co56
tm=8.8 # diffusion parameter
f=integrate.quad(A(z,tm,tni),0,x) #integral of A
h=integrate.quad(B(z,tm,tni,tco),0,x) #integral of B
g=np.exp((-(x/tm)**2))
return Mni*g*((Eni-Eco)*f+Eco*h)
其中 B 也是一个预定义函数(此处未介绍)。A 和 B 都是 z 的函数,但最终方程是时间 t 的函数。(我相信正是在这里我导致我的代码失败。)
A 和 B 的积分从零到 x,其中 x 是时间 t 的函数。尝试按原样运行代码会给我一个错误:“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”。
因此,经过短暂的搜索后,我认为也许 sympy 将是要走的路。但是我也失败了。
我想知道是否有人对如何完成这项任务有帮助?
非常感谢,扎克