gpt4 book ai didi

python - 将函数与 Python(sympy、quad)集成,其中结果是我想要绘制的另一个函数

转载 作者:行者123 更新时间:2023-12-01 04:35:04 24 4
gpt4 key购买 nike

我想使用 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 可能是最好的选择。然而我也失败了。

我想知道是否有人对如何完成这项任务有有用的建议?

非常感谢,扎克

最佳答案

您可以对 A 进行解析积分。假设我没有因为起得太晚而错过一些愚蠢的事情,那么以下内容有帮助吗?

import sympy as sy
sys.displayhook = sy.pprint
A, y, z, tm, t, tni = sy.symbols('A, y, z, tm, t, tni')
A = 2*z*sy.exp(-2*z*y + z**2)
expr = sy.integrate(A, (z,0,t)) # patience - this takes a while
expr
# check:
(sy.diff(expr,t).simplify() - A.replace(z,t)).simplify()
# thus, the result:
expr.replace(y,tm/(2*tni)).replace(t,t/tm)

最后一行以解析形式生成 A 函数的积分,尽管它确实需要评估虚构的误差函数(您可以使用 scipy.special.erfi() 来完成)。

关于python - 将函数与 Python(sympy、quad)集成,其中结果是我想要绘制的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com