imtoken钱包下载官方|ode

imtoken钱包下载官方 2024-03-07 20:17:24

通俗易懂的微分方程理论:从ODE到PDE - 知乎

通俗易懂的微分方程理论:从ODE到PDE - 知乎切换模式写文章登录/注册通俗易懂的微分方程理论:从ODE到PDE图通道本文介绍微分方程的基本概念,并以弹簧振子和杆振动两个MATLAB数值算例阐释常微分方程 (ODE) 和 偏微分方程 (PDE) 之间的联系。微分方程(ODE & PDE)方程的形式有很多。代数方程是指含有未知数的等式;而微分方程,是指含有未知函数及其导数的等式。代数方程的解是常数,而微分方程的解是函数。现有未知数x, t,一元未知函数f和二元未知函数u,分别构造出关于x的代数方程,关于f的常微分方程和关于u的偏微分方程如下:当微分方程的未知函数是一元函数时,列出的方程为常微分方程。此处的“常”(Ordinary)表示平常,也就是在一般情况(理想情况)下的微分方程。上图列出的微分方程中f导数的最高阶次为2,微分方程即为2阶。当讨论微分方程的阶或者齐次性时,不关注未知函数的自变量,而只关注未知函数本身。但现实世界是复杂的,如电磁理论和电动力学(麦克斯韦方程组),流体运动(欧拉方程组和纳维-斯托克斯方程组),弹性体变形(平衡微分方程组),量子力学基本规律(薛定锷方程),等等。因此未知函数通常是多元函数(如与时间、位置相关),此时列出的方程为偏微分方程。从定义中,可以看出,常微分方程是偏微分方程的子集。常微分方程(弹簧振子)牛顿第二定律利用微积分,振子的加速度可以表达为位置矢量的二阶导数。即可以把牛顿第二定律表达为如下形式:胡克定律胡克定律表达了振子离开平衡位置的位移与所受弹力成正比。弹力方向始终与位移的方向相反(前提是我们把振子的平衡位置定义为原点,即位移为0的位置)。建立常微分方程常微分方程组(弹簧振子串联)以上的常微分方程中只有一个未知函数u,并且该未知函数只与时间t有关。当有数个弹簧振子串联时,未知函数的个数增加,需用常微分方程组才能描述运动。建模方法与单个振子相同,只是胡克定律部分的表达式稍有改变。之所以需要微分方程组,是因为单个常微分方程不能包含振子的位置信息,因此需要用变量名区分!上述常微分方程组中的每一个方程都具有相似的形式:右端项含有位移的二阶差分。此时可以用微分代替差分,自然地将位置信息引入未知函数u,得到可以描述任意多振子的偏微分方程(无数常微分方程的叠加)。偏微分方程(杆振动)根据上述的推演,我们已经可以得到描述无数个振子串联的运动方程,即可以看成杆的纵向振动方程。这一推导过程可能与常见的力学推导有所不同,读者可以与利用应力-应变关系推导的结果进行比较,结果应该是一致的。弦的横向振动具有相似的运动微分方程。MATLAB仿真本采用有限差分法求解杆的纵/横向振动(一维波动方程数值解)。对于离散系统动画,降低空间离散化数目即可。​% 一维波动方程数值解

% 杆的纵向振动

% 有限差分法

% 编写环境: MATLAB R2019b

function rodvibration_4

close all

c = 3; % 波速

xmin = 0;

xmax = 30;

Nx = 200; % 空间离散化数目

tmin = 0;

tmax = 100*10;

Nt = 2401*10; % 时间离散化数目

bc = 'd'; % 边界条件

x = linspace(xmin, xmax, Nx)';

t = linspace(tmin, tmax, Nt);

dx = (xmax - xmin)/(Nx - 1);

dt = (tmax - tmin)/(Nt - 1);

C = c*dt/dx; C2 = C*C;

u = zeros(Nx, Nt);

u(:,1) = u0(x); % 设置初始波形

u(:,2) = u0(x-c*dt);

D2 = @(v) [0; v(1:end-2) - 2*v(2:end-1) + v(3:end); 0]; % 二阶差分(边界元设为 0)

for n = 2:Nt-1

u(:,n+1) = 2*u(:,n) - u(:,n-1) + C2*D2(u(:,n));

u = bc_set(u, n+1, bc, c, dx, dt);

......仿真结果如下:完整代码下载:编辑于 2022-10-29 00:34微分方程Matlab振动​赞同 69​​3 条评论​分享​喜欢​收藏​申请

ODE笔记:简单方程的求解 - 知乎

ODE笔记:简单方程的求解 - 知乎切换模式写文章登录/注册ODE笔记:简单方程的求解LingoZero一个沉迷于低级趣味的人本文为常微分方程课程笔记,主要内容为:利用级数法研究常系数线性齐次ODE,并得到其求解方法利用Picard序列导出常数变易法,进而得到线性非齐次ODE的求解方法1 常系数线性齐次常微分方程的求解1.1 级数法在ODE基本定理中我们证明了:如下的线性ODE系统\begin{cases} y^{(n)}+a_{n-1}y^{(n-1)}+\cdots+a_0(t)y+b(t)=0\\ y^{(k)}(t)\mid_{t=t_0}=b_k&k=0,1,2,\cdots,n-1 \end{cases}\\ 当 a_k(t) , b(t) 均解析时,方程存在唯一的解,且解是解析的.由于解的解析性,我们可以将解表示为 y(t)=\sum_{i=0}^\infty c_k\frac{(t-t_0)^k}{k!} ,级数法的想法正是将解表示为级数形式,并代入原方程求解对应项系数,进而得到解的级数表达式.【例】作为级数法求解ODE的例子,我们讨论下面的方程y'''=y\\ 设方程的解为 y(t)=\sum_{i=0}^\infty c_k\frac{(t-t_0)^k}{k!},代入方程有\begin{aligned} y'''&=\sum_{i=3}^\infty c_kk(k-1)(k-2)\frac{(t-t_0)^{k-3}}{k!}=\sum_{i=0}^\infty c_{k+3}\frac{(t-t_0)^k}{k!}\\ &=y=\sum_{i=0}^\infty c_{k}\frac{(t-t_0)^k}{k!} \end{aligned}\\ 即数列满足 c_{k+3}=c_k ,方程的解可以写为\begin{aligned} y(t)&=c_0\sum_{i=0}^\infty \frac{(t-t_0)^{3k}}{(3k)!}+c_1\sum_{i=0}^\infty \frac{(t-t_0)^{3k+1}}{(3k+1)!}+c_2\sum_{i=0}^\infty \frac{(t-t_0)^{3k+2}}{(3k+2)!}\\ &=c_0\varphi_0 (t)+c_1\varphi_1 (t)+c_2\varphi_2 (t) \end{aligned} 考虑\begin{cases} e^{t-t_0}=\sum_{i=0}^\infty \frac{(t-t_0)^k}{k!}\\ e^{\rho(t-t_0)}=\sum_{i=0}^\infty \frac{\rho^k(t-t_0)^k}{k!}\\ e^{\rho^2(t-t_0)}=\sum_{i=0}^\infty \frac{\rho^{2k}(t-t_0)^k}{k!}\\ \end{cases}\\ 其中 \rho=e^{\frac{2\pi i}{3}} (i=0,1,2) (这里引入的目的在1.2中将得到说明)\frac13 (e^{t-t_0}+e^{\rho(t-t_0)}+e^{\rho^2(t-t_0)})=\sum_{i=0}^\infty \frac{1+\rho+\rho^2}3\frac{(t-t_0)^k}{k!}=\sum_{i=0}^\infty \frac{(t-t_0)^{3k}}{(3k)!}=\varphi_0(t) 对上式两边分别求导可依次求得 \varphi_1(t) 和 \varphi_2(t) ,代入即为原方程的解为.【注】:严格来说到这里并没有结束. 还需要说明 \varphi_0(t),\varphi_1(t) , \varphi_2(t) 构成的解系是线性无关的(级数法的并不总是保证这一点),需要通过朗斯基行列式进行判定.1.2 常系数线性齐次常微分方程简便起见,下面以二阶的情况为例讨论,更高阶的情况是类似的.y''+by'+c=0\\ 设解的形式为 y(t)=\sum_{i=0}^\infty c_k\frac{(t-t_0)^k}{k!},考虑到y'(t)=\sum_{i=0}^\infty c_{k+1}\frac{(t-t_0)^k}{k!}\\ y'(t)=\sum_{i=0}^\infty c_{k+1}\frac{(t-t_0)^k}{k!} 代入原方程可化简为c_{k+2}+bc_{k+1}+cc_k=0\tag{*}\\ 则问题转化为求解数列 \{c_k\} .(*) 式等价于\begin{bmatrix}c_{k+2}\\c_{k+1}\end{bmatrix}= \begin{bmatrix}-b&-c\\1&0\end{bmatrix} \begin{bmatrix}c_{k+1}\\c_{k}\end{bmatrix}\\ 利用线性代数的相关知识可以求解得:令 \det(r I-A) =0 ,设求出的特征根分别为 r_1 , r_2 (即方程 r^2+br+c=0 的解)(1)当 r_1\not=r_2 时\begin{aligned} c_k&=r_1^{k}\frac{r_2c_0-c_1}{r_2-r_1}+r_2^k\frac{c_1-r_1c_0}{r_2-r_1}\\ y(t)&=\sum_{i=0}^\infty c_k\frac{(t-t_0)^k}{k!}=\frac{r_2c_0-c_1}{r_2-r_1}e^{r_1(t-t_0)}+\frac{c_1-r_1c_0}{r_2-r_1}e^{r_2(t-t_0)} \end{aligned}\\ 如果不考虑参数的具体形式,则解的结构为y(t)=C_1e^{r_1(t-t_0)}+C_2e^{r_2(t-t_0)}\\ (2)当 r_1=r_2=r 时\begin{aligned} c_k&=r^{k-1}kc_1-r^k(k-1)c_0\\ y(t)&=c_0e^{r(t-t_0)}+(c_1-rc_0)(t-t_0)e^{r(t-t_0)} \end{aligned}\\ 类似上面,如果只考虑解的结构,则有y=C_1e^{r(t-t_0)}+C_2te^{r(t-t_0)}\\ 综合上面的讨论有,二阶常系数线性齐次ODE的解为y(t)=\begin{cases} C_1e^{r_1(t-t_0)}+C_2e^{r_2(t-t_0)}&r_1\not=r_2\\ C_1e^{r(t-t_0)}+C_2(t-t_0)e^{r(t-t_0)}&r_1=r_2=r \end{cases}\\ 上面的结论还可以推广到n阶的情况.2 线性非齐次方程的求解2.1 常数变易法常数变易法通过将线性非齐次ODE转化为线性齐次ODE,进而降低求解难度,下面以一阶线性ODE系统为例进行说明:\begin{cases} \frac{{\rm d}y}{{\rm d}t}=a(t)y+g(t)\\ y\mid_{t=t_0}=y_0 \end{cases}\tag{*}\\ 设方程的解具有下面的形式 y(t)=e^{\int a(t){\rm d}t}C(t)\\ 代入原方程并化简可得\frac{{\rm d}C(t)}{{\rm d}t}=e^{-{\int a(t){\rm d}t}}g(t)\\ 这是一个线性齐次ODE,求解该方程并代入有y(t)=e^{\int a(t){\rm d}t}(\int g(t)e^{-\int a{\rm d}t}{\rm d}t+K)\tag{**}\\ 其中 K 为由初值确定的常数. (**) 即为原方程的解.2.2 常数变易法的原理有很多种解释常数变易法的思路,这里选取两种介绍. 一种是基于配凑的(思维难度较小,但是其实显得有些生硬),一种是基于对Picard序列的研究的(与前序知识的连续性较好).2.2.1 方法1对一阶线性ODE系统\begin{cases} \frac{{\rm d}y}{{\rm d}t}=a(t)y+g(t)\\ y(t)\mid_{t=t_0}=y_0 \end{cases}\tag{*}\\ 我们假设解具有如下形式y(t)=u(t)v(t)\\ 代入 (*) 中的ODE整理可得u\frac{{\rm d}v}{{\rm d}t}+v(\frac{{\rm d}u}{{\rm d}t}-au)=g(t)\\ 考虑到这里的 u(t) 只需要找到一个特定的函数即可,为了简化方程,令\frac{{\rm d}u}{{\rm d}t}-au=0\\ 则方程化为\begin{cases} u\frac{{\rm d}v}{{\rm d}t}=g(t)\\ \frac{{\rm d}u}{{\rm d}t}-au=0\\ \end{cases}\\ 求解这个方程有y(t)=u(t)v(t)=e^{\int a(t){\rm d}t}\cdot(\int e^{-{\int a(t){\rm d}t}}g(t){\rm d}t+C)\\ 2.2.2 方法2构造 (*) 系统的Picard序列\begin{cases} y_0=y_0\\ y_1=y_0+y_0\int_{t_0}^ta(s)ds+\int_{t_0}^tg(s)ds\\ y_2=y_0+y_0\int_{t_0}^ta(s)ds+y_0\int_{t_0}^t(a(s)\int_{t_0}^sa(s_1)ds_1)ds+\int_{t_0}^tg(s)ds+\int_{t_0}^t(a(s)\int_{t_0}^sg(s_1)ds_1)ds\\\cdots \end{cases}\\ y_k 可以分为两部分,即\begin{aligned} y_k&=y_0(1+\int_{t_0}^ta(s)ds+\int_{t_0}^t(a(s)\int_{t_0}^sa(s_1)ds_1)ds+\cdots)\\ &+(\int_{t_0}^tg(s)ds+\int_{t_0}^t(a(s)\int_{t_0}^sg(s_1)ds_1)ds+\cdots)\end{aligned}\\ 一方面,考虑下面的ODE系统(即原方程的齐次形式)\begin{cases} \frac{{\rm d}y}{{\rm d}t}=a(t)y\\ y(t)\mid_{t=t_0}=y_0 \end{cases}\\ 这个系统对应的Picard序列为 y_{hk}=y_0(1+\int_{t_0}^ta(s)ds+\int_{t_0}^t(a(s)\int_{t_0}^sa(s_1)ds_1)ds+\cdots)\\ 另一方面,容易验证系统 (*) 有特解y_p=\int_{t_0}^tg(s)ds+\int_{t_0}^t(a(s)\int_{t_0}^sg(s_1)ds_1)ds+\cdots\\ (严格来说,这里还需要证明上面两个式子右边的级数是收敛的)则 (*) 的解可以表示为y(t)=y_{hk}(t)+y_p(t)\\ 上面的式子其实利用代数知识也可以直接得到,但是真正有意思的是下面对 y_p 的讨论将 g(x) 设为级数形式 g(x)=\sum_{i=0}^\infty b_k\frac{(t-t_0)^k}{k!} ,则有\begin{aligned} y_p&=\int_{t_0}^tg(s)ds+\int_{t_0}^t(a(s)\int_{t_0}^sg(s_1)ds_1)ds+\cdots\\ &=\int_{t_0}^t\sum_{i=0}^\infty b_k\frac{(s-t_0)^k}{k!}ds+\int_{t_0}^t(a(s)\int_{t_0}^s\sum_{i=0}^\infty b_k\frac{(s_1-t_0)^k}{k!}ds_1)ds+\cdots\\ &= b_0((t-t_0)+\int_{t_0}^ta(s)(t-t_0)ds+\cdots)\\ &+b_1(\frac{(t-t_0)^2}{2!}+\int_{t_0}^ta(s)\frac{(s-t_0)^2}{2!}ds+\cdots)\\ &+\cdots \end{aligned}\\ 考虑到y_{hk}=y_0e^{\int_{t_0}^ta(s)ds}=y_0\sum_{i=0}^\infty\frac{(\int_{t_0}^ta(s)ds)^k}{k!}\\ 在不考虑具体函数形式的情况下,y_p总能化为下面的结构y_p(t)=h(t)y_{hk}(t)\\ 则 (*) 的解可以表示为\begin{aligned} y(t)&=y_{hk}(t)+y_p(t)\\ &=y_{hk}+h(t)y_{hk}\\ &=y_{hk}(1+h(t)) \end{aligned}\\ 如果记 C(t)=1+h(t) ,那么有y(t)=C(t)y_{hk}(t)\\ 则问题转化为求解 (*) 对应的齐次方程的解和一个特定函数 C(t) ,也就是常数变易法的思想. 编辑于 2020-12-18 12:44常微分方程高等数学 (大学课程)​赞同 18​​添加评论​分享​喜欢​收藏​申请

