题目
代码
import math
a, b = list(map(int, input("请输入求解区间,格式为 a b :").split()))
x0 = float(input("请输入初值:"))
h = 0.1
def yn(x):
return math.sqrt(1 + 2 * x)
def fx(x, y):
return y - 2 * x / y
def euler(x, y):
return y + h * fx(x, y)
def euler_imp(x, y):
return y + h / 2 * (fx(x, y) + fx(x + h, euler(x, y)))
def k1(x, y):
return fx(x, y)
def k2(x, y):
return fx(x + h / 2, y + h / 2 * k1(x, y))
def k3(x, y):
return fx(x + h / 2, y + h / 2 * k2(x, y))
def k4(x, y):
return fx(x + h, y + h * k3(x, y))
def lg_kt(x, y):
return y + h / 6 * (k1(x, y) + 2 * k2(x, y) + 2 * k3(x, y) + k4(x, y))
x_ite = []
y_ite_euler = []
y_ite_euler_imp = []
y_ite_lg_kt = []
y_real = []
x_ite.append(x0)
y_ite_euler.append(yn(x0))
y_ite_euler_imp.append(yn(x0))
y_ite_lg_kt.append(yn(x0))
y_real.append(yn(x0))
while x_ite[-1] + h <= b:
y_ite_euler.append(euler(x_ite[-1], y_ite_euler[-1]))
y_ite_euler_imp.append(euler_imp(x_ite[-1], y_ite_euler_imp[-1]))
y_ite_lg_kt.append(lg_kt(x_ite[-1], y_ite_lg_kt[-1]))
x_ite.append(x_ite[-1] + h)
y_real.append(yn(x_ite[-1]))
print("x" + " " * 11 + "y(欧拉)" + " " * 4 + "y(改进)" + " " * 4 + "y(四阶龙格)" + "y(精确)")
for i in range(len(x_ite)):
print('%.6f'%x_ite[i] + " " + '%.6f'%y_ite_euler[i] + " " + '%.6f'%y_ite_euler_imp[i] + " " + '%.6f'%y_ite_lg_kt[i] + " " + '%.6f'%y_real[i])
运行结果