gpt4 book ai didi

python - 在带有参数的另一个 ODE 中使用 ODE 会使代码非常非常慢

转载 作者:行者123 更新时间:2023-12-01 09:28:46 26 4
gpt4 key购买 nike

我写了下面的代码。它是一个 ODE,其中有一个参数作为另一个 ODE。正如我们所见,M(m0,z,b,c) 用于另一个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))

最佳答案

您可以将耦合系统作为耦合系统进行求解。

def model(U,z,c,b):
M, H = U
dMdt = ((c**2-M)/(1+z))*(6-9*(M/c**2)+3*b*(M+M**2))
dHdt = (H /(1+z))*(6-9*(M/c**2)+3*b*(M+M**2))
return [dMdt, dHdt]

def solution(H0,z,m0,c,b):
U = odeint(model,[m0,H0],[0,z], args=(c,b))[-1]
M, H = U
return H

print(solution(70,1,0.75,0.69,0.035))

当您的代码进行修改时,它会快速返回0.107569653042

 def model1(H, z, m0, c, b):
mm = M(m0,z,c,b)
dHdt = (H/(1+z))*(6-9*(mm/c**2)+3*b*(mm+(mm)**2)))
return dHdt

返回类似的0.107569746892,速度稍慢。这6位重合数字与1e-6的默认容错范围一致。

要获得更高精度的结果,请设置误差容限 atol、rtol 的控制参数。

为了进一步减少运营

def model(U,z,c,b):
M, H = U
factor = (6-9*M/c**2+3*b*(M+M**2))/(1+z)
return [(c**2-M)*factor, H*factor]

如果您的任务非常繁重,请使用编译的编程语言来快速进行大量数字运算。

关于python - 在带有参数的另一个 ODE 中使用 ODE 会使代码非常非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50136298/

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