欧拉方法

欧拉方法

维基百科,自由的百科全书

数学计算机科学中,欧拉方法,命名自它的发明者莱昂哈德·欧拉,是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解。它是一种解决常微分方程数值积分的最基本的一类显型方法(Explicit method)。

目录

   [隐藏

[编辑]非形式化的几何诠释

欧拉方法的图示。待求的曲线为蓝色,它的折线近似为红色。

考虑计算下面一个未知曲线的形状:它具有给定的起点并且满足一个给定的微分方程。 这里,所谓“微分方程”可以看作能够通过曲线上任意点的位置而计算出这一点的切线斜率的公式。

思路是,一开始只知道曲线的起点(假设为A_0),曲线其他部份是未知的,不过通过微分方程,A_0的斜率可以被计算出来,也就得到了切线。

顺着切线向前走一小步到点A_1。如果我们假设A_1是曲线上的一点(实际上通常不是),那么同样的道理就可以确定下一条切线,依此类推。在经过几步之后,一条折线A_0A_1A_2A_3\dots就被计算出来了。大部分的情况下,这条折线与原先的未知曲线偏离不远,并且任意小的误差都可以通过减少步长来得到(虽然对于刚性方程而言会比较复杂。下文将提到)。

[编辑]欧拉方法的推导

图示为方程 y'=y, y(0)=1.的数值积分。蓝色为欧拉法,绿色为 中点法,红色为精确解。 y=e^t.步长 h=1.0.
图示为同一个方程在步长 h=0.25时的结果。可以看出中点法比欧拉法收敛更快。

以以下微分方程为例

y'(t) = f(t,y(t)), \qquad \qquad y(t_0)=y_0,

希望用 y 在点 (t0,y(t0)) 附近的线性近似来得到其近似解(也就是 y 的泰勒展开式的前二项)。利用时间 tn时的数值,若用单步的欧拉方法,可得到时间 tn+1 = tn + h 时的近似值如下:

 y_{n+1} = y_n + hf(t_n,y_n).  \qquad \qquad

欧拉方法是一种显型方法,也就是说 y_{n+1} 的解是 y_ii \leq n 的显函数。

欧拉方法可以求解一阶的微分方程,一个N阶的微分方程可以用导入 N-1 个变量来表示 y'y'', ..., y^{(N)}的方式,分解为N个一阶的微分方程。因此可以用欧拉方法求解以下的向量 \mathbf{y}(t)=(y(t),y'(t),y''(t),...,y^{(N)}(t)) 来得到高阶微分方程的解。

[编辑]应用例题

设微分方程为 y'=y ,初始值为 y(0)=1, 试用欧拉方法求 y_3的近似值,步长为 h=1.

欧拉法则表达式:

 y_{n+1} = y_n + hf(t_n,y_n).  \qquad \qquad

首先求f(t_0, y_0) 当n = 0 . 此微分方程仅有一个变量 y, 因此无须考虑给y赋值.

 f(y_0)=1. \qquad \qquad

以上解得切线的斜率,切点(0,1)在解曲线上。回顾斜率的定义:在单位时间内,y变量和t变量的比值, 可以计作为 \operatorname{d}y/\operatorname{d}t.

 h \cdot f(y_0) = 1 \cdot 1 = 1. \qquad \qquad
 y_0 + hf(y_0) = y_1 = 1 + 1 \cdot 1 = 2. \qquad \qquad

重复以上步骤求出 y_2 和 y_3 的值.

 y_2 = y_1 + hf(y_1) = 2 + 1 \cdot 2 = 4 \qquad \qquad
 y_3 = y_2 + hf(y_2) = 4 + 1 \cdot 4 = 8 \qquad \qquad

由于欧拉法则属于递归算法,为了避免出现计算错误,建议使用Excel或者类似的制表程序

y_n t_n y'(t) h dy y_{n+1}
1 0 1 1 1 2
2 1 2 1 2 4
4 2 4 1 4 8

[编辑]误差分析

[编辑]参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欧拉方法是一种常用的数值方法,用于求解微分方程的初值问题。在MATLAB中,可以使用以下代码实现欧拉方法: ```MATLAB function [t, y = my_euler(f, t0, tf, y0, h) M = floor((tf - t0) / h); t = zeros(M+1, 1); y = zeros(M+1, 1); t = (t0:h:tf)'; y(1) = y0; for i = 1:M y(i+1) = y(i) + h * feval(f, t(i), y(i)); end end ``` 其中,f是微分方程的右端函数,t0和tf是计算区间的起始和终止点,y0是初值,h是步长。这段代码定义了一个名为`my_euler`的函数,可以传入相应的参数,返回离散化的时间点t和对应的数值解y。在循环中,通过欧拉方法的迭代公式来逐步计算数值解。 需要注意的是,该代码是通过前向欧拉法来实现欧拉方法。其他改进方法,如后向欧拉法、梯形方法和改进欧拉方法,可以通过对上述代码稍作修改来实现。例如,后向欧拉法可以将迭代公式改为`y(i+1) = y(i) + h * feval(f, t(i+1), y(i+1))`,梯形方法可以使用梯形公式进行迭代计算,改进欧拉方法可以使用改进公式进行迭代计算。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [欧拉法及其他改进方法——Matlab实现](https://blog.csdn.net/qq_36312878/article/details/80945781)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [matlab:使用欧拉方法求解微分方程](https://blog.csdn.net/qq_41708281/article/details/124243519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [前向欧拉法、后向欧拉法、梯形方法、改进欧拉方法MATLAB](https://download.csdn.net/download/qq_36318771/11030011)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值