随笔 - 942,  文章 - 0,  评论 - 37,  阅读 - 54万

简介

最近 无聊看了一下 数值解法

已知 dydx=y 我们知道其有一个解析解为 y=ex
同时我们知道 其初值 y(0)=1, x 的范围为 0<=x<=1
我们需要求解其数值解,也就是y 值在 0<=x<=1 的分布

我们猜想显示欧拉是由 泰勒展开式进行构建的

f(x)=f(x0)+f(x0)(xx0)+f(x0)2!(xx0)2+···+f(n)(x0)n!(xx0)n+Rn(x)

也就是可以简单等同于求解

y(x)=y(0)+dydx(x==0)(x0)+

但是关于 dydx(x==0) 比较难以求解,采用 y(k+1)y(k)h 来近似求解
其中 h 即步长步长越小带来的精度越来,同时带来的计算量越大
这里比较特殊由于题目中已知了dydx=y所以我们可以使用

yn+1=yn+h(y)

yn+1=yn+hyn

那么我们对于其数值解就可以比较简单求解出来了

code

import math
from matplotlib import pyplot as plt

t_0 = 0
y_0 = 1
tau = 0.01
i = 1
solve = []
Euler = []
t = []
while i < 1000:
    if i == 1:
        y_n = y_0
        t_n = t_0
    Euler.append(y_n)
    solve.append(math.exp(t_n)) # 精确解
    t.append(t_n)
    func = y_n
    y_n = y_n + tau * func
    t_n = t_n + tau
    i += 1

plt.plot(t, Euler, c='green', label=' Euler method')
plt.plot(t, solve, c='red', label=' accuracy')
plt.fill_between(t, solve, Euler, facecolor='blue', alpha=0.2)
plt.title('Euler method', fontsize=19)
plt.xlabel('t', fontsize=19)
plt.ylabel('y', fontsize=19)
plt.legend()
plt.show()

img


其中紫色部分是误差

参考链接

https://zhuanlan.zhihu.com/p/131303043
https://zhuanlan.zhihu.com/p/422074759

posted on   HDU李少帅  阅读(170)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2020-11-13 手机变成网络摄像头
2019-11-13 这书能让你戒烟--有感
2018-11-13 pat乙级题目1087
2017-11-13 url中文 + MPC 识别

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示