# 用改进的EULER方法求解初值问题
import numpy as np
def f(x, y): # 原题目
return x ** 2 + x - y
def f_1(x): # 准确值方程
return x ** 2 - x + 1 - np.exp(-x)
def Oula(x_0, y_0, h, f, f_1): # 构造公式
yn = y_0
xn = x_0
for n in range(1, 11):
x = xn + h * n
yp = yn + h * f(xn, yn)
yc = yn + h * f(x, yp)
y = (yp + yc) / 2
yn = f_1(x) # 计算准确值
eps = abs(yn - y)
print('迭代次数:', "{0:.0f}".format(n),
'迭代后x值:', "{0:.6f}".format(x),
'迭代后y值:', "{0:.6f}".format(y),
'y的精确值:', "{0:.6f}".format(yn),
'误差:', "{0:.6f}".format(eps))
x_0 = 0
y_0 = 0
h = 0.1
Euler(x_0, y_0, h, f, f_1)
李庆扬 《数值分析》 第五版题目 用python实现改进的EULER方法求解初值问题