百度知道 - 信息提示

百度知道 - 信息提示

百度首页

商城

注册

登录

网页

资讯

视频

图片

知道

文库

贴吧采购

地图更多

搜索答案

我要提问

百度知道>提示信息

知道宝贝找不到问题了>_

该问题可能已经失效。返回首页

15秒以后自动返回

帮助

 | 意见反馈

 | 投诉举报

京ICP证030173号-1   京网文【2023】1034-029号     ©2024Baidu  使用百度前必读 | 知道协议 

常微分方程(ODE)求解方法总结-CSDN博客

>

常微分方程(ODE)求解方法总结-CSDN博客

常微分方程(ODE)求解方法总结

一只特立独行的蚂蚁

已于 2023-06-27 20:38:14 修改

阅读量1w

收藏

23

点赞数

6

分类专栏:

数值分析算法

文章标签:

算法

于 2023-06-03 21:50:49 首次发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luolei188/article/details/131025102

版权

数值分析算法

专栏收录该内容

10 篇文章

17 订阅

订阅专栏

常微分(ODE)方程求解方法总结

1 常微分方程(ODE)介绍1.1 微分方程介绍和分类1.2 常微分方程的非计算机求解方法1.3 线性微分方程求解的推导过程

2 一阶常微分方程(ODE)求解方法2.1 欧拉方法2.1.1 欧拉方法2.1.2 欧拉方法的误差分析2.1.3 欧拉方法的改进思路1——添加高阶项2.1.4 欧拉方法的改进思路2——对斜率采用更好的估值方法2.1.4.1 修恩法2.1.4.2 中点方法

2.1.5 欧拉方法的改进思路3

2.2 龙格-库塔法2.2.1 二阶龙格-库塔法2.2.2 三阶龙格-库塔法2.2.2+ 牛顿积分公式2.2.3 四阶龙格-库塔法2.2.4 高阶龙格-库塔法2.2.5 龙格-库塔法分析

3 一阶常微分方程组3.1 欧拉方法3.2 龙格-库塔法

4 自适应龙格·库塔法4.1 步长控制中的误差估计方法4.1.1 自适应龙格-库塔法或步长——对分法4.1.2 龙格-库塔-费尔贝格法4.1.3 其他改进思路

4.2 步长控制

1 常微分方程(ODE)介绍

1.1 微分方程介绍和分类

举例:假设跳伞人的下落速度v于时间有如下关系:

d

v

d

t

=

g

c

m

v

\frac{dv}{dt} = g-\frac{c}{m}v

dtdv​=g−mc​v (1.1)

其中g为重力常数,m为质量,c为阻力系数。

被微分的量v因变量,与v有关的变量t称为自变量。 如果函数只有一个自变量,那么方程就称为常微分方程(ordinary differential equation,ODE)。 如果函数含有两个或者多个自变量,则成为偏微分方程(partialdifferential equation,PDE)。

此外,微分方程也可以根据阶数来分类:最高阶导数是一阶导数,则称为一阶微分方程(first-order-equation);最高阶导数是二阶导数,则称为二阶微分方程(second-order-equation)。例如如(1.1)中就是一阶微分方程,下式(1.2)就是一个二阶微分方程。

m

d

2

x

d

t

2

+

c

d

x

d

t

+

k

x

=

0

m\frac{d^2x}{dt^2} +c\frac{dx}{dt} + kx = 0

mdt2d2x​+cdtdx​+kx=0 (1.2)

高阶微分方程能简化成一阶方程组。考虑上式(1.2),定义新变量y,令

y

=

d

x

d

t

y=\frac{dx}{dt}

y=dtdx​ (1.3)

对上式取微分得:

d

y

d

t

=

d

2

x

d

t

2

\frac{dy}{dt}=\frac{d^2x}{dt^2}

dtdy​=dt2d2x​ (1.4)

将式(1.3)和(1.4)代入式(1.2)中得到:

m

d

y

d

t

+

c

y

+

k

x

=

0

m\frac{dy}{dt} +cy + kx = 0

mdtdy​+cy+kx=0 (1.5)

于是原来的二阶微分方程(1.2)可等价于两个一阶方程组(1.3)和(1.5)。

同样的,其他的n阶微分方程也可以用类似的方式简化。

1.2 常微分方程的非计算机求解方法

常微分方程通常采用解析积分得方法来求解。如对于式(1.1),先乘以dt,在进行积分得到:

v

=

(

g

c

m

v

)

d

t

v = \int{(g-\frac{c}{m}v)dt}

v=∫(g−mc​v)dt (1.6)

对于上式(1.6),是可以精确的推导出该积分得函数表达式的。因为该方程是线性的。

但在实际中,很多方程(是非线性的)精确解是无法求出的。于是提出了一个方法,就是将方程线性化。 (

n

n

n阶)线性常微分方程的一般形式是:

a

n

(

x

)

y

(

n

)

+

.

.

.

+

a

2

(

x

)

y

(

2

)

+

a

1

(

x

)

y

+

+

a

0

(

x

)

y

=

f

(

x

)

a_n(x)y^{(n)}+...+a_2(x)y^{(2)}+a_1(x)y'++a_0(x)y = f(x)

an​(x)y(n)+...+a2​(x)y(2)+a1​(x)y′++a0​(x)y=f(x) (1.7) 其中,

y

(

n

)

y^{(n)}

y(n)是y关于x的n阶导数,

a

n

(

x

)

a_n(x)

an​(x)和

f

(

x

)

f(x)

f(x)都是关于x的函数。因为该方程中未出现因变量y与其导数的乘积,也没有出现非线性函数。所以认为它是线性的。

如下式(1.8)是一个非线性微分方程:

d

2

x

d

t

2

+

g

l

s

i

n

(

x

)

=

0

\frac{d^2x}{dt^2} +\frac{g}{l} sin(x)= 0

dt2d2x​+lg​sin(x)=0 (1.8) 由于含有

s

i

n

(

x

)

sin(x)

sin(x)为非线性函数,故该微分方程是非线性的。

线性常微分方程是可以通过解析法求解的。但是,大部分非线性方程无法精确求解。

1.3 线性微分方程求解的推导过程

拿一个简单的方程举例。首先给定函数:

y

=

0.5

x

4

+

4

x

3

10

x

2

+

8.5

x

+

1

y=-0.5x^4+4x^3-10x^2+8.5x+1

y=−0.5x4+4x3−10x2+8.5x+1 (1.9) 这是一个四次多项式。对其进行微分,就得到一个常微分方程:

d

y

d

x

=

2

x

3

+

12

x

2

20

x

+

8.5

\frac{dy}{dx}=-2x^3+12x^2-20x+8.5

dxdy​=−2x3+12x2−20x+8.5 (1.10)

对式(1.10)乘以dx,在进行积分得到:

y

=

(

2

x

3

+

12

x

2

20

x

+

8.5

)

d

x

y=\int{(-2x^3+12x^2-20x+8.5)}dx

y=∫(−2x3+12x2−20x+8.5)dx (1.11) 应用积分法则得出解为:

y

=

0.5

x

4

+

4

x

3

10

x

2

+

8.5

x

+

C

y=-0.5x^4+4x^3-10x^2+8.5x+C

y=−0.5x4+4x3−10x2+8.5x+C (1.12) 除了相差一个C外,其余都与原函数相同。这个C称为积分常数(constant of integration)。 出现一个任意常数C表明,积分的结果并不算是唯一的。无限多个常数C对应无限多个可能的函数,都满足微分方程。下图给出了6个满足条件的函数:

为了将解完全确定下来,微分方程通常伴随有辅助条件(auxiliary conditions)。对于一阶常微分方程,有一类被称为**初值(initial value)**的辅助条件,这类条件用于确定常数值,从而使得解是唯一的。例如,给式(1.11)添加初始条件x=0,y=1。带入式(1.12)中,可推导出C=1。于是就得到了唯一解:

y

=

0.5

x

4

+

4

x

3

10

x

2

+

8.5

x

+

1

y=-0.5x^4+4x^3-10x^2+8.5x+1

y=−0.5x4+4x3−10x2+8.5x+1 这个解同时满足常微分方程和指定的初始条件。

当处理n阶微分方程时,就需要n个条件来确定唯一解。如果所有的条件都是在自变量同一值处指定的,那么问题就称为初值问题(initial-value problem)。与之相对的,边值问题(boundary-value problems),就是指在自变量的不同值处指定初始条件。

2 一阶常微分方程(ODE)求解方法

2.1 欧拉方法

2.1.1 欧拉方法

还是拿式(1.1)举例:

d

v

d

t

Δ

v

Δ

t

=

v

(

t

i

+

1

)

v

(

t

i

)

t

i

+

1

t

i

\frac{dv}{dt} \approx \frac{\Delta v}{\Delta t} = \frac{v(t_{i+1}) - v(t_{i})}{t_{i+1} - t_{i}}

dtdv​≈ΔtΔv​=ti+1​−ti​v(ti+1​)−v(ti​)​ (2.1) 其中,

Δ

v

\Delta v

Δv和

Δ

t

\Delta t

Δt分别为速度与时间的差分,

v

(

t

i

)

v(t_{i})

v(ti​)为初始时刻

t

i

t_i

ti​的速度,

v

(

t

i

+

1

)

v(t_{i+1})

v(ti+1​)为下一个时刻

t

i

+

1

t_{i+1}

ti+1​的速度。注意,

d

v

d

t

Δ

v

Δ

t

\frac{dv}{dt} \approx \frac{\Delta v}{\Delta t}

dtdv​≈ΔtΔv​ 是一个近似计算,因为:

d

v

d

t

=

lim

Δ

t

0

Δ

v

Δ

t

\frac{dv}{dt} = \lim_{\Delta t \to 0}\frac{\Delta v}{\Delta t}

dtdv​=limΔt→0​ΔtΔv​

式(2.1)称为在时刻

t

i

t_i

ti​处导数的有限差商(finite divided difference)逼近。将其代入式(1.1)中可得:

d

v

d

t

v

(

t

i

+

1

)

v

(

t

i

)

t

i

+

1

t

i

=

g

c

m

v

(

t

i

)

\frac{dv}{dt} \approx\frac{v(t_{i+1}) - v(t_{i})}{t_{i+1} - t_{i}} = g-\frac{c}{m}v(t_i)

dtdv​≈ti+1​−ti​v(ti+1​)−v(ti​)​=g−mc​v(ti​) (2.2)

对该方程进行整理可得:

v

(

t

i

+

1

)

=

v

(

t

i

)

+

[

g

c

m

v

(

t

i

)

]

(

t

i

+

1

t

i

)

v(t_{i+1}) = v(t_{i}) + [g-\frac{c}{m}v(t_i)](t_{i+1} - t_{i})

v(ti+1​)=v(ti​)+[g−mc​v(ti​)](ti+1​−ti​) (2.3)

注意1:在式(2.3)的中括号内部分

g

c

m

v

(

t

i

)

g-\frac{c}{m}v(t_i)

g−mc​v(ti​)其实就是式(1.1)常微分方程的右边

g

c

m

v

g-\frac{c}{m}v

g−mc​v,是不过这个是一个估计值,是拿

t

i

t_i

ti​对刻的速度来估计

t

i

t_i

ti​ ~

t

i

+

1

t_{i+1}

ti+1​这段时间的速度,但只要两个时间点距离越近,这个估值就准确。

根据式(2.3),如果给定了在某一对刻

t

i

t_i

ti​的初始值速度

v

i

v_i

vi​,就很容易计算出下一时刻

t

i

+

1

t_{i+1}

ti+1​的速度

v

i

+

1

v_{i+1}

vi+1​。接着又可以用

t

i

+

1

t_{i+1}

ti+1​时刻的新速度值来计算

t

i

+

2

t_{i+2}

ti+2​的速度,然后依次继续下去。这样,用这种方式就可以计算出任意时刻的速度。

新值

=

旧值

+

斜率

×

步长

新值 = 旧值 + 斜率 \times 步长

新值=旧值+斜率×步长 用数学语言表述为:

v

i

+

1

=

v

i

+

ϕ

×

h

v_{i+1} = v_{i} + \phi \times h

vi+1​=vi​+ϕ×h(2.4)

