我需要把内部计算传递给odeint。我通常在完成积分后重新计算值,但我更喜欢在odeint的调用函数中进行所有计算。在
我的问题在计算上并不繁重,所以在ode解算器内部进行计算时稍微提高一点性能是可以接受的。在
from scipy.integrate import odeint
import numpy as np
def eom(y, t):
internal_calc = y/(t+1)
xdot = y
return xdot, internal_calc
if __name__ == '__main__':
t = np.linspace(0, 5, 100)
y0 = 1.0 # the initial condition
output, internal_calc = odeint(eom, y0, t)
这段代码不运行,但希望能显示我的目标。我想从eom函数中得到每次通过积分器的“内部计算”值。在
我四处寻找选择,但我认识的一位最好的python程序员告诉我要编写自己的集成器,这样我就可以随心所欲了。在
在我这么做之前,我想我应该问问其他人是否有从odeint解算器中获取值的方法。在
有可能,您只是不能使用
eom
函数的返回值。所以您需要其他方法从eom
中走私数据。有很多很多不同的方法可以做到这一点。最简单的方法可能是只使用全局变量:输出:
^{pr2}$另外,请注意,我在上面的代码中使用了}。^{} docs 表示在编写新代码时,现在应该使用}。在
solve_ivp
,而不是{solve_ivp
,而不是旧的{如果这是我自己的代码,我可能会通过将累加器对象传递到函数的部分版本来完成任务:
输出:
^{pr2}$但是,如果您只是编写一个简短的脚本或其他东西,您可能应该使用更简单的
global
方法。这是一个非常好的用例。在相关问题 更多 >
编程相关推荐