数值分析实验 实验5-1 数值微分的几个方法 python3实现

题目

题目

代码

import math

# 求解区间
a, b = list(map(int, input("请输入求解区间,格式为 a b :").split()))

# 初值
x0 = float(input("请输入初值:"))

h = 0.1


# yn的精确值
def yn(x):
    return math.sqrt(1 + 2 * x)


# fx
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)))


# K1
def k1(x, y):
    return fx(x, y)


# K2
def k2(x, y):
    return fx(x + h / 2, y + h / 2 * k1(x, y))


# K3
def k3(x, y):
    return fx(x + h / 2, y + h / 2 * k2(x, y))


# k4
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的迭代值
x_ite = []
# y的迭代值,欧拉法
y_ite_euler = []
# y的迭代值,改进的欧拉法
y_ite_euler_imp = []
# y的迭代值,经典龙格-库塔法
y_ite_lg_kt = []
# y的准确值
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])


运行结果

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值