常微分方程编程基础(ODE)

第四十五篇 常微分方程编程基础

在工程分析的许多问题中,物理定律是用变量的导数表达的而不是变量本身来表示的,因此需要解决微分方程。
微分方程的解本质上涉及积分,有时可以用解析法得到。例如,最简单的微分方程是这种形式的
在这里插入图片描述
其中f(x)是x的函数,y(x)是必需解。假设f(x)可以积分,上式可以写成
在这里插入图片描述
其中C是任意常数。为了找到C的值,需要一些额外的信息,例如对应于特定的x值的y的初始值。
微分方程可以有许多不同的形式,在方程的右边经常涉及x和y的函数。因此,在描述不同的求解技巧之前,我们需要定义一些重要的微分方程类,因为这可能会影响我们解决特定问题的方法。

常微分方程的定义和基础

微分方程可以分为两种不同的类别,这取决于它们所包含的自变量的数量。如果只有一个自变量,则导数为“正常”,则方程称为“常微分方程”。如果存在一个以上的自变量,则导数为“部分的”,则该方程称为“偏微分方程”。
只有一个自变量的常微分方程虽然可以被认为是偏微分方程的一种特殊情况,但最好分开考虑这两类方程的求解技巧。本部分将专门讨论ode(常微分方程)的解决方案,而对偏微分方程的解决方案将在下一部分介绍。
ODE的“阶”对应于出现在方程中的最高阶导数,因此
在这里插入图片描述
上面的符号对应下面的概念
在这里插入图片描述
在这里插入图片描述
一个“线性”的ODE是一个不包含因变量或其导数的乘积,因此上面第一个方程是线性的,上面有平方的方程是非线性的,由于平方项。给出了一般的n阶线性方程
在这里插入图片描述
ODE的“次”是指最高阶导数的幂次,因此上面方程都是一次的。这个定义的一个结果是,所有的线性方程都是一阶的,但不是所有的一阶方程都是线性的,例如,
在这里插入图片描述
非线性方程很难用解析方法求解,而且可能有多个解。
微分方程的阶数越高,为了得到一个解,必须提供更多的附加信息。例如,下面方程在数学上都是等价的表述,但是二阶方程需要两个额外的信息,而一阶方程只需要一个额外的信息。
在这里插入图片描述
第三个方程是纯代数的,表示两个微分方程的解。
一般来说,要得到n阶常微分方程的解,需要n个额外的信息。
这些附加信息的提供方式对数值解的方法有很大的影响。如果所有的信息都给出了相同的自变量值,该问题被称为“初值问题”或IVP。如果在自变量的不同值处提供信息,如下面给出的二阶系统,则该问题称为“边值问题”或BVP
在这里插入图片描述
还需要注意的是,由于一阶方程只需要一个附加信息,所以所有一阶方程都可以视为初值问题。然而边值问题至少是二阶的。
初值问题和边值问题的数值解法有很大的不同,因此将会分开讨论。

初始值问题

我们现在只讨论符合该形式初始条件的一阶方程的数值解
在这里插入图片描述
其中f(x, y)是x和y的任意函数。方程是一阶的,但是它可以是线性的,也可以是非线性的,这取决于函数f(x, y)的性质。
值得注意的是,如果f(x, y)是线性的,则方程可以通过分离变量或使用“积分因子”进行解析求解。然而,如果f(x, y)是非线性的,则解析方法是非常有限的,可能是不可能的求解的。只有有限数量的非线性微分方程可以解析解。
上面方程的所有数值方法都是从初始条件(x0, y0)开始,并沿x轴前进。在每一步,估计一个新的y值。当采取更多步骤时,得到所需解y(x)的形式。
基本上,由x变化引起的y变化可以通过对dy/dx积分得到,因此
在这里插入图片描述
其中(xi, yi)表示步骤开始时的“旧”解,yi+1是对应于xi+1的y的“新”估计。步长x通常由我们控制,定义为h,因此
在这里插入图片描述
将上面式子重排可得
在这里插入图片描述
上面方程给出了本节中所描述的用于初值问题的求解的所有数值求解技巧的一般形式。在前面的篇章中,在一条曲线(y)与x来计算一个“区域”,但在这篇中,将整合在一个x y曲线与计算y的变化。许多前面描述的数值积分方法仍然适用。这里的主要区别是要积分的函数可能同时依赖于x和y;因此,需要修改我们的方法来解释这一点。
执行上面公式的积分主要有两种方法:
(a)一步法,只使用前一点(xi, yi)的信息来估计下一个点(xi+1, yi+1)。

(b)多步法,利用前面几个点的信息,(xi, yi), (xi−1,yi−1)…以此来估计下一个点(xi+1, yi+1)。这些方法有时也被称为“预测-校正”方法,因为每一步都可以使用两个公式;一种是“预测”新的解决方案yi+1,另一种是改进或“修正”它。
一步方法是自动启动的,只使用提供的初始条件,而多步方法需要几个连续的x和y初值来启动。如果在初始数据中没有提供这些额外的初始值,则可以通过一步法提供。
首先讨论标准形式的数值解。稍后将说明,高阶ode可以分解为一阶方程组,这些方程组可以用相同的方法求解。

一步法

