# 用梯度方法求解初值问题
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 Tidu(x_0, y_0, h, f_1): # 构造梯度公式
yn = y_0
xn = x_0
for n in range(1, 11):
x = xn + h * n
y = yn / (2 + h) + (h / (2 + h)) * (xn ** 2 + xn - yn + x ** 2 + x )
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
Tidu(x_0, y_0, h, f_1)
用梯度方法求解初值问题