当前位置:网站首页>欧拉法解微分方程
欧拉法解微分方程
2022-08-11 05:29:00 【YOUNIKOJIAO】
本文介绍如何使用简单的欧拉法求解微分方程,大部分内容出自吴一东老师在他的B站个人空间发布的课程
方法介绍
对于一个一般的微分方程:
{ d y d t = f ( y ( t ) , t ) y ( 0 ) = y 0 \begin{cases} \begin{aligned} \frac{\mathrm{d} y}{\mathrm{d} t} &= f(y(t), t)\\ y(0) &= y_0 \\ \end{aligned} \end{cases} ⎩⎨⎧dtdyy(0)=f(y(t),t)=y0
假如我们很难得到他的解析解或者不存在解析解,那我们可以尝试使用欧拉法将微分方程利用泰勒展开构造成一个递推式,通过程序将所有的点求出,进而得到他的数值解。以下说明求法:
区间划分
对于一个微分方程我们只关心函数的一段区域内的数值解。
t ∈ [ 0 , T ] t \in [0, T] t∈[0,T] 将区间划成 N N N段,则有 Δ t = T N \Delta t = \frac{T}{N} Δt=NT
t 1 = 0 , t 2 = Δ t , . . . , t n = ( n − 1 ) Δ t , . . . , t N + 1 = T t_1 = 0, t_2 = \Delta t, ..., t_{n} = (n-1)\Delta t ,...,t_{N+1} = T t1=0,t2=Δt,...,tn=(n−1)Δt,...,tN+1=T
泰勒展开
y ( t + Δ t ) = y ( t ) + d y d t ( t ) Δ t + O ( Δ t 2 ) = y ( t ) + f ( y ( t ) , t ) Δ t + O ( Δ t 2 ) \begin{aligned} y(t+\Delta t) &= y(t) + \frac{\mathrm{d} y} {\mathrm{d} t}(t)\Delta t + O(\Delta t^2) \\ &=y(t) + f(y(t), t)\Delta t + O(\Delta t^2) \end{aligned} y(t+Δt)=y(t)+dtdy(t)Δt+O(Δt2)=y(t)+f(y(t),t)Δt+O(Δt2)得到递推公式
y ( t n + 1 ) = y ( t n + Δ t ) = y ( t n ) + f ( y ( t n ) , t n ) Δ t + O ( Δ t 2 ) \begin{aligned} y(t_{n+1}) &= y(t_n + \Delta t)\\ &=y(t_n) + f(y(t_n), t_n)\Delta t + O(\Delta t^2) \end{aligned} y(tn+1)=y(tn+Δt)=y(tn)+f(y(tn),tn)Δt+O(Δt2)近似计算
y ( t n ) → t n y n + 1 = y n + f ( y n , t ) Δ t y(t_n) \to t_n\\ y_{n + 1} = y_n +f(y_n, t)\Delta t y(tn)→tnyn+1=yn+f(yn,t)Δt
示例
例1:
{ f ( y , t ) = y d y d t = y y ( 0 ) = 1 \begin{cases} \begin{aligned} f(y, t) &= y\\ \frac{\mathrm{d} y}{\mathrm{d} t} &= y\\ y(0) &= 1 \end{aligned} \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧f(y,t)dtdyy(0)=y=y=1
由题目其实我们很容易得知, y = e t y = e^t y=et 所以我们可以选择解析解对数值解方法进行验证
按上文求解方法我们求其数值解
y n + 1 = y n + y n Δ t y_{n + 1} = y_n + y_n\Delta t yn+1=yn+ynΔt
求解代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 设置初始条件
T = 5
N = 10000
dt = T / N
t = np.linspace(0, T, N + 1)
# 边界条件
y = np.zeros(N + 1)
y[0] = 1
for i in range(0, N):
y[i + 1] = y[i] + y[i] * dt
ex = np.exp(t)
plt.plot(t, y, color='red')
plt.plot(t, ex, color='blue')
plt.show()
边栏推荐
- Scene-driven feature calculation method OpenMLDB, efficient implementation of "calculate first use"
- 8-byte standard request parsing during USB enumeration
- [Meetup]OpenMLDBxDolphinScheduler 链接特征工程与调度环节,打造端到端MLOps工作流
- Real-time Feature Computing Platform Architecture Methodology and Practice Based on OpenMLDB
- JNI入门
- C语言实现猜数字(附带源码,可直接运行)
- 端口的作用
- 微信小程序_开发工具的安装
- Day 85
- USB URB
猜你喜欢
gerrit configure SSH Key and account, email information
何凯明新作ViTDET:目标检测领域,颠覆分层backbone理念
贡献者任务第三期精彩来袭
Invalid revision: 3.18.1-g262b901-dirty
Scene-driven feature calculation method OpenMLDB, efficient implementation of "calculate first use"
Vscode remote connection server terminal zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
Day 75
Tinker接入全流程---编译篇
[Meetup] OpenMLDBxDolphinScheduler engineering and scheduling link link characteristics, building the end-to-end MLOps workflow
Manufacturer Push Platform-Huawei Access
随机推荐
Invalid revision: 3.18.1-g262b901-dirty
Some formulas for system performance and concurrency
Node 踩坑之80端口被占用
Promise 中状态改变和回调执行先后顺序 和promise多次回调
哥德巴赫猜想与整数环
黑马大事件项目
USB 枚举过程中8 字节标准请求解析
将一个excel文件中多个sheet页“拆分“成多个“独立“excel文件
本地缓存cookie的使用
Day 71
Day 68
SearchGuard证书配置
JS case exercise (classic case of teacher pink)
jdbc接口文档参考,jdbc接口方法逻辑探究
OpenMLDB:线上线下一致的生产级特征计算平台
经纬度求距离
Compilation exception resolution
OpenMLDB Pulsar Connector:高效打通实时数据到特征工程
stack stack
openlayer中实现截图框截图的功能