我编写了以下代码。它是一个ODE
,其中有一个参数作为另一个ODE。
我们可以看到M(m0,z,b,c)
in在另一个ODE
中使用,它本身就是一个ODE
函数。代码很慢,有人能给我一个改进的建议吗
import numpy as np
from scipy.integrate import odeint
def model(m,z,c,b):
dmdt = ((c**2-m)/(1+z))*(6-9*(m/c**2)+3*b*(m+(m**2)))
return dmdt
def M(m0,z,c,b):
m = odeint(model,m0,[0,z], args= (c, b))
mm=m[-1,0]
return mm
def model1(H ,z,m0,c,b):
c = 0.6
b=0.035
dHdt = (H/(1+z))*(6-9*(M(m0,z,c,b)/c**2)+3*b*(M(m0,z,c,b)+(M(m0,z,c,b)**2)))
return dHdt
def model2(H0,z,m0,c,b):
H = odeint(model1,H0,[0,z], args=(m0,c,b))
HH=H[-1,0]
return HH
print(model2(70,1,0.75,0.69,0.035))
可以将耦合系统作为耦合系统求解
在修改代码时,它会快速返回
0.107569653042
返回类似的
0.107569746892
稍微慢一点。这6位重合与默认误差公差1e-6
一致要获得更高精度的结果,请为误差公差
atol, rtol
设置控制参数为了进一步减少操作,请执行以下操作:
如果您的任务非常繁重,请使用编译的编程语言进行快速的大规模数字运算
相关问题 更多 >
编程相关推荐