先上运行结果
这是代码
import numpy as np
import matplotlib.pyplot as plt
count = 80
x0 = 0
y0 = 1
xx = np.random.rand(count)
yy = np.random.rand(count)
# 定义步长
h = 1 / count
for i in range(0, count):
# 预报值
y1 = (1.1 * y0) - 0.2 * x0 / y0
x1 = x0 + h
# 校正值
y2 = (1.1 * y1) - 0.2 * x1 / y1
x2 = x1 + h
# 将预测好的值放进数组用于展示
xx[i] = x0
yy[i] = y0+0.5*h*((y1-y0)/(x1-x0)+(y2-y1)/(x2-x1))
# 为下一次的循环做准备
y0 = y0 + 0.5 * h * ((y1 - y0) / (x1 - x0) + (y2 - y1) / (x2 - x1))
x0 = x0 + h
plt.title("Euler")
plt.xlim(0, 1)
plt.ylim(1, 3000)
plt.xlabel("xLable")
plt.ylabel("yLable")
plt.plot(xx, yy)
plt.show()
这里我将步长h调整为1/80,即将1平均分为80份,每一份是1/80,步长分的越小,则预测曲线的拟合效果越好。