【发布时间】:2017-04-18 19:56:46
【问题描述】:
我在试图理解我的代码有什么问题时遇到了一些麻烦,任何帮助都会非常有帮助。 我想解这个简单的方程
但是,我的代码给出的值与我的书本或 wolfram 的值不匹配,因为 y 随着 x 的增长而上升。
import matplotlib.pyplot as plt
from numpy import exp
from scipy.integrate import ode
# initial values
y0, t0 = [1.0], 0.0
def f(t, y):
f = [3.0*y[0] - 4.0/exp(t)]
return f
# initialize the 4th order Runge-Kutta solver
r = ode(f).set_integrator('dopri5')
r.set_initial_value(y0, t0)
t1 = 10
dt = 0.1
x, y = [], []
while r.successful() and r.t < t1:
x.append(r.t+dt); y.append(r.integrate(r.t+dt))
print(r.t+dt, r.integrate(r.t+dt))
【问题讨论】:
-
试试更小的
dt。你会注意到在它爆炸之前你走得更远。当你需要在精确解相当平滑的情况下采取过小的步骤时,你应该怀疑你的 ODE 是“僵硬的”:en.wikipedia.org/wiki/Stiff_equation -
哦,我明白了!使用较小的 dt 方程可以正常工作,现在我明白了,我以为我做错了什么,因为这是我第一次使用这个 ode 函数。好的,谢谢。
-
@klimaat。您能否发表您的评论作为答案,以便 OP 可以接受它并且可以将问题标记为已回答?此外,你们都会从中获得一点声誉,这很好。
标签: python numpy matplotlib runge-kutta