gpt4 book ai didi

python - 指定时间评估是否会覆盖 RK45 方法选择的时间步长? (scipy.integrate.solve_ivp)

转载 作者:行者123 更新时间:2023-12-01 07:34:48 27 4
gpt4 key购买 nike

来自

https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html

sol = scipy.integrate.solve_ivp(fun, t_span, y0, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False, **options)

t_eval 对于指定时间存储解决方案是可选的。此覆盖时间步长是否会由 RK45 选择?

最佳答案

它不会覆盖时间步长。验证这一点的一种方法是使用dense_output=True,它会在每个时间步保存数据以便稍后进行插值。

sol 属性包含有关 ts 属性中时间步长的附加信息。在这里,您可以看到使用 t_eval 更改了 sol3.t 的返回,但不影响时间步长。

import numpy as np
from scipy.integrate import solve_ivp

# To make readable
np.set_printoptions(precision=2)

method = 'RK45'

def dy(t, y):
return y

sol = solve_ivp(dy, (0, 10), [1], method=method)
print(f"No options : {sol.t}")
sol2 = solve_ivp(dy, (0, 10), [1], method=method, dense_output=True)
print(f"Dense output : {sol2.t}")
print(f" Interpolants: {sol2.sol.ts}")
t_eval = [5]
sol3 = solve_ivp(dy, (0, 10), [1], method=method, t_eval=t_eval, dense_output=True)
print(f"t_eval return : {sol3.t}")
print(f" Interpolants: {sol3.sol.ts}")

返回

No options    : [ 0.    0.1   1.07  2.3   3.65  5.03  6.43  7.83  9.24 10.  ]
Dense output : [ 0. 0.1 1.07 2.3 3.65 5.03 6.43 7.83 9.24 10. ]
Interpolants: [ 0. 0.1 1.07 2.3 3.65 5.03 6.43 7.83 9.24 10. ]
t_eval return : [5]
Interpolants: [ 0. 0.1 1.07 2.3 3.65 5.03 6.43 7.83 9.24 10. ]

我温和地建议您不要使用t_eval,而应该只使用dense_output=True,然后在事后构造 y_eval。这是一种更加灵活和透明的用法。

sol = solve_ivp(dy, (0, 10), [1], method=method, dense_output=True)
y_eval = sol.sol(t_eval)

关于python - 指定时间评估是否会覆盖 RK45 方法选择的时间步长? (scipy.integrate.solve_ivp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57036167/

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