数值分析exp,欧拉、中值、龙格库塔

目录

一、原理:

二、代码:

三、效果展示:

四、总结:

五、参考:


问题描述:已知y'=f(x,y),求y(x)。

本题:已知y'=y,y(0)=1,求y(x)。

一、原理:

注意说明的话篇幅太大,给大家推荐个视频自行学习:

数值计算视频

二、代码:

import numpy as np
from matplotlib import pyplot as plt
import math
"""dy/dx = exp(x)"""

def exp_euler(h):
    """欧拉定理:前半段重合,放大看存在误差,需要更小的步长"""
    x = np.array([0])
    y_1 = np.array([1])
    y = np.array([1])

    for i in range(int(25/h)):
        x = np.append(x, x[i]+h)
        dy = y_1[i]
        y_1 = np.append(y_1, y_1[i] + h * dy)
        #y = np.append(y, math.exp(x[i]))

    plt.title("Exp by Euler")
    plt.xlabel("x")
    plt.ylabel("y")
    #plt.plot(x, y)
    plt.plot(x, y_1)
    plt.show()


def exp_mv(h):
    """中值定理:几乎完全重合,但是放大看还是存在误差,需要更小的步长"""
    x = np.array([0])
    y_1 = np.array([1])
    y = np.array([1])

    for i in range(int(10//h)):
        x = np.append(x, x[-1]+h)
        dy = y_1[-1]
        y_center = y[-1] + h / 2 * dy
        dy = y_center
        y_1 = np.append(y_1, y_1[-1] + h * dy)
        y = np.append(y, math.exp(x[i+1]))
    print(y[-1])
    print(y_1[-1])
    plt.title("Mean Value")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.plot(x, y)
    plt.plot(x, y_1)
    plt.show()


"""
dy/dx = e^x
"""

def exp_rk(h):
    """四阶龙塔法,精确度明显提升"""
    x = [0]
    y_1 = [1]
    y = [1]
    for i in range(int(10//h)):
        k_1 = y[-1]
        k_2 = y[-1] + 0.5 * h * k_1
        k_3 = y[-1] + 0.5 * h * k_2
        k_4 = y[-1] + h * k_3
        dy = 1/6 * (k_1 + 2 * k_2 + 2 * k_3 + k_4)
        x.append(x[-1] + h)
        y.append(y[-1] + h * dy)
        y_1.append(math.exp(x[i+1]))
    print(y[-1])
    print(y_1[-1])
    plt.title("R K")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.plot(x, y)
    plt.plot(x, y_1)
    plt.show()


if __name__ == "__main__":
    #print(max([1,2,3,4]))
    #print(np.append([1,23,3],10))
    #exp_euler(0.1)
    exp_rk(0.01)
    exp_mv(0.01)
    print(math.exp(250))

三、效果展示:

 

 

 上面三个效果可以看出后两种基本拟合了exp,再具体看一下数值exp(20):

eu:439286205.05009544
mv:480329695.5076891
rk:480337720.2628221

math.exp(20)=480337721.05650175

四、总结:

所有的函数拟合最重要的是看dy的拟合程度,欧拉法用单点拟合效果肯定越来越差,而中值定理用两端平均值拟合效果好了很多,而龙塔法则用4个点拟合,效果必然跟好,具有很好的收敛性。

五、参考:

https://blog.csdn.net/qq_31073871/article/details/88870003

https://baike.baidu.com/item/龙格库塔法/3016350?fr=aladdin

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值