欧拉方法的一点理解(基本原理,推导公式)

        本文只是作者的一点点理解,初衷是让小白看懂数学,去理解,而不是刻板的记公式,纯手敲,希望多多关注,大佬可以指点,但别喷我。

        本文的前提是常微分方程,很多地方我就不过多的讲解前提条件了,读者只要知道,一切的基础都是在常微分方程初值问题的表达式上进行的推导。



基本原理及推导:

        欧拉方法作为一种数值解法,首先我们要明确这是一种获取近似解的方法,存在误差。

思路:利用差商代替微分的思想,在几何上看是用折线近似等于曲线的思想

        那么什么是差商?什么是微分?

        微分,我想学到这部分,多少了解了,它的定义式如下:

y' = \frac{\mathrm{dy} }{\mathrm{d} x}= \frac{y(x+x_{\xi }) - y}{(x+x_{\xi })-x}

其中x_{\xi }\rightarrow 0

        我的理解的话,微分可以理解为某一个瞬间的状态,或者在平面图上,某一条线上每个x值对应的y值,即点是线的微分元素;在上面欧拉方法的解析式中,你可以理解步长h它就是一个微分元素,当步长趋近于0的时候,就是等价于微分方程了。

        差商,顾名思义,它就是差的商,是谁的差?同变量不同状态的差。是谁的商?因果的商,因变量和自变量的商。故有如下定义式

\Delta = \frac{y_{n+1}-y_{n}}{x_{n+1}-x_{n}}=\frac{\Delta y}{\Delta x}

        这样看,好像没有关联,那我们再给它换一件衣服看看,你会不会觉得妙呢??看下面

\frac{\Delta y}{\Delta x} = \frac{y(x+\Delta x)-y(x)}{(x-\Delta x)-x}

        当\Delta x\rightarrow 0时,我们可以看到上式与前面微分是等价的,但是这理论上的手段,显示中我们计算差商是不可能让步长,哦不,不可能让\Delta x趋向于0的,因为你手动计算不出来。所以这就是我们说用差商近似等于微分的缘由,可想而知误差也就来了。

        还要注意的一点是:欧拉方法原则上是等步长的递推方法,由初值条件可以推导出每一个x_{i}所对应的y值,广泛应用于宏观上的预测模型,我为什么说是宏观等你们学到其他的数值解法你就会明白了。


截断误差计算:

        这里其实我是不打算讲的,因为使用matlab进行计算的话,是用不到误差计算的推导公式的,MATLAB计算误差简单粗暴,直接使用精确解减去近似解的绝对值。下一期我出一个MATLAB编写欧拉算法的文章,绝对是教父级教程。

        回到正题,理论知识还是得学啊,误差计算的推导公式比较简单,使用泰勒展开式把欧拉方法表达式的左边进行展开,然后合并同类项。

欧拉方法表达式: y_{n+1} = y_{n} + h*f(y_{n},x{_{n}})

泰勒展开式在x=x_{n}处展开:y(x_{n+1})=y_{n}+(x_{n+1}-x_{n})*y'(x_{n})+o(x)

        因为y' = f(y,x),所以有

截断误差:\left | y_{n+1} -y(x_{n+1})\right | = o(x)

         由截断误差将欧拉方法收敛阶定义为一阶,这里不懂可以去看看相关的定义


结语:

        本文是我第一次尝试着解析数学的知识,如果反响好,会继续出,欧拉方法除了上面的内容,其实还有很多我没有深入去展开,比如稳定性、单步法、收敛阶、以及隐式欧拉方法,感兴趣的同学可以自己去了解,或者有需要可以评论。

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
欧拉方法是一种常用的数值方法,用于求解微分方程的初值问题。在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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值