我正在尝试使用欧拉方法 1 (https://en.wikipedia.org/wiki/Euler_method) 解决 ODE。但是我的代码没有解决任何问题。代码与我的老师非常相似,以至于我找不到任何显着差异。有人可以帮忙吗?
enter from math import *
import numpy as np
import matplotlib.pyplot as plt
def funkce(y, t):
return(-y)
def euler_1(dt, y, t, funkce ):
y = y + dt * funkce(y, t)
t = t + dt
return (y,t)
def solver(y0, t0, tstop, dt, typ):
y = y0
t = t0
ys = [y]
ts = [t]
while (t < tstop):
(y,t) = typ(dt, y, t, funkce)
ts.append(t)
ys.append(y)
return(ys,ts)
plt.plot(solver(1, 0, 50, 0.05, euler_1))
t = np.linspace(0, 5, 50)
y = np.exp(-t)
plt.plot(t, y)
plt.show()
注意:最后一个图是与解析解的比较。 您可以找到绘图输出 here。 当我从求解器 y 和 t 而不是 ys 返回时,它只显示 ys 和 ts 的最后一行。
感谢任何帮助。