这种方法的就命名为欧拉法(Euler’s method)(或欧拉一柯西法(Euler-Cauchy method),或折线法 (point-slope method)。 欧拉方法利用斜率(等于一阶导数在

x

i

x_i

xi​处的值),通过线性外推的办法预测出y在前进步长h之后

x

i

+

1

x_{i+1}

xi+1​处的新值: 利用上面的方法,取步长为2(也就是每隔2秒,计算一次速度值),于是得到一系列时间t与速度v的值,将这些计算结果与精确解同时画在一个图中: 图5 速度v与时间t的关系的常微分方程的数值解与解析解的对比

上图中,如果我们将步长减小一半,以1秒的步长计算得到的结果,其误差将会更小,从而直线段的轨迹更趋近于真实解。但是步长每减小一半,可以得到更精确的结果,所需要的计算量也会翻一番。

2.1.2 欧拉方法的误差分析

常微分方程数值解的误差包括两种类型: (1)截断(Truncation)误差或离散误差,是由逼近Y值的方法本身引起的。 (2)舍入(Round-off误差,是由于计算机能保留的有效数字有限而引起的。 截断误差由两部分组成:第一部分是局部截断误差(local truncation error),指方法在一步迭代中所产生的误差。第二部分是传播截断误差(propagated truncation error),它是由前面各步中产生的逼近值引起的,这两部分的和称为整体截断误差或全局截断误差(global truncation error)。

利用泰勒级数展开直接推导欧拉方法,可以同时推出截断误差的大小和属性。假设被积分的微分方程具有一般形式:

y

=

f

(

x

,

y

)

y' = f(x, y)

y′=f(x,y)(2.5) 其中,

y

=

d

y

/

d

x

y' = dy/dx

y′=dy/dx,x和y分别为自变量和因变量。

如果解(也就是描述y行为的函数)具有连续导数,那么它可以在点(xi, yi)处展开成泰勒级数,即

y

i

+

1

=

y

i

+

y

i

h

+

y

i

2

!

h

2

+

.

.

.

+

y

i

(

n

)

n

!

h

n

+

R

n

y_{i+1}=y_i+y'_i*h+\frac{y''_i}{2!}*h^2+...+\frac{y^{(n)}_i}{n!}*h^n + R_n

yi+1​=yi​+yi′​∗h+2!yi′′​​∗h2+...+n!yi(n)​​∗hn+Rn​(2.6) 其中,

h

=

(

x

i

+

1

x

i

)

h = (x_{i+1}-x_i)

h=(xi+1​−xi​),

R

n

R_n

Rn​为余项,定义为:

R

n

=

y

(

n

+

1

)

(

ξ

)

(

n

+

1

)

!

(

h

)

(

n

+

1

)

R_n = \frac{y^{(n+1)}(\xi)}{(n+1)!}*(h)^{(n+1)}

Rn​=(n+1)!y(n+1)(ξ)​∗(h)(n+1)(2.7) 其中,

ξ

[

x

i

,

x

i

+

1

]

\xi \in [x_{i}, x_{i+1}]

ξ∈[xi​,xi+1​]。

由于

y

=

f

(

x

,

y

)

y' = f(x, y)

y′=f(x,y),所以

y

=

f

(

x

,

y

)

y'' = f'(x, y)

y′′=f′(x,y),

y

=

f

(

x

,

y

)

y''' = f''(x, y)

y′′′=f′′(x,y),依此类推,代入式(2.6)右边,同时也加入式(2.7),得到:

y

i

+

1

=

y

i

+

f

(

x

i

,

y

i

)

h

+

f

(

x

i

,

y

i

)

2

!

h

2

+

.

.

.

+

f

(

n

1

)

(

x

i

,

y

i

)

n

!

h

n

+

O

(

h

n

+

1

)

y_{i+1}=y_i+ f(x_i, y_i)*h+\frac{ f'(x_i, y_i)}{2!}*h^2+...+\frac{f^{(n-1)}(x_i, y_i)}{n!}*h^n + O(h^{n+1})

yi+1​=yi​+f(xi​,yi​)∗h+2!f′(xi​,yi​)​∗h2+...+n!f(n−1)(xi​,yi​)​∗hn+O(hn+1)(2.8) 此处

O

(

h

n

+

1

)

O(h^{n+1})

O(hn+1)表示局部截断误差与步长的n+1次幂成正比。

因为我们仅使用了泰勒级数的有限项来逼近真解,所以就产生了截断误差。这样,我们就截断或者略去了一部分真实解。例如,在前面的计算中,我们采用

y

i

+

1

=

y

i

+

f

(

x

i

,

y

i

)

×

h

y_{i+1} = y_{i} + f(x_i, y_i) \times h

yi+1​=yi​+f(xi​,yi​)×h来计算下一个点的值,有部分泰勒级数展开项没有被包括在式中,这些剩余项就导致了欧拉方法的截断误差:

E

t

=

f

(

x

i

,

y

i

)

2

!

h

2

+

.

.

.

+

f

(

n

1

)

(

x

i

,

y

i

)

n

!

(

h

)

n

+

O

(

h

n

+

1

)

E_t = \frac{ f'(x_i, y_i)}{2!}*h^2+...+\frac{f^{(n-1)}(x_i, y_i)}{n!}*(h)^n + O(h^{n+1})

Et​=2!f′(xi​,yi​)​∗h2+...+n!f(n−1)(xi​,yi​)​∗(h)n+O(hn+1)(2.9)

E

t

E_t

Et​为真实的局部截断误差。

当h足够小时,式(2.9)中各项的误差通常随着阶数的增加而减少。于是常常可以表示为:

E

a

=

f

(

x

i

,

y

i

)

2

!

h

2

E_a = \frac{ f'(x_i, y_i)}{2!}*h^2

Ea​=2!f′(xi​,yi​)​∗h2(2.10) 或者:

E

a

=

O

(

h

2

)

E_a =O(h^2)

Ea​=O(h2)(2.11)

E

t

E_t

Et​为近似的局部截断误差。

泰勒级数给出了一种量化欧拉方程误差的方法。不过,这种方法使用时存在局限: (1)泰勒级数仅能估计局部截断误差一即方法在一步迭代中所产生的误差。它不能估量传播截断误差,因此也不能估量全局截断误差。 (2)实际问题中处理的函数一般比简单多项式复杂。因此,计算泰勃级数展开时,导数值有时很难得到。

尽管这些限制使泰勒级数无法分析人多数实际问题的精确误差,但是它仍然有助于了解欧拉方法的性态。按照式(2.11)可发现局部误差与步长的平方和微分方程的一阶导数成正比。此外已经证明,全局截断误差为O(h),全局截断误差与步长成正比(Carnahan等人,1969)。

结论: (1)缩短步长可以减少误差。 (2)因为直线的二阶导数为常数,所以如果基本函数(即微分方程的解)是线性的,那么方法能给出无误差的预测值。

由于欧拉方法使用直线段来逼近解,因此,欧拉方法称为一阶方法(first-order method)。 思考:如果使用二次来逼近解,也就是二阶方法,就能给出基本函数(即微分方程的解)是二次的问题的精确。同理,如果基本函数是n次多项式,则使用n阶方法可得出精确解。

2.1.3 欧拉方法的改进思路1——添加高阶项

减小欧拉方法的误差的一种方法是,在公式中加入泰勒级数展开的高阶项。例如,添加二阶项后,得到:

y

i

+

1

=

y

i

+

f

(

x

i

,

y

i

)

h

+

f

(

x

i

,

y

i

)

2

!

h

2

y_{i+1}=y_i+ f(x_i, y_i)*h+\frac{ f'(x_i, y_i)}{2!}*h^2

yi+1​=yi​+f(xi​,yi​)∗h+2!f′(xi​,yi​)​∗h2(2.12) 于是局部截断误差变为:

E

a

=

f

(

x

i

,

y

i

)

3

!

h

3

E_a = \frac{ f''(x_i, y_i)}{3!}*h^3

Ea​=3!f′′(xi​,yi​)​∗h3(2.13)

尽管添加高阶项对于处理多项式来说十分简单,不过有时候会使常微分方程变得更加复杂。特别地,如果常微分方程同时为自变量和因变量的函数,就需要通过链式法则来计算微分。例如,f(x,y)的一阶导数是:

f

(

x

,

y

)

=

f

(

x

i

,

y

i

)

x

+

f

(

x

i

,

y

i

)

y

d

y

d

x

f'(x,y) = \frac{ \partial{f(x_i, y_i)}}{\partial{x}} + \frac{ \partial{f(x_i, y_i)}}{\partial{y}}\frac{dy}{dx}

f′(x,y)=∂x∂f(xi​,yi​)​+∂y∂f(xi​,yi​)​dxdy​ 二阶导数是:

f

(

x

,

y

)

=

[

f

/

x

+

(

f

/

y

)

(

d

y

/

d

x

)

]

x

+

[

f

/

x

+

(

f

/

y

)

(

d

y

/

d

x

)

]

y

d

y

d

x

f''(x,y) = \frac{ \partial[\partial{f}/\partial{x} + (\partial{f}/\partial{y})(dy/dx) ]}{\partial{x}} + \frac{ \partial[\partial{f}/\partial{x} + (\partial{f}/\partial{y})(dy/dx) ]}{\partial{y}}\frac{dy}{dx}

f′′(x,y)=∂x∂[∂f/∂x+(∂f/∂y)(dy/dx)]​+∂y∂[∂f/∂x+(∂f/∂y)(dy/dx)]​dxdy​

高阶导数会变得越来越复杂。而综合其计算量,其在性能上其实与一阶泰勒级数方法差不多,而一阶泰勒展开的欧拉方法只需要计算一阶导数,实现起来会简洁很多。因此,添加高阶项的方法其实并不是很实用。

2.1.4 欧拉方法的改进思路2——对斜率采用更好的估值方法

在“注意1”中我们提到,欧拉方法是将区间左端点处的斜率当作斜率在整个区间上平均值的逼近。但估值毕竟是估值,不是精确值,所以这个估值的精确度会严重影响计算的结果。 于是我们思考,有没有什么其他估计斜率的其他方法,能够给出更好的估值,从而得到更精确的预测值。 基于这个想法,下面给出了两种简单的修正方法来克服这个估值不精确的问题:修恩法和中点方法。 (这两种方法其实都属于一个更广泛的类型—龙格一库塔法。)

2.1.4.1 修恩法

改进斜率估计值的一种方法是,在区间上计算两个导数值:一个在区间的起始点处,一个在区间的终点处。然后,将这两个导数的平均值作为斜率在整个区间上的改进估计值。这种方法,称为修恩法(Heun’s method),其示意图如下图所示。 图5 修恩法的示意图:(a)预估和(b)校正

前面介绍过,在欧拉方法中,区间起始点处的斜率为:

y

i

=

f

(

x

i

,

y

i

)

y_i' = f(x_i, y_i)

yi′​=f(xi​,yi​) (2.15) 利用这个值线性外推出

y

i

+

1

y_{i+1}

yi+1​:

y

i

+

1

0

=

y

i

+

f

(

x

i

,

y

i

)

h

y^0_{i+1} = y_i + f(x_i, y_i)h

yi+10​=yi​+f(xi​,yi​)h (2.16) 标准的欧拉方法算到这一步就停止了。然而,在修恩法中,由式(2.16)得出的

y

i

+

1

0

y^0_{i+1}

yi+10​并不是最终结果,而是一个中间的预测值。式(2.16)称为预估表达式(predictor equation)。该式给出了

y

i

+

1

y_{i+1}

yi+1​的一个估计值,利用这个估计值又可以计算区间终点处的斜率(形式如式(2.15)):

y

i

+

1

=

f

(

x

i

+

1

,

y

i

+

1

0

)

y_{i+1}' = f(x_{i+1}, y^0_{i+1})

yi+1′​=f(xi+1​,yi+10​) (2.17) 我们得到两个斜率估计值

y

i

y_{i}'

yi′​和

y

i

+

1

y_{i+1}'

yi+1′​(式(2.15)和式(2.17)),于是可以计算斜率的区间平均值:

y

i

ˉ

=

y

i

+

y

i

+

1

2

=

f

(

x

i

,

y

i

)

+

f

(

x

i

+

1

,

y

i

+

1

0

)

2

\bar{y_i}' = \frac{y_i' + y_{i+1}'}{2} = \frac{ f(x_i, y_i) + f(x_{i+1}, y^0_{i+1})}{2}

yi​ˉ​′=2yi′​+yi+1′​​=2f(xi​,yi​)+f(xi+1​,yi+10​)​ (2.18)

然后,按照欧拉方法,利用这个平均斜率由

y

i

y_i

yi​线性外推出

y

i

+

1

y_{i+1}

yi+1​:

y

i

+

1

=

y

i

+

f

(

x

i

,

y

i

)

+

f

(

x

i

+

1

,

y

i

+

1

0

)

2

h

y_{i+1} = y_i + \frac{ f(x_i, y_i) + f(x_{i+1}, y^0_{i+1})}{2} h

yi+1​=yi​+2f(xi​,yi​)+f(xi+1​,yi+10​)​h (2.19) 此式称为校正表达式((corrector equation)。 修恩法是一种预估一校正方法{predictor-corrector approach)。

修恩法可简洁地表示为: 预估:

y

i

+

1

0

=

y

i

+

f

(

x

i

,

y

i

)

h

y^0_{i+1} = y_i + f(x_i, y_i)h

yi+10​=yi​+f(xi​,yi​)h (2.16) 校正:

y

i

+

1

=

y

i

+

f

(

x

i

,

y

i

)

+

f

(

x

i

+

1

,

y

i

+

1

0

)

2

h

y_{i+1} = y_i + \frac{ f(x_i, y_i) + f(x_{i+1}, y^0_{i+1})}{2} h

yi+1​=yi​+2f(xi​,yi​)+f(xi+1​,yi+10​)​h (2.19)

迭代修恩法: 因为式(2.19)的等号两边都含有

y

i

+

1

y_{i+1}

yi+1​,所以该式可以按迭代方式计算,可以反复使用旧的估计值计算出改进后的

y

i

+

1

y_{i+1}

yi+1​值。// 需要注意的是,这个迭代过程并不一定能收敛到真实解,不过它将收敛到一个截断误差有限的估计值。

校正过程收敛的终止条件为:

ε

a

=

y

i

+

1

j

y

i

+

1

j

1

y

i

+

1

j

100

%

|\varepsilon_a| = |\frac{y^j_{i+1} - y^{j-1}_{i+1}}{y^j_{i+1}}|100\%

∣εa​∣=∣yi+1j​yi+1j​−yi+1j−1​​∣100% 其中,

y

i

+

1

j

1

y^{j-1}_{i+1}

yi+1j−1​和

y

i

+

1

j

y^j_{i+1}

yi+1j​分别为上一校正步的结果和当前校正步的结果。

// 前面没有迭代校正的修恩法,可称为简单修恩法;经过迭代计算校正的修恩法,可以称为迭代修恩法。

特殊情况: 在前面的例子中,导数

d

y

/

d

x

dy/dx

dy/dx同时为因变量y和自变量x的函数(

d

y

/

d

x

=

f

(

x

,

y

)

dy/dx = f(x,y)

dy/dx=f(x,y))。对于常微分方程仅与自变量有关的情况(

d

y

/

d

x

=

f

(

x

)

dy/dx = f(x)

dy/dx=f(x)),求解过程中并不需要预估步(式(2.16)),而且每次迭代中也只需一次校正。在这种情况下,方法简化为

y

i

+

1

=

y

i

+

f

(

x

i

)

+

f

(

x

i

+

1

)

2

h

y_{i+1} = y_i + \frac{ f(x_i) + f(x_{i+1})}{2} h

yi+1​=yi​+2f(xi​)+f(xi+1​)​h (2.19)

该式与“数值积分方法的总结”第1.1.1节 梯形法则(2点积分)其实是等价的。相应的截断误差也与梯形法则一样为:

E

t

=

f

(

ξ

)

12

h

3

E_t = - \frac{f''(\xi)}{12}h^3

Et​=−12f′′(ξ)​h3

由于真解是二次多项式时,常微分方程的二阶导数为0,所以方法是二阶精度的。另外,局部和全局误差分别为

O

(

h

3

)

O(h^3)

O(h3)和

O

(

h

2

)

O(h^2)

O(h2),因此,减小步长时,误差减小的速度比欧拉方法快。

2.1.4.2 中点方法

图5和式(2.16)(

y

i

+

1

0

=

y

i

+

f

(

x

i

,

y

i

)

h

y^0_{i+1} = y_i + f(x_i, y_i)h

yi+10​=yi​+f(xi​,yi​)h )使用了端点处的值

y

i

+

1

y_{i+1}

yi+1​ 来修正斜率的。

那么是不是也可以考虑用中点处的值来修正斜率??

于是产生了另一种简单的欧拉方法的修正方法(如图6所示)。该方法称为中点方法(midpoint method)(或改进的多边形法(improved polygon),或修正的欧拉方法(modified Euler)),利用欧拉方法预测区间中点处的y值(图6(a)):

y

i

+

1

/

2

=

y

i

+

f

(

x

i

,

y

i

)

h

/

2

y_{i+1/2} = y_i + f(x_i, y_i)h/2

yi+1/2​=yi​+f(xi​,yi​)h/2 (2.20) 然后用这个值来计算中点处的斜率:

y

i

+

1

/

2

=

f

(

x

i

+

1

/

2

,

y

i

+

1

/

2

)

y_{i+1/2}' = f(x_{i+1/2}, y_{i+1/2})

yi+1/2′​=f(xi+1/2​,yi+1/2​) (2.21) 假设这个值是对整个区间的斜率平均值的有效近似,那么由

x

i

x_i

xi​线性外推出

x

i

+

1

x_{i+1}

xi+1​处的值为:

y

i

+

1

=

y

i

+

f

(

x

i

+

1

/

2

,

y

i

+

1

/

2

)

h

y_{i+1} = y_i + f(x_{i+1/2}, y_{i+1/2}) h

yi+1​=yi​+f(xi+1/2​,yi+1/2​)h (2.22)

// 注意对比式(2.20)、(2.20)、(2.20)与 (2.16)、 (2.17)、 (2.19),就可以清晰地看出中点法和修恩法的区别。

图6 中点公式的示意图。(a)式(2.20)}和(b)式(2.22)

因为式(2.22)只有等式的一边含

y

i

+

1

y_{i+1}

yi+1​,所以这种方法的结果无法像修恩法一样采用迭代校正的办法来改进。

(本方法也可同牛顿一柯特斯开型公式的中点公式结合起来理解。)

因为中点方法利用区间中点处的斜率估计值,它理论上比端点(起点)处的斜率估计值要更好(//关于数值微分的讨论知,中心有限差分逼近导数的效果比前向或后向差分都要好),所以中点方法优于欧拉方法。中点方法的局部和全局误差分别为

O

(

h

3

)

O(h^3)

O(h3)和

O

(

h

2

)

O(h^2)

O(h2)。

2.1.5 欧拉方法的改进思路3

思考:上一节提到的中点法,就类似计算积分的时候,取中点计算估值(1点积分);修恩法,就类似于梯形法计算积分(2点积分)。回想在“数值积分方法的总结”积分计算中,除了梯形法则(2点积分),我们还讲到了3点积分和4点积分,区别就在于用二次曲线和三次曲线来逼近使积分结果更加接近真实值。那么,这个地方,如果我们能计算或者估算出三个点或者四个点,是否也能用类似的方法,使求解的结果更接近真实值?

2.2 龙格-库塔法

龙格一库塔法(Range-Kutta)(RK)无需计算高阶导数,也可以达到与泰勒级数方法同样的精度。龙格一库塔法存在许多不同版本,但它们都可以写成式(25.1)的一般形式

y

i

+

1

=

y

i

+

ϕ

(

x

i

,

y

i

,

h

)

h

y_{i+1} = y_i + \phi(x_i, y_i, h)h

yi+1​=yi​+ϕ(xi​,yi​,h)h (2.23) 其中,

ϕ

(

x

i

,

y

i

,

h

)

\phi(x_i, y_i, h)

ϕ(xi​,yi​,h)称为增量函数((increment function),它表示整个区间上的斜率。增量函数的一般形式是 k1出现在k2的表达式中,k2又出现在k3的表达式中,等等。因为每个k都是由函数赋值的,所以这种 递归关系提高了龙格-库塔法的计算效率。

将增量函数的项数记为n,n值的不同就对应着不同类型的龙格一库塔法。n=1时,一阶龙格-库塔法,实际上就是欧拉方法。

2.2.1 二阶龙格-库塔法

前面提到,欧拉方法其实是利用了泰勒的一阶展开。那么,如果对应泰勒二阶展开,就是

y

i

+

1

=

y

i

+

f

(

x

i

,

y

i

)

h

+

f

(

x

i

,

y

i

)

2

!

h

2

y_{i+1}=y_i+f(x_i,y_i)*h+\frac{f'(x_i,y_i)}{2!}*h^2

yi+1​=yi​+f(xi​,yi​)∗h+2!f′(xi​,yi​)​∗h2(2.24) 通过链式微分法则计算

f

(

x

,

y

)

f'(x,y)

f′(x,y)

f

(

x

i

,

y

i

)

=

f

(

x

i

,

y

i

)

x

+

f

(

x

i

,

y

i

)

y

d

y

d

x

f'(x_i,y_i) = \frac{ \partial{f(x_i, y_i)}}{\partial{x}} + \frac{ \partial{f(x_i, y_i)}}{\partial{y}}\frac{dy}{dx}

f′(xi​,yi​)=∂x∂f(xi​,yi​)​+∂y∂f(xi​,yi​)​dxdy​(2.25) 将式(2.25)代入式(2.24)有

y

i

+

1

=

y

i

+

f

(

x

i

,

y

i

)

h

+

[

f

(

x

i

,

y

i

)

x

+

f

(

x

i

,

y

i

)

y

d

y

d

x

]

h

2

2

!

y_{i+1}=y_i+f(x_i,y_i)*h+[\frac{ \partial{f(x_i, y_i)}}{\partial{x}} + \frac{ \partial{f(x_i, y_i)}}{\partial{y}}\frac{dy}{dx}]*\frac{h^2}{2!}

yi+1​=yi​+f(xi​,yi​)∗h+[∂x∂f(xi​,yi​)​+∂y∂f(xi​,yi​)​dxdy​]∗2!h2​(2.26)

而龙格-库塔法中,当k取2时,即为二阶龙格-库塔法:

y

i

+

1

=

y

i

+

(

a

1

k

1

+

a

2

k

2

)

h

y_{i+1}=y_i + (a_1k_1 + a_2k_2)*h

yi+1​=yi​+(a1​k1​+a2​k2​)∗h(2.27)

k

1

=

f

(

x

i

,

y

i

)

k_1=f(x_i,y_i)

k1​=f(xi​,yi​)(2.27a)

k

2

=

f

(

x

i

+

p

1

h

,

y

i

+

q

11

k

1

h

)

k_2=f(x_i + p_1h, y_i + q_{11}k_1h)

k2​=f(xi​+p1​h,yi​+q11​k1​h)(2.27b) 这个地方,

k

2

k_2

k2​写成了

f

(

x

i

+

p

1

h

,

y

i

+

q

11

k

1

h

)

f(x_i + p_1h, y_i + q_{11}k_1h)

f(xi​+p1​h,yi​+q11​k1​h)的形式,这很自然联想到也可以用泰勒展开表达该式,于是得到: 将k1、k2都带入式2.27中得到: 想要让二阶龙格-库塔法(即式2.27)等价于二阶泰勒展开(2.26),那么就必须满足:

a

1

+

a

2

=

1

a_1+a_2 = 1

a1​+a2​=1

a

1

p

1

=

1

/

2

a_1p_1=1/2

a1​p1​=1/2

a

2

q

11

=

1

/

2

a_2q_{11}=1/2

a2​q11​=1/2

由于有三个方程,四个未知数,所以上述方程组有无穷多个解。

其中,几种典型的解的意义: 如果令a2 = 1/2,那么a1=1/2,p1=q11=1,这时其实就是单步的修恩法; 如果令a2 = 1,那么a1=0,p1=q11=1/2,这时其实就是中点方法。 如果令a2 = 2/3,那么a1=1/3,p1=q11=3/4,这种方法叫罗森方法。

值得注意的是:罗森和Rabinowitz指出,对于二阶龙格一库塔法,在所有取值中,当a2取2/3时对应的截断误差界最小。此时:

二阶龙格-库塔法局部和全局误差分别为

O

(

h

3

)

O(h^3)

O(h3)和

O

(

h

2

)

O(h^2)

O(h2)。

2.2.2 三阶龙格-库塔法

对于n=3的情况,公式的推导过程与二阶方法类似。推导的结果是含8个未知数的6个方程。因此,必须事先指定两个未知数的值,才能确定剩下的参数。一类常用的三阶龙格-库塔法是:

y

i

+

1

=

y

i

+

1

6

(

k

1

+

4

k

2

+

k

3

)

h

y_{i+1}=y_i + \frac{1}{6} (k_1 + 4k_2 + k_3)*h

yi+1​=yi​+61​(k1​+4k2​+k3​)∗h(2.28)

如果导数仅为x的函数,那么这个三阶方法退化为辛普森1/3法则。

三阶龙格一库塔法,其局部和全局误差分别为

O

(

h

4

)

O(h^4)

O(h4)和

O

(

h

3

)

O(h^3)

O(h3)。并且能精确地求出三次多项式解。

2.2.2+ 牛顿积分公式

这个地方,有必要将牛顿-科特斯积分公式的系数拿出来和龙格-库塔法的系数做一下对比:

2.2.3 四阶龙格-库塔法

龙格-库塔法中,最流行的是四阶方法。与二阶方法一样,四阶方法也有无限多个版木。下面是最常用到的形式,称为经典四阶龙格-库塔法(classical fourth-order RK method):

y

i

+

1

=

y

i

+

1

6

(

k

1

+

2

k

2

+

2

k

3

+

k

4

)

h

y_{i+1}=y_i + \frac{1}{6} (k_1 + 2k_2 + 2k_3 + k_4)*h

yi+1​=yi​+61​(k1​+2k2​+2k3​+k4​)∗h(2.29) 其中, 四阶龙格一库塔法,其局部和全局误差分别为

O

(

h

5

)

O(h^5)

O(h5)和

O

(

h

4

)

O(h^4)

O(h4)。并且能精确地求出四次多项式解。

注意:对于前面的二阶、三阶龙格一库塔法,其系数都与牛顿-科特斯积分公式的系数相同。但是对于牛顿积分公式,对应的辛普森3/8法则的系数为1/8、3/8、3/8、1/8,而这个地方为1/6、2/6、2/6、1/6,读者可以下去自己尝试一下如果四阶龙格-库塔法系数用1/8、3/8、3/8、1/8,计算会不会有什么不同??

2.2.4 高阶龙格-库塔法

对于精度要求更高的情况,建议使用巴特切五阶龙格-库塔法。

y

i

+

1

=

y

i

+

1

90

(

7

k

1

+

32

k

3

+

12

k

4

+

32

k

5

+

7

k

6

)

h

y_{i+1}=y_i + \frac{1}{90} (7k_1 + 32k_3 + 12k_4 + 32k_5+ 7k_6)*h

yi+1​=yi​+901​(7k1​+32k3​+12k4​+32k5​+7k6​)∗h(2.30) 其中, 请注意,巴特切五阶方法中需要计算6次函数值。

尽管存在许多高阶龙格-库塔法,但是,一般地,对于四阶以上公式来说,精度的提高会被计算量和复杂度的增加而抵消。

2.2.5 龙格-库塔法分析

从上面的一到五阶龙格-库塔法公式可以看出,当阶数<=4时,需要计算函数值的次数等于方法的阶数。当n为5或者大于5的时候,计算函数值的次数或大于方法的阶数。所以,四阶龙格-库塔法是一个比较经典的阶数。

如果分别利用欧拉方法、非迭代修恩法、三阶龙格-库塔法、经典四阶龙格-库塔法和巴特切五阶龙格一库塔法进行计算。各方法的百分比相对误差的绝对值与计算开销的关系如图25-16所示。这里,计算开销等于求解过程中需要计算的函数值的个数,即

开销

=

n

f

b

a

h

开销 = n_f \frac{b-a}{h}

开销=nf​hb−a​(2.31) 其中,

n

f

n_f

nf​为特定的龙格一库塔法中需计算的函数值个数。(b - a)/h为整个积分区间长度除以步长,也就是说,它表示计算过程中需要应用龙格-库塔方法的次数。这样,因为函数值计算一般占去了单步迭代中的大部分时间,所以式2.31给出了计算时间的一个粗略估计。

从上面的分析中,可以得出一些结论:首先,在同样的计算开销下,高阶方法的结果更精确;其次,在某点之后,随着计算开销的增加,精度的提高开始变慢(注意曲线起初下降得很快,然后趋于平缓)。在应用中应该优先选择高阶龙格一库塔法。//不过,在选择求解方法时,还有许多其他因素需要考虑,比如编程的代价和问题的精度要求。

3 一阶常微分方程组

在本文第1.1节中讲到,高阶微分方程可以分解成多个一阶方程组的形式。

许多实际问题往往也需要求解几个联立的常微分方程组成的方程组。

方程组的一般表示形式为:

d

y

1

d

x

=

f

(

x

,

y

1

,

y

2

,

.

.

.

,

y

n

)

\frac{dy_1}{dx} = f(x, y_1, y_2, ..., y_n)

dxdy1​​=f(x,y1​,y2​,...,yn​)

d

y

2

d

x

=

f

(

x

,

y

1

,

y

2

,

.

.

.

,

y

n

)

\frac{dy_2}{dx} = f(x, y_1, y_2, ..., y_n)

dxdy2​​=f(x,y1​,y2​,...,yn​) …

d

y

n

d

x

=

f

(

x

,

y

1

,

y

2

,

.

.

.

,

y

n

)

\frac{dy_n}{dx} = f(x, y_1, y_2, ..., y_n)

dxdyn​​=f(x,y1​,y2​,...,yn​)(3.1)

要求解这样的一个方程组,必须知道x的起始点处的n个初始条件。

3.1 欧拉方法

上一节中所讲的关于单个方程数值解法的讨论,都可以推广到上面给出的方程组。

每个方程组的求解过程为,在开始下一步迭代之前,对当前步中的每个方程应用单步法求解。 重复上述过程,直到x=2。

3.2 龙格-库塔法

上一节中所讲的任何高阶龙格-库塔法都可以应用于方程组的求解。// 方法与欧拉法类似。

4 自适应龙格·库塔法

到目前为止,我们讨论了步长取常数的常微分方程数值解法。

但实际中,方程的曲线在有的地方变化缓慢,有的地方变化剧烈。在变化缓慢的地方可以用大一点的步长,在变化剧烈的地方可以取小一点的步长。于是就有了自动调整步长的算法。

自动调整步长的算法可以避免保证计算精度的同时提高效率。

自适应步长控制((adaptive step-sixe control)的方法在执行过程中需要估计每一步的局部截断误差。然后,根据该误差估计值确定步长应该变大还是缩小。

4.1 步长控制中的误差估计方法

在单步法中加入自适应步长控制主要有两种方式: 第一种方式是,计算同阶龙格-库塔法在两个不同步长F的预测值,将这两个值之差作为误差的估计值; 第二种方式是,算出两个不同阶龙格-库塔法的预测值,将它们的差作为局部截断误差的估计值。

4.1.1 自适应龙格-库塔法或步长——对分法

步长控制的第一种方式,就是先用步长h计算一个

y

h

y_h

yh​,然后再用步长为h/2分两步计算

y

h

y_h

yh​,比较这两个计算结果的差值,将这个差值作为局部截断误差的估计值。 若记

y

1

y_1

y1​为单步预测值,

y

2

y_2

y2​为两个半步所得到的预侧值,则误差

Δ

\Delta

Δ可表示为:

Δ

=

y

2

y

1

\Delta = y_2-y_1

Δ=y2​−y1​(3.2)

这个

Δ

\Delta

Δ就可用于作为控制步长的标准。

此外,

Δ

\Delta

Δ还可以用于校正

y

2

y_2

y2​的预测值。譬如说,对于四阶龙格-库塔法,其估值原本具有四阶精度。如果用式(3.3)校正后,可达到五阶精度。// 具体原因,可以结合“龙贝格积分的递推思路”?

y

2

y

2

+

Δ

/

15

y_2 \gets y_2 + \Delta / 15

y2​←y2​+Δ/15(3.3)

4.1.2 龙格-库塔-费尔贝格法

步长控制的第二种方式,先用四阶龙格-库塔法计算一个预测值

y

1

y_1

y1​,再用五阶龙格-库塔法计算一个预测值

y

2

y_2

y2​,(当然,也可以考虑用一个二阶+一个三阶;也或者用一个二阶+一个四阶,都是可以的。)然后比较这两个计算结果的差值。

该方法的一个缺点是,计算开销增长过大。例如,若使用四阶和五阶格式作为预测步,则每步总共要计算10次函数值(四阶4次,五阶6次)。

有没有什么方法可以客服上述问题呢??

于是我们就思考,如何重复利用计算过的函数值。譬如说,如果在五阶龙格-库塔法中能使用所有四阶龙格-库塔法所计算的函数值,这样只需要计算6次函数值,就得到一个误差估计。

沿着这个思路,因为四阶和五阶的龙格-库塔法都有很多种不同的系数组合方式,如果使用下列的四阶和五阶公式:

y

i

+

1

=

y

i

+

(

37

378

k

1

+

250

621

k

3

+

125

594

k

4

+

512

1771

k

6

)

h

y_{i+1}=y_i + (\frac{37}{378}k_1 + \frac{250}{621}k_3 + \frac{125}{594}k_4 + \frac{512}{1771}k_6)*h

yi+1​=yi​+(37837​k1​+621250​k3​+594125​k4​+1771512​k6​)∗h(3.4)

y

i

+

1

=

y

i

+

(

2825

27648

k

1

+

18575

48384

k

3

+

13525

55296

k

4

+

277

14336

k

5

+

1

4

k

6

)

h

y_{i+1}=y_i + (\frac{2825}{27648}k_1 + \frac{18575}{48384}k_3 + \frac{13525}{55296}k_4 + \frac{277}{14336}k_5 + \frac{1}{4}k_6)*h

yi+1​=yi​+(276482825​k1​+4838418575​k3​+5529613525​k4​+14336277​k5​+41​k6​)∗h(3.5) 其中, 利用式(3.4)和式(3.5)计算2个预测值,然后用两个预测值之差作为误差的估计值。

4.1.3 其他改进思路

思考,在自适应龙格-库塔法或步长——对分法,因为一阶和二阶是从一个点到两个点来计算预测值,然后用两个预测值只差计算出误差估计值。然后误差估计值又可用于改进预测值,能提高一阶精度。

思路一:是不是也可以用二阶和四阶的两个预测值来计算估计值,然后用该估计值来改进预测值,会不会带来更好的效果??

思路二:因为之前提到过,五阶是不太划算的,因为五阶要计算六次函数值。那么是否可以考虑用三阶和四阶搭配来计算两次预测值?或者二阶和四阶搭配?能否在各种搭配中找出更高效的方法。

4.2 步长控制

上一节介绍了估计局部截断误差的方法,利用它可以调整步长。若误差很小,则增大步长;若误差很大,则减小步长。为此,Press等人提出了下面的标准:

h

n

e

w

=

h

p

r

e

s

e

n

t

Δ

n

e

w

Δ

p

r

e

s

e

n

t

α

h_{new} = h_{present}|\frac{\Delta_{new}}{\Delta_{present}}|^{\alpha}

hnew​=hpresent​∣Δpresent​Δnew​​∣α(3.6) 为啥

α

\alpha

α取0.2或0.25?因为四阶和五阶开4次方和开5次方正好是1/4和1/5?

式(3.6)中的关键参数是

Δ

n

e

w

\Delta_{new}

Δnew​,因为它可用于指定期望精度。

一种方法是,将

Δ

n

e

w

\Delta_{new}

Δnew​与一个相对误差水平联系起来。但是当解越过零点时,会产生一些问题。处理这种情况的一个更通用的方法是,将

Δ

n

e

w

\Delta_{new}

Δnew​定义为

Δ

n

e

w

=

ε

y

s

c

a

l

e

\Delta_{new} = \varepsilon y_{scale}

Δnew​=εyscale​ (3.7) 其中,

ε

\varepsilon

ε为整体容许水平。

y

s

c

a

l

e

y_{scale}

yscale​的选取将决定误差的尺度。其中常见

y

s

c

a

l

e

y_{scale}

yscale​采用下式:

y

s

c

a

l

e

=

y

+

h

d

y

d

x

y_{scale} = |y|+|h\frac{d_y}{d_x}|

yscale​=∣y∣+∣hdx​dy​​∣

图中的点表示由自适应步长例程得出的预测值

优惠劵

一只特立独行的蚂蚁

关注

关注

6

点赞

23

收藏

觉得还不错?

一键收藏

知道了

1

评论

常微分方程(ODE)求解方法总结

常微分方程,数值求解方法

复制链接

扫一扫

专栏目录

求解常微分方程的龙格库塔方法.pdf

05-29

《数值分析》中的求解常微分方程的龙格库塔方法和matlab中的ode23 及ode45 函数

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

seventonight的博客

05-20

3931

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

在工程分析的许多问题中,物理定律是用变量的导数表达的而不是变量本身来表示的,因此需要解决微分方程。

微分方程的解本质上涉及积分,有时可以用解析法得到。例如,最简单的微分方程是这种形式的

其中f(x)是x的函数,y(x)是必需解。假设f(x)可以积分,上式可以写成

其中C是任意常数。为了找到C的值,需要一些额外的信息,例如对应于特定的x值的y的初始值。

微分方程可以有许多不同的形式,在方程的右边经常涉及x和y的函数。因此,在描述不同的求解技巧之前,我们需要定义一些重要的微分

1 条评论

您还未登录,请先

登录

后发表或查看评论

常微分方程ODE和Neural Ordinary Differential Equations

子燕若水的博客

05-29

1103

用一个函数f表示。这个函数f的参数是θ t ,它可以是一个神经网络。这个公式可以看作是残差网络(ResNet)的连续化,因为残差网络的每一层都可以写成h t+1 = h t + f(h t , θ t ),如果把层数看作是时间,那么就可以用欧拉法近似求解这个ODE。这样就得到了一种新的深度神经网络模型,叫做神经微分方程(Neural ODE)¹²³。这个数学公式是一个常微分方程(ODE),它描述了一个。而在初等数学的代数方程裡,其解是常数值。微分方程的解是一個符合方程的。

常见的常微分方程的一般解法

weixin_45332791的博客

04-30

4万+

本文归纳常见的常微分方程的一般解法。

常微分方程,我们一般可以将其归纳为如下n类:

可分离变量的微分方程(一阶)

一阶其次(非齐次)线性微分方程(一阶)

伯努利方程(一阶)

二阶常系数微分方程(二阶)

高阶常系数微分方程(n阶)

欧拉方程(n阶)

1.可分离变量的微分方程(一阶)

这类微分方程可以变形成如下形式:

f(x)dx=g(y)dyf(x)dx=g(y)dyf(x)dx=g(y)dy

...

常微分方程的解法 (一): 常微分方程的离散化 :差商近似导数、数值积分方法、Taylor 多项式近似

冷月无声的博客

04-30

3万+

常微分方程的解法求解系列博文:

常微分方程的解法 (一): 常微分方程的离散化 :差商近似导数、数值积分方法、Taylor 多项式近似

常微分方程的解法 (二): 欧拉(Euler)方法

常微分方程的解法 (三): 龙格—库塔(Runge—Kutta)方法 、线性多步法

常微分方程的解法 (四): Matlab 解法

目录

1 常微分方程的离散化

数值解法

(i)用差商近似导...

常微分方程(Ordinary Differential Equation I)

WilenWu

05-02

9706

高等数学,微分方程,常微分方程,偏微分方程

常微分方程

ResumeProject的博客

08-29

2万+

微分方程与流体力学

高数中的微分方程

一阶线性常微分方程

对于一阶线性常微分方程,常用的方法是常数变易法:

对于方程:y’+p(x)y+q(x)=0,可知其通解:,然后将这个通解代回到原式中,即可求出C(x)的值。

二阶常系数齐次常微分方程

对于二阶常系数齐次常微分方程,常用方法是求出其特征方程的解

https://zhuanlan.zhihu.com/p/50451828

https://zhuanlan.zhihu.com/p/66222395

https://baike.baidu.com/item/

ODE 求解方法

mucai1的专栏

07-24

7523

本篇博客将对ODE求解方法的一些基本概念,方法做一个学习,总结

we want to solve the differential equations 

                                                               

Numerical methods for solving first-order IVPs often fal...

matlab求解常微分方程(组)---dsolve、ode系列函数详解(含例程)

热门推荐

假电工的真的博客

01-22

27万+

本文主要介绍matlab中求解常微分方程(组)的dsolve和ode系列函数,并通过例子加深读者的理解。

一、符号介绍

   D: 微分符号;D2表示二阶微分,D3表示三阶微分,以此类推。

二、函数功能介绍及例程

1、dsolve 函数

dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。

1)函数格式  

...

常微分方程(Ordinary differential equation)

panlan7的博客

05-19

1万+

在数学中,常微分方程(ODE)是一个微分方程,它包含有一个或多个自变量的函数以及这些函数的导数[1]。常微分方程中的“常”与偏微分方程中的“偏”相对,后者可能涉及多个独立变量[2]。

微分方程(Differential equations)

线性微分方程是由未知函数及其导数中的线性多项式定义的微分方程,即形式为转存失败重新上传取消(注:多项式是由变量(也称为不确定数)和系数组成的表达式,仅涉及变量的加,减,乘和非负整数指数运算)

...

常微分方程课后习题答案

06-25

学习常微分方程时,是一个过程,课后练习十分重要,提供常微分方程课后习题答案,东北师范大学微分方程研究室。供大家学习参考。。。。。。。。。

常微分方程的数值解法MATLAB程序_龙格库塔方法求解常微分方程数值解_Euler法求解常微分方程_改进的欧拉法求解常微分方程_

10-03

Euler 法求解常微分方 阿达姆斯预测校正方法求解常微分方程数值解改进的欧拉法求解常微分方程龙格库塔方法求解常微分方程数值解

C 代码 求解常微分方程组(ODE).rar

05-27

C实用代码

常微分方程.zip_存款年利率_常微分方程

07-15

你投资了100元在某个储蓄账户,存款年利率为 。令 表示 年后你的账户金额。假设该账户是连续计息,那么 满足以下常微分方程初值问题:

利用欧拉法或使用ode45求解该常微分方程初值问题,并画出10年内的 函数图像,和该常微分方程精确解比较

常微分方程李勇

03-16

理学 吉林大学 常微分方程是伴随着微积分的产生和发展而成长起来的一门历史悠久的学

科.从诞生之日起很快就显示出它在应用上的重要作用.特别是作为牛顿力学的

得力助手,在天体力学和其它力学领域显示出巨大的功能.牛顿通过解微分方程

证实了地球绕太阳的运动轨道是一个 椭圆.海王星的存在是天文学家先通过微

分方程的方法推算出来,然后才实际观测 到的.随着科 学技 术的发展和社会进

步,常微分方程的应用不断扩大和深入.时至今日,可以说常微分方程在所有自

然科学领域和众多的社会科学领域都 有着广泛的应用.在数学学科内部的许多

分支中,常微分方程是经常要用到的重要工具之一.常微分方程每一步进展都离

不开其它数学分支的支援;反过来,常 微分方程进一步发展的需要,又推动着其

它数学分支的发展.这一古老的学科,由于应用领域的不断扩大和新理论生长点

的不断涌现,它的发展至今仍充满着生机和活力.

matlab求解含时微分方程组-ode45龙格库塔方法.docx

10-31

matlab求解含时微分方程组-ode45龙格库塔方法.docx

pydens:PyDEns是使用神经网络求解常微分方程(ODE和PDE)的框架

05-25

聚吡咯PyDEns是使用神经网络求解常微分方程和偏微分方程(ODE和PDE)的框架。 使用PyDEns可以解决来自一个大族的PDE和ODE,包括,和PDE的参数族具有可训练系数的PDE。 该页面概述了PyDEns的主要功能。 为了获得深入...

Matlab_ODE_ode_matlab_presidentuju_code_常微分方程_

10-03

常微分方程用matlab语言编程求解,例子中有中文附录详细说明,是入门用Matlab求解数学问题的优秀案例

python常微分方程

最新发布

09-08

Python常微分方程求解可以使用SciPy库中的odeint函数。odeint函数可以用于求解一阶常微分方程组。在使用odeint函数之前,我们需要将一阶常微分方程组转化为标准形式dy/dx = f(x, y)。其中f(x, y)表示方程右侧的函数表达式。

首先,我们需要导入相应的库并定义需要求解的一阶常微分方程组。假设我们要求解的方程组为dy/dx = f(x, y),其中f(x, y)是x和y的函数。接下来,我们需要定义初始条件,即y(x0)=y0。

然后,我们可以使用SciPy库的odeint函数进行求解。odeint函数的输入参数包括常微分方程组的函数f,初始条件y0,以及一个x的数组作为求解的区间。

最后,我们可以得到方程组的数值解。这个数值解可以用于绘制方程组的函数图像或进行其他进一步的分析。

下面是一个使用odeint函数求解一阶常微分方程组的示例代码:

```python

import numpy as np

from scipy.integrate import odeint

def f(y, x):

# 定义常微分方程组的函数f(x, y)

return ...

y0 = ...

x = np.linspace(x0, x1, num_points) # 定义求解的区间和步长

y = odeint(f, y0, x) # 求解方程组

# 可进一步进行绘图等操作

```

以上是使用SciPy库进行常微分方程求解的一种方法。还可以使用其他的Python库,如SymPy等,来求解常微分方程。具体的方法可以根据具体情况选择适合的库和函数进行求解。1234

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

一只特立独行的蚂蚁

CSDN认证博客专家

CSDN认证企业博客

码龄7年

暂无认证

21

原创

3万+

周排名

24万+

总排名

19万+

访问

等级

1356

积分

622

粉丝

206

获赞

28

评论

1116

收藏

私信

关注

热门文章

曲线拟合——最小二乘拟合(附代码)

40797

数值积分方法的总结(从简单梯形积分到龙贝格积分、自适应积分、高斯积分等)

27371

三次Hermite插值

24049

多元函数的极值&牛顿迭代法

19630

最优化方法笔记3:约束最优化——线性规划(LP)问题

12341

分类专栏

数值分析算法

10篇

几何算法

4篇

计算几何

2篇

计算机图形学

3篇

编程相关知识

2篇

B样条曲线曲面

最新评论

几何算法——5.关于ACIS和Parasolid曲线曲面求交的调研以及求交框架设计(附代码)

q-solid:

Parasolid online document: http://www.q-solid.com/Parasolid_Docs/index.html

数值积分方法的总结(从简单梯形积分到龙贝格积分、自适应积分、高斯积分等)

rubbishmaker:

请问那个精度的极限那幅图是哪本书里的啊

几何算法——10.欧拉操作

一只特立独行的蚂蚁:

brep表达,定义的点,线,面。

几何算法——10.欧拉操作

weixin_44717825:

请教这里的点,边数,面数是怎么定义的?带孔的立方体也是6个面?不算孔的面?圆环和圆柱的点边面分别是怎么来的?求详细步骤;

LaTeX入门和常用数学符号表示(可供复制粘贴)

CSDN-Ada助手:

一定要坚持创作更多高质量博客哦, 小小红包, 以资鼓励,

更多创作活动请看:

如何入门编程: https://activity.csdn.net/creatActivity?id=10459?utm_source=csdn_ai_ada_redpacket

上传ChatGPT/计算机论文等资源,瓜分¥5000元现金: https://blog.csdn.net/VIP_Assistant/article/details/130196121?utm_source=csdn_ai_ada_redpacket

毕业季征文·未来可期: https://activity.csdn.net/creatActivity?id=10429?utm_source=csdn_ai_ada_redpacket

全部创作活动: https://mp.csdn.net/mp_blog/manage/creative?utm_source=csdn_ai_ada_redpacket

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

几何算法——6.曲线曲面求交的方法总结(国内外文献调研、思考和总结)

几何算法——5.关于ACIS和Parasolid曲线曲面求交的调研以及求交框架设计(附代码)

几何算法——10.欧拉操作

2023年3篇

2022年4篇

2020年11篇

2019年3篇

2018年1篇

目录

目录

分类专栏

数值分析算法

10篇

几何算法

4篇

计算几何

2篇

计算机图形学

3篇

编程相关知识

2篇

B样条曲线曲面

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

偏微分方程和常微分方程有什么不同? - 知乎

偏微分方程和常微分方程有什么不同? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册数学微积分偏微分方程和常微分方程有什么不同?它们在写法、意义、计算、本质上有什么不同,它们的主要应用方向有什么区别,为什么偏微分方程应用更广泛关注者141被浏览214,320关注问题​写回答​邀请回答​好问题 10​添加评论​分享​10 个回答默认排序知乎用户Tiexin Qin, 27-09-2022 本文旨在整理部分描述动态系统中几个经典的微分方程 (ODE & SDE & PDE & CDE),并对他们进

行比较。如有不当之处,欢迎指出。

1. Ordinary differential equation (ODE) [^1]\frac{d\mathbf{x}(t)}{dt}=f(\mathbf{x}(t)), \quad \mathbf{x} \in \mathbb{R}^d~\text{and}~\mathbf{x}(t_0)=\mathbf{x}_0 当函数 f 满足 locally Lipschitz continuous 时,方程存在唯一解 \mathbf{x}(t+dt)=\mathbf{x}(t)+dt\cdot f(\mathbf{x}(t)) [Picard–Lindelöf theorem]2. Stochastic differential equation (SDE) [^2]\frac{dx(t)}{dt}=f(x(t))+\sum_{\alpha=1}^ng_\alpha(x(t))\xi^\alpha(t) 这里 x\in X , 状态空间 X 设定为可微流形 (differentiable manifold), g_\alpha \in TX 为向量场 (vector field) 将Gaussian white noise \xi^\alpha 和动态系统联系起来。当状态空间 X 是线性空间时, g 便是固定的常数。可以看到,SDE与ODE的主要区别是第二项噪声项的引入,这样 $x(t)$的演化路径 (evolving paths) 就有了随机噪声的干扰。另一种常见的出现在概率论中的形式为:When X_t following X_t \sim p_t , dX_t^x=f(X_t,t) dt + \sigma(X_t,t) d W_t, ~x\sim p_{t=0} 这里的噪声项由 Wiener process W_t 以及 diffusion func \sigma 定义,这也是 Diffusion Model 最根本的模型(猜测)。Partial differential equations (PDEs)如果想将 X_t 表示为 continuous Markov process,continuous的好处是我们可得到任意时刻的 X_t 的分布, 则需要对 transition kernel p(x,t|y,s) 进行定义,这里 s \rightarrow t 是时间变化, y \rightarrow x 是状态变化,那么SDE方程的 唯一解可表示为PDE的形式: \partial_t p(x,t|y,s) = - \partial_x f(x,t)p_t(x) + \frac{1}{2} \mathrm{Tr}\hspace{1pt} [\partial_x^2 \sigma(x)\cdot p_t(x)] with initial state x=X^x_0 \sim p_0 . [Fokker-Planck equations]3. Controlled Differential Equations (CDE) [^3]Let \tau,T\in\mathbb{R} with \tau < T , and let v,w\in\mathbb{N} . Let X:[\tau, T]\rightarrow \mathbb{R}^v be a continuous function of bounded variation (e.g. X be Lipschitz). Let \zeta \in \mathbb{R}^w and f:\mathbb{R}^w \rightarrow \mathbb{R}^{w \times v} be continuous. Then we can define a continuous path z:[\tau, T] \rightarrow \mathbb{R}^w by z_\tau=\zeta and z_t = z_\tau + \int_\tau^t f(z_s) \mathrm{d}X_s \quad \text{for}~t\in [\tau, T] where the integral is a Riemann–Stieltjes integral. As f(z_s) \in \mathbb{R}^{w \times v} and X_s \in \mathbb{R}^v, the notation“ f(z_s) \mathrm{d}X_s” refers to matrix-vector multiplication. The subscript notation refers to function evaluation, for example as is common in stochastic calculus. This equation is controlled or driven by X. 这个定义引自[^4]. 当 f 满足 global continuous,CDE的解存在且唯一。 个人理解,CDE是通过将ODE/SDE对 t 的导数 dt 泛化为由函数 X 控制的形式,这相当于对时间刻度进行线性变换,而不是朴素地令 X=t 。通过这种形式,CDE可以建模更复杂的动态环境。ComparisonNameOrdinary differential equation (ODE)Stochastic differential equation (SDE)Controlled Differential Equation (CDE)Formula$\frac{dx(t)}{dt}=f(x(t))$$\frac{dx(t)}{dt}=f(x(t))+\sum_{\alpha=1}^ng_\alpha(x(t))\xi^\alpha(t)$$z_t = z_\tau + \int_\tau^t f(z_s) \mathrm{d}X_s$Senariossmooth path modelstochastic generationirregular time series==========================================================Lipschitz continuousGiven two metric spaces (X, d_X) and (Y, d_Y) a function f:X \rightarrow Y is called Lipschitz continuous if there exists a real constant K \geq 0 such that, for all x_1 and x_2 in X, d_Y(f(x_1), f(x_2)) \leq K d_X(f(x_1), f(x_2)) When f is a real-value function f:\mathbb{R}\rightarrow\mathbb{R}, |f(x_1)-f(x_2)| \leq K |x_1 - x_2| This means $f$ is differentiable almost everywhere in domain U.Locally Lipschitz continuousIf for every x in X there exists a neighborhood U of x such that f restricted to U is Lipschitz continuous.这里针对每个点的邻居区间定义连续性,并不要求整体任意点的连续,所以对函数$f$连续性要求减弱。 \text{Lipschitz continuous} \subset \text{Locally Lipschitz continuous} Hölder continuousA function f defined on X is said to be Hölder continuous or to satisfy a Hölder condition of order \alpha > 0 on X if there exists a constant K \geq 0 such that d_Y(f(x_1), f(x_2)) \leq K d_X(f(x_1), f(x_2))^\alpha \text{Continuously differentiable} \subset \text{Lipschitz continuous} \subset \displaystyle\alpha-\text{Hölder continuous}~(0<\alpha\leq 1) 这里 \alpha 值越大,对连续性的约束就越强。连续性和所要使用的微分方程是一一对应的,针对具体数据的smooth情况,我们需要选择对应的微分方程来拟合数据。==========================================================Wiener process [^5]Let \xi_1,\xi_2,... be i.i.d. random variables with mean 0 and variance 1. For each n , define a continuous time stochastic process: W_n(t) = \frac{1}{\sqrt{n}} \sum_{1\leq k \leq \lfloor nt \rfloor} \xi_k, \quad t \in [0, 1] Properties:- W_0=0 - W has independent increments: for every t>0, the future increments W_{t+u}-W_t, u\geq 0, are independent of the past values W_s, s\leq t. - W has Gaussian increments: W_{t+u}-W_t is normally distributed with mean 0 and variance u, W_{t+u}-W_t \sim \mathcal{N}(0, u) - W has continuous paths: W_t is continuous in t.https://twitter.com/gabrielpeyre/status/968038241927614464?lang=zh-Hant[^1]: https://en.wikipedia.org/wiki/Ordinary_differential_equation [^2]: https://en.wikipedia.org/wiki/Stochastic_differential_equation[^3]: https://personal.math.ubc.ca/~loew/m403/ode-intro.pdf [^4]: Patrick Kidger, James Morrill, James Foster, Terry Lyons. Neural Controlled Differential Equations for Irregular Time Series. NeurIPS 2020.[^5]: https://en.wikipedia.org/wiki/Wiener_process发布于 2022-09-29 20:51​赞同 25​​1 条评论​分享​收藏​喜欢收起​若漂活得就剩下三点一线了​ 关注首先什么是方程?方程:含有未知量的等式。我们遇到过哪些方程了?例如有代数方程、函数方程、微分方程等等。我们从方程这个定义看,ODE与PDE无差别吧,都是含有未知量的等式。我们再看几个定义:微分方程:如果这个等式里是由自变量、未知函数及函数的导数(或微分)组成的,便是微分方程。ODE的定义:自变量只有一个的微分方程,便是常微分方程(ODE)。例子1: \frac{dy}{dx}=f(x,y) , f(x,y) 是已知函数。PDE的定义:自变量有多个的微分方程,便是偏微分方程(PDE)。例子2: u_{t}-a^{2}u_{xx}=0,a>0 为常数(热传导方程,抛物型方程的典型代表)所以从定义我们就知道了一个很大的不同,那就是ODE是属于一元微积分,而PDE是属于多元微积分。为了区别不同,我们还得把ODE和PDE各自的特点和内容都要总结一下(当然我这里只是简单说下,大家自行讨论和补充)。对于ODE:1)属于一元微积分,即自变量只有一个2)在方程解的方面:一般多解,有特解和通解之分。线性方程的解满足叠加原理。3)经典结论:解的存在唯一性定理\{_{y|_{x=x_{0}}=y_{0}}^{\frac{dy}{dx}=f(x,y)} 4)重视共性的研究:如果学过ODE,就知道这句话的意思,也就是常微分方程更多是介绍在ODE中通性的结论和定理。如解的存在唯一性,定性理论都是一般性的结论。对于PDE:1)多元微积分,自变量含有多个;2)研究集中在少数特殊类型的方程:\bullet 椭圆型方程 例:Laplace方程 \Delta u=0 (\Delta=\frac{\partial}{\partial x_{1}^{2}}+...+\frac{\partial}{\partial x_{n}^{2}}) \bullet 双曲型方程 例:波动方程 u_{tt}=\Delta u \bullet 抛物型线方程 例:热传导方程 u_{t}=\Delta u 3) 一般性结论少,个性(结论)突出。这是因为这些方程来源不同的物理背景 \Rightarrow 导致不同类型的方程 \Rightarrow 导致不同特性 \Rightarrow 导致不同的提法和解法。4) 在方程解的方面:它的解 通常是多解的,且线性方程的解同样也满足叠加原理。5)复杂性:因为是多元微积分,它远比ODE要复杂的多。通过这两者的对比多少因该有一些想法了吧。编辑于 2021-01-23 08:56​赞同 223​​5 条评论​分享​收藏​喜欢

ODE中文(简体)翻译:剑桥词典

ODE中文(简体)翻译:剑桥词典

词典

翻译

语法

同义词词典

+Plus

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录

/

注册

中文 (简体)

查找

查找

英语-中文(简体)

ode 在英语-中文(简体)词典中的翻译

odenoun [ C ] uk

Your browser doesn't support HTML5 audio

/əʊd/ us

Your browser doesn't support HTML5 audio

/oʊd/

Add to word list

Add to word list

a poem expressing the writer's thoughts and feelings about a particular person or subject, usually written to that person or subject

颂诗;颂歌

"Ode to a Nightingale" and "Ode on a Grecian Urn" are poems by Keats.

《夜莺颂》和《希腊古瓮颂》是济慈创作的诗篇。

(ode在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)

ode的例句

ode

This report is an ode to the free and undistorted competition that it holds up as an infallible remedy against the financial crisis.

来自 Europarl Parallel Corpus - English

That document is like a schoolboy ode.

来自 Hansard archive

该例句来自Hansard存档。包含以下议会许可信息开放议会许可v3.0

Although commonly categorized as an ode for its secular text, it was conceived as an oratorio.

来自 Cambridge English Corpus

It is in many ways similar to the ode and chant royal.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

It's an acoustic ode that's bittersweet, but at the same time positive.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

Towards the end of their first choral ode we see another actor coming up the pathway behind the orchestra.

来自 Cambridge English Corpus

This example confirms the conjecture underlying the design of cm ode ls: using satisfiability solvers to compute answer sets for tight programs may be computationally advantageous.

来自 Cambridge English Corpus

Categorising the poem is difficult, as it contains elements of all of the ode, the dramatic monologue and the conversation poem.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

示例中的观点不代表剑桥词典编辑、剑桥大学出版社和其许可证颁发者的观点。

C1

ode的翻译

中文(繁体)

頌詩, 頌歌…

查看更多内容

西班牙语

oda…

查看更多内容

葡萄牙语

ode…

查看更多内容

更多语言

法语

土耳其语

in Dutch

捷克语

丹麦语

印尼语

泰语

越南语

波兰语

in Swedish

马来语

德语

挪威语

in Ukrainian

ode…

查看更多内容

kaside, methiye…

查看更多内容

ode…

查看更多内容

óda…

查看更多内容

ode…

查看更多内容

puisi pujian…

查看更多内容

บทกวี…

查看更多内容

thơ ca ngợi…

查看更多内容

oda…

查看更多内容

ode…

查看更多内容

oda…

查看更多内容

die Ode…

查看更多内容

ode…

查看更多内容

ода…

查看更多内容

需要一个翻译器吗?

获得快速、免费的翻译!

翻译器工具

ode的发音是什么?

在英语词典中查看 ode 的释义

浏览

oddness

odds

odds and ends

odds-on

ode

Odia

Odin

odious

odium

“每日一词”

veggie burger

UK

Your browser doesn't support HTML5 audio

/ˈvedʒ.i ˌbɜː.ɡər/

US

Your browser doesn't support HTML5 audio

/ˈvedʒ.i ˌbɝː.ɡɚ/

a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape

关于这个

博客

Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)

March 06, 2024

查看更多

新词

stochastic parrot

March 04, 2024

查看更多

已添加至 list

回到页面顶端

内容

英语-中文(简体)例句翻译

©剑桥大学出版社与评估2024

学习

学习

学习

新词

帮助

纸质书出版

Word of the Year 2021

Word of the Year 2022

Word of the Year 2023

开发

开发

开发

词典API

双击查看

搜索Widgets

执照数据

关于

关于

关于

无障碍阅读

剑桥英语教学

剑桥大学出版社与评估

授权管理

Cookies与隐私保护

语料库

使用条款

京ICP备14002226号-2

©剑桥大学出版社与评估2024

剑桥词典+Plus

我的主页

+Plus 帮助

退出

词典

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

翻译

语法

同义词词典

Pronunciation

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录 /

注册

中文 (简体)  

Change

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

中文 (简体)

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

关注我们

选择一本词典

最近的词和建议

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

语法与同义词词典

对自然书面和口头英语用法的解释

英语语法

同义词词典

Pronunciation

British and American pronunciations with audio

English Pronunciation

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

词典+Plus

词汇表

选择语言

中文 (简体)  

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

内容

英语-中文(简体) 

 Noun

例句

Translations

语法

所有翻译

我的词汇表

把ode添加到下面的一个词汇表中,或者创建一个新词汇表。

更多词汇表

前往词汇表

对该例句有想法吗?

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

选择 ODE 求解器 - MATLAB & Simulink - MathWorks 中国

选择 ODE 求解器

- MATLAB & Simulink

- MathWorks 中国

Skip to content

Toggle Main Navigation

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

帮助中心帮助中心

搜索帮助中心

帮助中心

MathWorks

搜索 MathWorks

MathWorks

帮助中心

Close Mobile Search

Open Mobile Search

Off-Canvas Navigation Menu Toggle

文档主页

MATLAB

数学数值积分和微分方程常微分方程

选择 ODE 求解器

本页内容

常微分方程ODE 的类型ODE 方程组高阶 ODE复数 ODE基本求解器选择ODE 示例和文件摘要参考另请参阅相关主题外部网站

文档示例函数App视频问答

试用版

试用版

产品更新

产品更新

资源

文档示例函数App视频问答

Main Content

选择 ODE 求解器常微分方程常微分方程 (ODE) 包含与一个自变量 t(通常称为时间)相关的因变量 y 的一个或多个导数。此处用于表示 y 关于 t 的导数的表示法对于一阶导数为 y',对于二阶导数为 y'',依此类推。ODE 的阶数等于 y 在方程中出现的最高阶导数。例如,这是一个二阶 ODE:y''=9y在初始值问题中,从初始状态开始解算 ODE。利用初始条件 y0 以及要在其中求得答案的时间段 (t0,tf),以迭代方式获取解。在每一步,求解器都对之前各步的结果应用一个特定算法。在第一个这样的时间步,初始条件将提供继续积分所需的必要信息。最终结果是,ODE 求解器返回一个时间步向量 t=[t0,t1,t2,...,tf] 以及在每一步对应的解 y=[y0,y1,y2,...,yf]。ODE 的类型MATLAB® 中的 ODE 求解器可解算以下类型的一阶 ODE:y'=f(t,y) 形式的显式 ODE。M(t,y)y'=f(t,y) 形式的线性隐式 ODE,其中 M(t,y) 为非奇异质量矩阵。该质量矩阵可以是时间或状态依赖的矩阵,也可以是常量矩阵。线性隐式 ODE 涉及在质量矩阵中编码的一阶 y 导数的线性组合。线性隐式 ODE 可随时变换为显式形式 y'=M−1(t,y)f(t,y)。不过,将质量矩阵直接指定给 ODE 求解器可避免这种既不方便还可能带来大量计算开销的变换操作。如果 y' 的某些分量缺失,则这些方程称为微分代数方程或 DAE,并且 DAE 方程组会包含一些代数变量。代数变量是导数未出现在方程中的因变量。可通过对方程求导来将 DAE 方程组重写为等效的一阶 ODE 方程组,以消除代数变量。将 DAE 重写为 ODE 所需的求导次数称为微分指数。ode15s 和 ode23t 求解器可解算微分指数为 1 的 DAE。f(t,y,y')=0 形式的完全隐式 ODE。完全隐式 ODE 不能重写为显式形式,还可能包含一些代数变量。ode15i 求解器专为完全隐式问题(包括微分指数为 1 的 DAE)而设计。ODE 方程组您可以指定需要解算的任意数量的 ODE 耦合方程,原则上,方程的数量仅受计算机可用内存的限制。如果方程组包含 n 个方程,(y'1y'2⋮y'n)=(f1(t,y1,y2,...,yn)f2(t,y1,y2,...,yn)⋮fn(t,y1,y2,...,yn)),则用于编写该方程组代码的函数将返回一个向量,其中包含 n 个元素,对应于 y'1, y'2,  … , y'n 值。例如,考虑以下包含两个方程的方程组{y'1=y2y'2=y1 y2−2 .用于编写该方程组代码的函数为function dy = myODE(t,y)

dy(1) = y(2);

dy(2) = y(1)*y(2)-2;

end高阶 ODEMATLAB ODE 求解器仅可解算一阶方程。您必须使用常规代换法,将高阶 ODE 重写为等效的一阶方程组y1=yy2=y'y3=y''        ⋮yn=y(n−1).这些代换将生成一个包含 n 个一阶方程的方程组{y'1=y2y'2=y3          ⋮y'n=f(t,y1,y2,...,yn).例如,考虑三阶 ODEy'''−y''y+1=0.使用代换法y1=yy2=y'y3=y''生成等效的一阶方程组{y'1=y2y'2=y3y'3=y1 y3−1.此方程组的代码则为function dydt = f(t,y)

dydt(1) = y(2);

dydt(2) = y(3);

dydt(3) = y(1)*y(3)-1;

end复数 ODE考虑复数 ODE 方程y'=f(t,y) ,其中 y=y1+iy2。为解算该方程,需要将实部和虚部分解为不同的解分量,最后重新组合相应的结果。从概念上讲,这类似于yv=[Real(y)    Imag(y)]fv=[Real(f(t,y))    Imag(f(t,y))] .例如,如果 ODE 为 y'=yt+2i,则可以使用函数文件来表示该方程:function f = complexf(t,y)

f = y.*t + 2*i;

end然后,分解实部和虚部的代码为function fv = imaginaryODE(t,yv)

% Construct y from the real and imaginary components

y = yv(1) + i*yv(2);

% Evaluate the function

yp = complexf(t,y);

% Return real and imaginary in separate components

fv = [real(yp); imag(yp)];

end 在运行求解器以获取解时,初始条件 y0 也会分解为实部和虚部,以提供每个解分量的初始条件。y0 = 1+i;

yv0 = [real(y0); imag(y0)];

tspan = [0 2];

[t,yv] = ode45(@imaginaryODE, tspan, yv0);

获得解后,将实部和虚部分量组合到一起可获得最终结果。y = yv(:,1) + i*yv(:,2);基本求解器选择ode45 适用于大多数 ODE 问题,一般情况下应作为您的首选求解器。但对于精度要求更宽松或更严格的问题而言,ode23、ode78、ode89 和 ode113 可能比 ode45 更加高效。一些 ODE 问题具有较高的计算刚度或难度。术语“刚度”无法精确定义,但一般而言,当问题的某个位置存在标度差异时,就会出现刚度。例如,如果 ODE 包含的两个解分量在时间标度上差异极大,则该方程可能是刚性方程。如果非刚性求解器(例如 ode45)无法解算某个问题或解算速度极慢,则可以将该问题视为刚性问题。如果您观察到非刚性求解器的速度很慢,请尝试改用 ode15s 等刚性求解器。在使用刚性求解器时,可以通过提供雅可比矩阵或其稀疏模式来提高可靠性和效率。您可以使用 ode 对象根据问题的属性自动选择求解器。如果您不确定要使用哪个求解器,请参考下表,其中提供关于每个求解器的适用情形的一般指导。求解器问题类型精度何时使用ode45非刚性中大多数情况下,您应当首先尝试求解器 ode45。ode23低对于容差较宽松的问题或在刚度适中的情况下,ode23 可能比 ode45 更加高效。ode113低到高对于具有严格误差容限的问题或在 ODE 函数需要大量计算开销的情况下,ode113 可能比 ode45 更加高效。ode78高对于具有高准确度要求的平滑解的问题,ode78 可能比 ode45 更加高效。ode89高对于非常平滑的问题,当在较长的时间区间内进行积分时,或当容差特别严格时,ode89 可能比 ode78 更加高效。ode15s刚性低到中若 ode45 失败或效率低下并且您怀疑面临刚性问题,请尝试 ode15s。此外,当解算微分代数方程 (DAE) 时,请使用 ode15s。ode23s低对于误差容限较宽松的问题,ode23s 可能比 ode15s 更加高效。它可以解算一些刚性问题,而使用 ode15s 解算这些问题的效率不高。ode23s 会在每一步计算雅可比,因此通过 odeset 提供雅可比有利于最大限度地提高效率和精度。如果存在质量矩阵,则它必须为常量矩阵。ode23t低对于仅仅是刚度适中的问题,并且您需要没有数值阻尼的解,请使用 ode23t。 ode23t 可解算微分代数方程 (DAE)。ode23tb低与 ode23s 一样,对于误差容限较宽松的问题,ode23tb 求解器可能比 ode15s 更加高效。ode15i完全隐式低对于完全隐式问题 f(t,y,y’) = 0 和微分指数为 1 的微分代数方程 (DAE),请使用 ode15i。有关何时使用每种求解器的详细信息和更多建议,请参阅 [5]。ODE 示例和文件摘要有几个示例文件可用作大多数 ODE 问题的有用起点。要运行微分方程示例应用,以便轻松浏览和运行示例,请键入odeexamples要打开单独的示例文件进行编辑,请键入edit exampleFileName.m要运行示例,请键入exampleFileName此表包含可用的 ODE 和 DAE 示例文件及其使用的求解器和选项的列表。其中包含示例子集的链接,这些示例也已直接发布在文档中。示例文件使用的求解器指定的选项描述文档链接amp1daeode23t 'Mass' 刚性 DAE - 包含常量奇异质量矩阵的电路求解刚性晶体管微分代数方程ballodeode23 'Events''OutputFcn''OutputSel''Refine''InitialStep''MaxStep' 简单事件位置 - 弹球ODE 事件位置batonodeode45 'Mass' 时间依赖和状态依赖的质量矩阵的 ODE - 短棒的移动求解抛向空中的短棒的运动方程brussodeode15s 'JPattern''Vectorized' 刚性大问题 - 化学反应中的扩散 (Brusselator)解算刚性 ODEburgersodeode15s 'Mass''MStateDependence''JPattern''MvPattern''RelTol''AbsTol' 强烈依赖于状态的质量矩阵的 ODE - 使用移动网格方法解算伯格斯方程求解具有强状态依赖质量矩阵的 ODEfem1odeode15s 'Mass''MStateDependence''Jacobian' 时间依赖的质量矩阵的刚性问题 - 有限元方法—fem2odeode23s 'Mass' 常量质量矩阵的刚性问题 - 有限元方法—hb1odeode15s—在非常长的区间内解算的刚性 ODE 问题 - Robertson 化学反应—hb1daeode15s 'Mass''RelTol''AbsTol''Vectorized' 基于守恒定律的刚性线性隐式 DAE - Robertson 化学反应将 Robertson 问题作为半显式微分代数方程 (DAE) 求解ihb1daeode15i 'RelTol''AbsTol''Jacobian' 刚性完全隐式 DAE - Robertson 化学反应将 Robertson 问题作为隐式微分代数方程 (DAE) 求解iburgersodeode15i 'RelTol''AbsTol''Jacobian''JPattern' 隐式 ODE 方程组 - 伯格斯方程—kneeodeode15s 'NonNegative' 具有非负约束的“膝盖问题”非负 ODE 解orbitodeode45 'RelTol''AbsTol''Events''OutputFcn' 高级事件位置 - 限制性三体问题ODE 事件位置rigidodeode45—非刚性问题 - 刚体在不受外力作用时的欧拉方程求解非刚性 ODEvdpodeode15s 'Jacobian' 可参数化的 van der Pol 方程(对于较大 μ,为刚性问题)解算刚性 ODE参考[1] Shampine, L. F. and M. K. Gordon, Computer Solution of Ordinary Differential Equations: the Initial Value Problem, W. H. Freeman, San Francisco, 1975.[2] Forsythe, G., M. Malcolm, and C. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, New Jersey, 1977.[3] Kahaner, D., C. Moler, and S. Nash, Numerical Methods and Software, Prentice-Hall, New Jersey, 1989.[4] Shampine, L. F., Numerical Solution of Ordinary Differential Equations, Chapman & Hall, New York, 1994.[5] Shampine, L. F. and M. W. Reichelt, “The MATLAB ODE Suite,” SIAM Journal on Scientific Computing, Vol. 18, 1997, pp. 1–22.[6] Shampine, L. F., Gladwell, I. and S. Thompson, Solving ODEs with MATLAB, Cambridge University Press, Cambridge UK, 2003.

另请参阅ode | odeset | odextend

相关主题求解非刚性 ODE解算刚性 ODE解算微分代数方程 (DAE)

外部网站常微分方程

×

MATLAB 命令

您点击的链接对应于以下 MATLAB 命令:

请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。

关闭

×

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

Switzerland (English)

Switzerland (Deutsch)

Switzerland (Français)

中国 (简体中文)

中国 (English)

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

Americas

América Latina (Español)

Canada (English)

United States (English)

Europe

Belgium (English)

Denmark (English)

Deutschland (Deutsch)

España (Español)

Finland (English)

France (Français)

Ireland (English)

Italia (Italiano)

Luxembourg (English)

Netherlands (English)

Norway (English)

Österreich (Deutsch)

Portugal (English)

Sweden (English)

Switzerland

Deutsch

English

Français

United Kingdom (English)

Asia Pacific

Australia (English)

India (English)

New Zealand (English)

中国

简体中文

English

日本 (日本語)

한국 (한국어)

Contact your local office

试用版

试用版

产品更新

产品更新

中国

信任中心

商标

隐私权政策

防盗版

应用状态

京公网安备 11010502045942号   京ICP备12052471号

© 1994-2024 The MathWorks, Inc.

×

WeChat

关注我们

一阶线性ODE(First Order Linear Differential Equations) - 知乎

一阶线性ODE(First Order Linear Differential Equations) - 知乎首发于水土切换模式写文章登录/注册一阶线性ODE(First Order Linear Differential Equations)背诵着夜我看见天空很蓝一般形式(common form):a(x)y'+b(x)y=c(x)标准形式(standard form):y'+p(x)y=q(x)借助积分因子(intergrating factor)—— u(x)来求解方程 首先方程两边同时乘以 u(x),得到:u(x)y'+p(x)u(x)y=q(x)u(x)若能选取一个合适的 u(x) 使得 (u(x)y)'=u(x)y'+p(x)u(x)y,即 u(x) 得满足:u'(x)=p(x)u(x)分离变量 \frac{du}{dx}=p(x)u\Rightarrow\frac{1}{u}du=p(x)dx ,两边同时积分得到:lnu=\int_{}^{}p(x)dx (这里认为任意常数包含在不定积分里),再解出 u u(x)=e^{\int_{}^{}p(x)dx} 上式只是 u(x) 的一个解,我们也只想找一个满足条件的 u(x),所以这里没考虑任意常数,尽量让形式简洁。 接下来对 (u(x)y)'=q(x)u(x) 进行积分:u(x)y=\int_{}^{}q(x)u(x)dx+C\Rightarrow y=\frac{\int_{}^{}q(x)u(x)dx}{u(x)}+\frac{C}{u(x)} ,即:y=Ce^{-\int_{}^{}p(x)dx}+e^{-\int_{}^{}p(x)dx}\cdot\int_{}^{}q(x)e^{\int_{}^{}p(x)dx}dx 发布于 2020-06-10 21:00微分方程​赞同 10​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录水土云丰村三组

Ordinary Differential Equation -- from Wolfram MathWorld

Ordinary Differential Equation -- from Wolfram MathWorld

TOPICS

Algebra

Applied Mathematics

Calculus and Analysis

Discrete Mathematics

Foundations of Mathematics

Geometry

History and Terminology

Number Theory

Probability and Statistics

Recreational Mathematics

Topology

Alphabetical Index

New in MathWorld

Calculus and Analysis

Differential Equations

Ordinary Differential Equations

Ordinary Differential Equation

Download

Wolfram Notebook

An ordinary differential equation (frequently called an "ODE," "diff eq," or "diffy Q") is an equality involving a function and its derivatives. An ODE of order is an equation of the form

(1)

where

is a function of , is the first derivative

with respect to , and is the th derivative with respect to

.

Nonhomogeneous ordinary differential equations can be solved if the general solution to the homogenous version is known, in which case the undetermined

coefficients method or variation of parameters

can be used to find the particular solution.

Many ordinary differential equations can be solved exactly in the Wolfram Language using DSolve[eqn,

y, x], and numerically using NDSolve[eqn,

y, x,

xmin, xmax].

An ODE of order is said to be linear if it is of

the form

(2)

A linear ODE where is said to be homogeneous.

Confusingly, an ODE of the form

(3)

is also sometimes called "homogeneous."

In general, an th-order ODE has linearly independent solutions. Furthermore, any linear

combination of linearly independent

functions solutions is also a solution.

Simple theories exist for first-order (integrating factor) and second-order

(Sturm-Liouville theory) ordinary differential

equations, and arbitrary ODEs with linear constant coefficients

can be solved when they are of certain factorable forms. Integral transforms such

as the Laplace transform can also be used to

solve classes of linear ODEs. Morse and Feshbach (1953, pp. 667-674) give canonical

forms and solutions for second-order

ordinary differential equations.

While there are many general techniques for analytically solving classes of ODEs, the only practical solution technique for complicated equations is to use numerical

methods (Milne 1970, Jeffreys and Jeffreys 1988). The most popular of these is the

Runge-Kutta method, but many others have been

developed, including the collocation method

and Galerkin method. A vast amount of research

and huge numbers of publications have been devoted to the numerical solution of differential

equations, both ordinary and partial

(PDEs) as a result of their importance in fields as diverse as physics, engineering,

economics, and electronics.

The solutions to an ODE satisfy existence and uniqueness properties. These can be formally established by Picard's

existence theorem for certain classes of ODEs. Let a system of first-order

ODE be given by

(4)

for ,

...,

and let the functions , where , ..., , all be defined in a domain

of the -dimensional

space of the variables , ..., , . Let these functions be continuous in and have continuous first partial

derivatives for , ..., and , ..., in . Let be in . Then there exists a solution of (4) given

by

(5)

for

(where )

satisfying the initial conditions

(6)

Furthermore, the solution is unique, so that if

(7)

is a second solution of (◇) for satisfying (◇), then

for .

Because every th-order ODE can be expressed as a system of first-order

ODEs, this theorem also applies to the single th-order ODE.

An exact first-order

ordinary differential equation is one of the form

(8)

where

(9)

An equation of the form (◇) with

(10)

is said to be nonexact. If

(11)

in (◇), it has an -dependent integrating factor. If

(12)

in (◇), it has an -dependent integrating factor. If

(13)

in (◇), it has a -dependent integrating factor.

Other special first-order

types include cross multiple equations

(14)

homogeneous equations

(15)

linear equations

(16)

and separable equations

(17)

Special classes of second-order

ordinary differential equations include

(18)

(

missing) and

(19)

(

missing). A second-order linear homogeneous ODE

(20)

for which

(21)

can be transformed to one with constant coefficients.

The undamped equation of simple harmonic motion

is

(22)

which becomes

(23)

when damped, and

(24)

when both forced and damped.

Systems

with constant coefficients are of the form

(25)

The following are examples of important ordinary differential equations which commonly arise in problems of mathematical physics.

Abel's differential equation

(26)

(27)

Airy differential equation

(28)

Anger differential equation

(29)

Baer differential equations

(30)

(31)

Bernoulli differential equation

(32)

Bessel differential equation

(33)

Binomial differential equation

(34)

Bôcher equation

(35)

Briot-Bouquet equation

(36)

Chebyshev differential equation

(37)

Clairaut's differential equation

(38)

Confluent hypergeometric

differential equation

(39)

d'Alembert's equation

(40)

Duffing differential equation

(41)

Eckart differential equation

(42)

where .

Emden-Fowler differential equation

(43)

Euler differential equation

(44)

Halm's differential equation

(45)

Hermite differential equation

(46)

Heun's differential equation

(47)

where .

Hill's differential equation

(48)

Hypergeometric differential equation

(49)

Jacobi differential equation

(50)

Laguerre differential equation

(51)

Lamé's differential equation

(52)

where .

Lane-Emden differential equation

(53)

Legendre differential equation

(54)

Linear

constant coefficients

(55)

Lommel differential equation

(56)

Löwner's differential equation

(57)

Malmstén's differential equation

(58)

Mathieu differential equation

(59)

where .

Modified Bessel differential equation

(60)

Modified spherical Bessel

differential equation

(61)

where

Rayleigh differential equation

(62)

Riccati differential equation

(63)

Riemann P-Differential Equation

(64)

where .

Sharpe's differential equation

(65)

Spherical Bessel differential

equation

(66)

where .

Struve differential equation

(67)

Sturm-Liouville equation

(68)

Gegenbauer differential equation

(69)

van der Pol equation

(70)

Weber differential equation

(71)

where .

Whittaker differential equation

(72)

where .

See alsoAdams' Method, First-Order Ordinary Differential Equation, Green's Function,

Isocline, Laplace Transform,

Leading Order Analysis, Majorant,

Partial Differential Equation, Relaxation Methods, Runge-Kutta

Method, Second-Order

Ordinary Differential Equation, Simple Harmonic

Motion, Undetermined Coefficients

Method, Variation of Parameters Explore

this topic in the MathWorld classroom

Explore with Wolfram|Alpha

More things to try:

double pendulum

find all solutions of the ordinary differential equation dy/dx = cos^2(y)*log(x)

solve ordinary differential equation y'(t)-exp(y(t))=0, y(0)=10

ReferencesBoyce, W. E. and DiPrima, R. C. Elementary Differential Equations and Boundary Value Problems, 5th ed. New York: Wiley,

1992.Braun, M. Differential

Equations and Their Applications, 4th ed. New York: Springer-Verlag, 1993.Carroll,

J. "A Composite Integration Scheme for the Numerical Solution of Systems of

Ordinary Differential Equations." J. Comput. Appl. Math. 25, 1-13,

1989.Coddington, E. A. An

Introduction to Ordinary Differential Equations. New York: Dover, 1989.Forsyth,

A. R. Theory

of Differential Equations, 6 vols. New York: Dover, 1959.Forsyth,

A. R. A

Treatise on Differential Equations. New York: Dover, 1997.Fulford,

G.; Forrester, P.; and Jones, A. Modelling

with Differential and Difference Equations. New York: Cambridge University

Press, 1997.Guterman, M. M. and Nitecki, Z. H. Differential

Equations: A First Course, 3rd ed. Philadelphia, PA: Saunders, 1992.Hull,

T. E.; Enright, W. H.; Fellen, B. M.; and Sedgwick, A. E. "Comparing

Numerical Methods for Ordinary Differential Equations." SIAM J. Numer. Anal. 9,

603-637, 1972.Hull, T. E.; Enright, W. H.; Fellen, B. M.;

and Sedgwick, A. E. "Erratum to 'Comparing Numerical Methods for Ordinary

Differential Equations.' " SIAM J. Numer. Anal. 11, 681, 1974.Ince,

E. L. Ordinary

Differential Equations. New York: Dover, 1956.Jeffreys, H. and

Jeffreys, B. S. "Numerical Solution of Differential Equations." Methods

of Mathematical Physics, 3rd ed. Cambridge, England: Cambridge University

Press, pp. 290-301, 1988.Kamke, E. Differentialgleichungen:

Lösungsmethoden und Lösungen, Bd. 1: Gewöhnliche Differentialgleichungen,

9. Aufl. Stuttgart, Germany: Teubner, 1983.Milne, W. E.

Numerical

Solution of Differential Equations. New York: Dover, 1970.Morse,

P. M. and Feshbach, H. "Ordinary Differential Equations." Ch. 5

in Methods

of Theoretical Physics, Part I. New York: McGraw-Hill, pp. 492-675,

1953.Moulton, F. R. Differential

Equations. New York: Dover, 1958.Polyanin, A. D. and Zaitsev,

V. F. Handbook

of Exact Solutions for Ordinary Differential Equations. Boca Raton, FL: CRC

Press, 1995.Postel, F. and Zimmermann, P. "A Review of the ODE

Solvers of Axiom, Derive, Macsyma, Maple, Mathematica, MuPad, and Reduce." Submitted

to The 5th Rhine Workshop on Computer Algebra. July 26, 1996. http://www.loria.fr/~zimmerma/ComputerAlgebra/ode_comp.ps.gz.Press,

W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T.

"Integration of Ordinary Differential Equations." Ch. 16 in Numerical

Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England:

Cambridge University Press, pp. 701-744, 1992.Simmons, G. F.

Differential

Equations, with Applications and Historical Notes, 2nd ed. New York: McGraw-Hill,

1991.Weisstein, E. W. "Books about Ordinary Differential Equations."

http://www.ericweisstein.com/encyclopedias/books/OrdinaryDifferentialEquations.html.Zaitsev,

V. F. and Polyanin, A. D. Spravochnik po obyknovennym differentsial'nym

uravneniyam. Moscow: Fizmatlit, 2001.Zwillinger, D. Handbook

of Differential Equations, 3rd ed. Boston, MA: Academic Press, 1997.Referenced

on Wolfram|AlphaOrdinary Differential Equation

Cite this as:

Weisstein, Eric W. "Ordinary Differential Equation."

From MathWorld--A Wolfram Web Resource. https://mathworld.wolfram.com/OrdinaryDifferentialEquation.html

Subject classifications

Calculus and Analysis

Differential Equations

Ordinary Differential Equations

About MathWorld

MathWorld Classroom

Contribute

MathWorld Book

wolfram.com

13,108 Entries

Last Updated: Sat Feb 24 2024

©1999–2024 Wolfram Research, Inc.

Terms of Use

wolfram.com

Wolfram Language

Mathematica

Wolfram Demonstrations

Wolfram for Education

Created, developed and nurtured by Eric Weisstein at Wolfram Research

Chapter 17 常微分方程 {ODE} | 数值分析笔记

Chapter 17 常微分方程 {ODE} | 数值分析笔记

A Minimal Book Example

前言

1 高斯消元法 {Gaussian elimination}

1.1 数学

1.2 计算

2 Cholesky分解 {Cholesky decomposition}

2.1 \(A^{T}A\)

2.2 对称

2.3 正定矩阵

2.4 Cholesky分解

2.5 计算

3 QR 分解

3.1 Gram-Schmidt

3.2 Householder变换

3.3 计算

4 特征分解 {Eigen decomposition}

4.1 出现原因

4.1.1 主成分分析

4.1.2 物理方程

4.1.3 Quadratic Energy

4.2 定义

4.2.1 特征值和特征向量

4.2.2 谱和谱半径

4.2.3 有关特征值和特征向量的定理

4.2.4 扩展到复域

4.2.5 谱定理

4.2.6 理论基础

4.3 计算

4.3.1 最大的 eigenvalue 及对应的 eigenvector

4.3.2 最小的 eigenvalue 及对应的 eigenvector

4.3.3 靠近 \(\sigma\)的 eigenvalue 及对应的 eigenvector

4.3.4 根据 eigenvector 猜 eigenvalue

4.3.5 All eigenevalue

4.3.6 Householder 变换

4.3.7 QR

5 奇异值分解 {SVD decomposition}

5.1 引入

5.2 理解

5.3 计算

5.4 应用

5.4.1 例子一

5.4.2 例子二

5.4.3 例子三

5.5 例子

6 奇异值分解的应用 {SVD application}

6.1 Rigid Alignment / Procrustes Problem

6.2 APAR

6.3 PCA

6.4 图像压缩

7 矩阵分解 {matirx application}

7.1 定义

7.1.1 共轭转置 Conjugate transpose

7.1.2 Hermitian

7.1.3 正定 positive definite

7.1.4 正交矩阵 orthogonal matrix

7.1.5 酉矩阵 unitary matrix

7.1.6 正规矩阵 normal matrix

7.1.7 类比

7.2 分解

7.2.1 A = PLU

7.2.2 Cholesky 分解

7.2.3 QR分解

7.2.4 特征分解/频谱分解 Eigendecomposition / spectral decomposition

7.2.5 奇异值分解

8 非线性方程求解 {nonlinear equation}

8.1 二分法 Bisection method

8.2 不动点 fixed point

8.3 牛顿法 Newton’s method

8.4 割线法 Secant method

8.5 计算

9 非线性方程组求解 {nonlinear equations}

9.1 牛顿法

9.1.1 雅可比矩阵 Jacobian matrix

9.2 Broyden’s method

9.3 计算

10 临界点、驻点、拐点、鞍点、顶点(曲线) {Points Concepts}

10.1 临界点 critial point

10.2 驻点 stationary point

10.3 拐点 inflection point

10.3.1 convex 凸函数

10.3.2 concave 凹函数:

10.4 鞍点 saddle point

10.5 顶点(曲线)vertex (curve)

11 导数、梯度、 Jacobian、Hessian {Gradient Related Concepts}

11.1 导数

11.2 梯度

11.3 Jacobian 雅可比矩阵

11.4 Hessian 黑塞矩阵

12 无约束优化 {Optimization without constraintss}

12.1 例子

12.2 极值

12.3 一元函数

12.3.1 牛顿法

12.3.2 黄金分割搜索 Golden-section search

12.4 多元函数

12.4.1 梯度下降法

12.4.2 牛顿法

12.4.3 BFGS

13 从拉格朗日乘子法到KKT条件 {Lagrange multiplier to KKT condition}

13.1 介绍

13.2 多个约束

13.2.1 例子

13.3 KKT 条件

13.3.1 介绍

13.4 KKT 条件

13.5 例子

14 从梯度下降到共轭梯度 {Conjugate gradient}

14.1 梯度下降 Gradient descent

14.2 共轭梯度 Conjugate gradient

14.3 总结

15 插值 {Interpolate}

15.1 多项式插值

15.2 拉格朗日插值法

15.3 牛顿插值法

15.4 分段插值

16 数值积分和微分{Numerial Intergration}

16.1 积分

16.1.1 黎曼和

16.1.2 梯形法则

16.1.3 辛普森法则

16.1.4 牛顿-柯特斯公式

16.1.5 精确度

16.2 微分

17 常微分方程 {ODE}

17.1 基本形式

17.2 显式 ODE

17.3 可视化

17.4 解的状况

17.5 线性ODE

17.6 求解

17.6.1 前向欧拉法

17.6.2 后向欧拉

18 偏微分方程 {PDE}

18.1 解

18.2 运算符

18.3 纳维-斯托克斯方程 Navier-Stokes equations

18.4 麦克斯韦方程组 Maxwell’s equations

18.5 拉普拉斯方程 Laplace’s equation

18.6 调和分析 Harmonic analysis

18.7 边界条件 Boundary Value Problems

18.8 二阶PDE

18.9 椭圆型 PDE

18.10 抛物型 PDE

18.11 双曲型 PDE

18.12 微分看成算子

References

Published with bookdown

数值分析笔记

Chapter 17 常微分方程 {ODE}

微分方程- 即使只是常微分方程( ordinary differential equation, ODE) 也是非常有趣的。

比如牛顿第二定律:

\[

m\frac{d^2 x}{d t^2} = F(x)

\]

比如大名鼎鼎的 logistic function:

\[\frac{dP}{dt} = P\]

17.1 基本形式

\[

F(t): \mathbb{R} \to \mathbb{R}^n \\

\text{satifying }: F[t, f(t), f'(t), f''(t), \cdots, f^{(k)}(t)] = 0 \\

\text{Given } f(0), f'(0), f''(0), \cdots, f^{(k-1)}(0)

\]

给我们上面的式子,希望我们能推导出 \(f(t), f'(t), \cdots, f^{(k)}(t)\) 随着时间 t 的变化。

显式 vs 隐式

上面这个事实叫做 n 阶隐式(implicit)常微分方程,有的时候我们可以把它化为显式 (explicit)的:

\[

f^{(k)}(t) = F[t, f(t), f'(t), f''(t), \cdots, f^{(k-1)}(t)]

\]

比如上面的两个例子都是显式的。

自治 vs 非自治

自治(autonomous) 系统形式如下,一般来说,也就是 f 与时间无关:

\[

\frac{d}{dt}x(t)=f(x(t))

\]

比如上面我们的牛顿第二定律, 非自治形式如下:

\[

{\displaystyle {\frac {d}{dt}}x(t)=g(x(t),t)}

\]

物理上来说,这表示空间中一点的性质不仅取决于它的位置,还取决于时间:在不同的时间,经过此一点的质点或粒子会受到不同的影响。

其它

当然常微分方程还有许多其它的分类,比如线性、齐次等.

17.2 显式 ODE

假设我们有 ODE 如下:

\[

y''' = 3y'' - 2y' + y

\]

因为有:

\[

\frac{d^2 y}{d t^2} = \frac{d}{dt} \bigg( {\frac{dy}{dt}} \bigg)\\

\]

我们令:

\[

z = \frac{dy}{dt}\\

w = \frac{d^2 y}{d t^2}

\]

我们可以把上面的式子写成:

\[

\frac{d}{d t}\begin{pmatrix} y \\ z \\ w \end{pmatrix} = \begin{pmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & -2 & 3 \end{pmatrix}\begin{pmatrix} y \\ z \\ w \end{pmatrix}

\]

我们可以把显式的 ODE 转化成一阶ODE。更一般的,对于显式 ODE:

\[f^{(k)}(t) = F[t, f(t), f'(t), f''(t), \cdots, f^{(k-1)}(t)]

\]

我们都可以把之转化成一阶 ODE:

\[

\frac{d}{d t}\begin{pmatrix} g_1(t) \\ g_2(t) \\ \vdots \\ g_{k-1}(t) \\ g_k(t) \end{pmatrix} = \begin{pmatrix} g_2(t) \\ g_3(t)\\ \vdots \\ g_k(t) \\ F[t, g_1(t), g_2(t), \cdots, g_{(k-1)}(t)] \end{pmatrix}

\]

上面这个式子中: \(g_2(t) = g_1'(t), g_3(t) = g_2'(t) = g_1''(t)\).

更好的是,我们可以把显式的微分方程转化为自治的,如果有: \(f'(t) = F[t, f(t)]\), 我们令 \(g(t) = t\), 则 \(f'(t)\) 可以写成:

\[

\frac{d}{d t}\begin{pmatrix} g(t) \\ f(t) \end{pmatrix} = \begin{pmatrix} 1 \\ F[g(t), f(t)] \end{pmatrix}

\]

所以我们只需要考虑一阶自治ODE,即:

\[

f'(t) = F[f(t)]

\]

17.3 可视化

如果我们想可视化ODE,一般会使用两种方法。

斜率场 slope field

A slope field is a collection of short line segments, whose slopes match that of a solution of a first-order differential equation passing through the segment’s midpoint. The pattern produced by the slope field aids in visualizing the shape of the curve of the solution. This is especially useful when the solution to a differential equation is difficult to obtain analytically.

Slope_Field.png

上图画的是斜率场为:

\[

\frac{dy}{dx} = x^2 - x - 2

\]

其中 蓝、红、青 的线条分别是:

\[

x^3/3 - x^2/2 -2x+4 \\

x^3/3 - x^2/2 -2x \\

x^3/3 - x^2/2 -2x-4

\]

肉眼可以某种程度的看出它们满足这个斜率场。

当然这是极好的状况,有时候即使算不出来解析解,我们画出这个斜率场也能某种程度的了解我们的ODE变化情况。

相图 phase diagram

比如看上面这个 \(dx/dt = f(x)\):

\[

\frac{dx}{dt} = x(1-x)

\]

因为它是自治的, 所以斜斜率场的斜率不会随着时间变化, 在 x = 0 与 x = 1 处 有 \(dx/dt = 0\), 然后自然而然的就是画出右边的 phase line,可以容易看出它的平衡点与平衡状态。

17.4 解的状况

对于 \(y' = 2y/t\):

\[

\frac{dy}{dt} = \frac{2y}{t}

\]

通过分离变量法可以解的:

\[

ln |y| = 2 ln t + c

\]

或者写成: \(y = Ct^2\)

无解

如果我们给定初始值 \(y(0) \ne 0\),那么明显方程无解。

解不唯一

如果我们给定初始值 \(y(0) = 0\), 那么对于任意的 \(C \in \mathbb{R}\) 都成立。

存在并且解唯一

如果F满足利普希茨连续(Lipschitz continuity),也就是 \(|F[\vec{y}]-F[\vec{x}]|_2 \leq L|\vec{y}-\vec{x}|_2\) ,那么 \(f'(t) = F[f(t)]\) 会有唯一解。

17.5 线性ODE

我们先来研究最简单的 ODE 之一,也就是:

\[

y' = ay

\]

上述方程可以解出:

\[

y(t) = Ce^{at}

\]

针对不同的a,我们可以画出如下图:

a = 0: y(t)常数,跟t无关, 解稳定

a < 0: t增加,y(t)趋于0, 解稳定

a > 0: t增加,y(t)增加, 解不稳定

如果上面的线性ODE推广到多维:

\[

\vec{y}' = A \vec{y}

\]

如果 \(\vec{y}_1, \cdots, \vec{y}_k\) 是 A 的特征向量, \(\lambda_1, \cdots, \lambda_k\) 是与之对应的特征值,并且 \(\vec{y}(0) = c_1\vec{y}_1 + \cdots + c_k\vec{y}_k\), 那么:

\[

\vec{y}(t) = c_1 e^{\lambda_1 t}\vec{y}_1 + \cdots + c_k e^{\lambda_k t}\vec{y}_k

\]

对于更加一般的ODE \(\vec{y}' = F[\vec{y}]\), F 可微,那么可以写成:

\[

F[\vec{y}] = F[\vec{y}_0] + J_F(\vec{y}_0)(\vec{y} - \vec{y}_0)

\]

这也是告诉我们给我们 \(t_k\) 时间的 \(\vec{y}_k\), 我们可以利用 \(\vec{y}' = F[\vec{y}]\) 近似出 \(\vec{y}_{k+1}\)。

17.6 求解

17.6.1 前向欧拉法

依旧利用的是泰勒展开:

\[y_{k+1} = y_k+hF[y_k]\]

假设 y’ = ay 讨论它的稳定性的话会发现 \(a < 0 ,0 \le h \le \frac{2}{|a|}\) 是稳定的, 所以就是选取的步长 h 不能过大。给定初始条件,然后就可以利用给定初始条件选定h开始数值求解。

17.6.2 后向欧拉

\[y_k = y_{k+1} - hF[y_{k+1}]\]

做出同样假设来讨论稳定性的话发现它总是稳定的。但是利用这个后向欧拉是隐式的, 我们需要先计算出 \(y_{k+1}\).

其它还有一些跟数值积分类似的方法,也有一些新的方法,暂时先略去。

版权声明:本文由imtoken钱包下载官方发布,如需转载请注明出处。

本文链接:https://www.siyuewuyu.com/article/114.html