之所以称为一步方法,是因为只需要有关前一步的信息就可以在下一步生成解。这使得一步法在计算机程序中相对容易实现。正如许多数值方法的典型,每一步做的工作越多,通常获得的精度就越大。需要在增加每个步骤的工作和减少范围的步骤数之间进行权衡。本节中介绍的所有一步方法最终将在下篇的程序中实现。

欧拉法

该方法具有简单的优点;然而,它通常需要小的步长来达到合理的精度。该方法广泛应用于使用“显式”算法的程序中。
从标准问题开始
在这里插入图片描述
欧拉法利用序列估计y的新值
常微分方程编程基础(ODE)_第1张图片
然后使用“新的”初始条件(x1, y1)来估计y2,以此类推。通常我们得到
常微分方程编程基础(ODE)_第2张图片
下图展示了欧拉方法的工作原理。数值近似解是每一步开始处的切线对应的一条直线。显然,除非实际解恰好是线性的,否则这种假设会有一些错误。在这种方法中,除非使用很小的步长h,否则误差会很快累积,但考虑到效率和机器精度,h的大小是有限制的。
常微分方程编程基础(ODE)_第3张图片

计算实例

给下面的方程
在这里插入图片描述
使用欧拉法 令(a) h = 0.25 and (b) h = 0.1去计算y(2.5)
在这个简单的方法中,为了便于手算,将涉及K0的中间步骤直接纳入方程中。
(a) 如果 h = 0.25将需要两步
常微分方程编程基础(ODE)_第4张图片
(b) 如果 h = 0.1将需要5步
常微分方程编程基础(ODE)_第5张图片
精确解为y = x[1 + ln(x/2)], 因此y(2.5) =3.058

修正欧拉法

改进欧拉方法是使用高阶积分规则评估的变化y。修改后的欧拉方法执行的数值积分方程使用梯形法则导数的“取样”点在开始和结束的时候。
标准问题的初始为
在这里插入图片描述
改进的欧拉方法利用序列估计y的新值
常微分方程编程基础(ODE)_第6张图片
其中K0是步骤开始时根据斜率的y变化量,K1是步骤结束时根据斜率的y变化量。
如下图所示,数值解比简单的欧拉法更接近于精确解,因为方程的积分是通过在步骤开始和结束时分别采样的导数f(x, y)来计算的。
常微分方程编程基础(ODE)_第7张图片
K0的计算相当于一个简单的欧拉步骤,然后用这个步骤计算末端式的K1,从而得到“修正”欧拉方法。y的估计变化是通过方程给出的两个k值的平均值。

计算实例

对于下面的方程
在这里插入图片描述
h=0.25,使用修正欧拉方法去计算y(2.5)。
如果h = 0.25,则需要两步
第一步
常微分方程编程基础(ODE)_第8张图片
第二步
常微分方程编程基础(ODE)_第9张图片
与精确解3.058比较,
这显然代表了一个相当大的改进,比使用相同的步长h = 0.25的简单欧拉解3.028更精确。

中点法

中点法使用中点规则(或一点高斯-勒让德法则)对方程进行数值积分,在步骤的中点对导数进行取样,如下图所示。该方法具有与修正欧拉方法相似的精度,对于在x和y上都是线性的导数函数实际上会给出相同的解。本篇提到的高斯-勒让德的中点法则和辛普森法则可查看本篇重复高斯勒让德求积分
以标准形式开始
在这里插入图片描述
中点法使用下面序列计算y的新值
常微分方程编程基础(ODE)_第10张图片
常微分方程编程基础(ODE)_第11张图片
在这里K0和之前一样是一个简单的欧拉步骤,但是在这种情况下K1是基于步骤中间值的斜率y的变化量。

对于下面的方程

在这里插入图片描述
设h = 0。25,用中点方法估计y(2.5)。
如果h=0.25将需要两步
第一步
常微分方程编程基础(ODE)_第12张图片
第二步
常微分方程编程基础(ODE)_第13张图片

龙格-库塔方法

龙格-库塔法是指一类求解初值问题的一步法,包括欧拉法和修正欧拉法,它们分别是一阶方法和二阶方法。方法的“阶”指的是等效截断泰勒级数展开中h的最高次幂。
采用龙格-库塔法一步求解的一般形式如下
在这里插入图片描述
其中Wj为加权系数,r为方法的次数。Kj项是对宽度为h的步长内r个位置上y变化量的估计。
一种非常简单的四阶龙格库塔法得到了广泛的应用,有时被称为龙格库塔法。
以标准形式开始
在这里插入图片描述
四阶龙格-库塔法利用序列估计y的新值
常微分方程编程基础(ODE)_第14张图片
该方法简单、准确,是一阶微分方程数值解法中最常用的一步法之一。函数在步骤的开始、中间和结束以1:4:1的比例进行取样,这表示了计算y变化的“辛普森式”规则。
对于下面方程
在这里插入图片描述
用四阶龙格-库塔方法估计y(2.5)。
由于在本例中我们使用的是高阶方法,因此我们将尝试使用h = 0.5的一步来求解
步骤1
常微分方程编程基础(ODE)_第15张图片
解与精确到小数点后三位的精确解是一致的。

你可能感兴趣的:(有限元,数值分析,python,线性代数)