常微分方程的数值解法_常微分方程数值求解csdn-程序员宅基地

技术标签: 数值分析  

常微分方程的数值解法

常微分方程的分类

初值问题

{ d y d x = f ( x , y ) x ∈ [ a , b ] y ( x 0 ) = y 0 \left\{ \begin{aligned} \frac{dy}{dx}=f(x,y)\quad{x}\in[a,b] \\ y(x_0)=y_0\quad \end{aligned} \right . dxdy=f(x,y)x[a,b]y(x0)=y0

定理只要存在正整数 L L L f ( x ) f(x) f(x)满足
∣ f ( x , y 1 ) − f ( x , y 2 ) ∣ ≤ L ∣ y 1 − y 2 ∣ |f(x,y_1)-f(x,y_2)|\leq{}L|y_1-y_2| f(x,y1)f(x,y2)Ly1y2
李普希思条件,那么初值问题就存在唯一的 f ( x ) f(x) f(x)

边值问题(非重点)

{ y ′ ′ = f ( x , y , y ′ ) a ≤ x ≤ b y ( a ) = x 0 , y ( b ) = y n \left\{ \begin{aligned} y''=f(x,y,y')\quad a\leq{x}\leq{b}\\ y(a)=x_0,\quad{y(b)=y_n} \end{aligned} \right. { y=f(x,y,y)axby(a)=x0,y(b)=yn

常微分方程数值解的基本思想

原 表 达 式 { y ′ = f ( x , y ) y 0 = η 原表达式\quad \left\{ \begin{aligned} y'=f(x,y)\\ y_0=\eta \end{aligned} \right. { y=f(x,y)y0=η

化导数为差商的方法

解序列表达式
{ y 0 = η y k + 1 = y k + h f ( t k , y k ) k = 0 , 1 , 2 , …   n \quad \left\{ \begin{aligned} y_0=\eta\\ y_{k+1}=y_k+hf(t_k,y_k)\quad{}k=0,1,2,\dots\,n \end{aligned} \right. { y0=ηyk+1=yk+hf(tk,yk)k=0,1,2,n
其中 t k t_k tk表示已给定步长,第k个点

数值积分的求解思路

解序列的表达形式
{ y k + 1 = y k + ∫ t k t k + 1 f ( t , y ) d t 表 达 式 2 \left\{ \begin{aligned} y_{k+1}=y_k+\int_{t_k}^{t_{k+1}}f(t,y)dt\\ 表达式2\\ \end{aligned} \right. yk+1=yk+tktk+1f(t,y)dt2
而积分可以用不同的数值积分的方法求得

泰勒展开法

y ( x n + 1 ) y(x_{n+1}) y(xn+1) x n x_n xn点处进行泰勒展开,得到解序列
{ y 0 = η y k + 1 = y k + h f ( t k , y k ) \left\{ \begin{aligned} y_0=\eta\\ y_{k+1}=y_k+hf(t_k,y_k) \end{aligned} \right. { y0=ηyk+1=yk+hf(tk,yk)

欧拉法

欧拉法的基本公式

解序列
{ y 0 = η y k + 1 = y k + h f ( t k , y k ) \left\{ \begin{aligned} y_0=\eta\\ y_{k+1}=y_k+hf(t_k,y_k) \end{aligned} \right. { y0=ηyk+1=yk+hf(tk,yk)
根据解序列可以得到对应 x 1 , x 2 , x 3 ⋯   , x n x_1,x_2,x_3\cdots,x_n x1,x2,x3,xn的函数值 y 1 , y 2 , ⋯   , y n y_1,y_2,\cdots,y_n y1,y2,,yn的函数值

根据已得到的函数值,利用插值法构造原函数y(x)

向后欧拉法

{ y 0 = η y n + 1 = y n + h f ( x n + 1 , y n + 1 ) \left\{ \begin{aligned} y_0=\eta\\ y_{n+1}=y_n+hf(x_{n+1},y_{n+1}) \end{aligned} \right. { y0=ηyn+1=yn+hf(xn+1,yn+1)

向后欧拉法是隐式的公式,右边表达式中含有未知函数值,没有显示欧拉法计算方便

欧拉法只要满足李普希思条件就是收敛的
∣ y n + 1 ( k + 1 ) − y n + 1 ∣ < h L ∣ y n + 1 k − y n + 1 ∣ |y_{n+1}^{(k+1)}-y_{n+1}|<hL|y_{n+1}^{k}-y_{n+1}| yn+1(k+1)yn+1<hLyn+1kyn+1
只要 h L < 1 hL<1 hL<1那么迭代式就是收敛的

梯形欧拉法

序列公式
y n + 1 = y n + h 2 [ f ( x n , y n ) + f ( x n + 1 , y n + 1 ) ] y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1})] yn+1=yn+2h[f(xn,yn)+f(xn+1,yn+1)]
梯形欧拉公式就是显示欧拉公式和隐式欧拉公示的算术平均

常微分方程的误差问题

由于已知常微分方程
y n + 1 = y n + h f ( y n , x n ) y_{n+1}=y_n+hf(y_n,x_n) yn+1=yn+hf(yn,xn)
这种形式,可知, y n + 1 y_{n+1} yn+1的值和 y n y_n yn之间是有关联的而 y n y_n yn,本身是有误差的故,误差会进行累积

局部误差

定义:在假设第i步精确的情况下第i+1步的误差称为局部截断误差
e i + 1 ( h ) = y ( x i + 1 ) − y i e_{i+1}(h)=y(x_{i+1})-y_i ei+1(h)=y(xi+1)yi

累积截断误差(总体截断误差)

累积截断误差和总体截断误差是一个概念
E k ( h ) = ∑ i = 1 k e i ( h ) E_k(h)=\sum_{i=1}^ke_i(h) Ek(h)=i=1kei(h)
其中 e i ( h ) e_i(h) ei(h)称为求解公式第 i i i步的误差

p p p阶精度

若求解公式的局部截断误差等于
e i ( h ) = O ( h p + 1 ) e_i(h)=O(h^{p+1}) ei(h)=O(hp+1)
则求解公式具有 p p p阶精度

常用求解公式局部截断误差
欧拉公式的局部截断误差

e i + 1 ( h ) = h 2 2 y ′ ′ ( ξ i ) e_{i+1}(h)=\frac{h^2}{2}y''(\xi_i) ei+1(h)=2h2y(ξi)

欧拉公式具有1阶精度

向后欧拉公式的局部截断误差

e i + 1 ( h ) = − h 2 2 y ′ ′ ( ξ i ) e_{i+1}(h)=-\frac{h^2}{2}y''(\xi_i) ei+1(h)=2h2y(ξi)

向后欧拉公式也具有1阶精度

梯形公式的截断误差

e i + 1 ( h ) = − y ′ ′ ′ ( η i + 1 ) 12 h 3 e_{i+1}(h)=-\frac{y'''(\eta_{i+1})}{12}h^3 ei+1(h)=12y(ηi+1)h3

梯形公式具有2阶精度

梯形公式是迭代公式其收敛性与欧拉公式相似

中点欧拉公式(两步法)

y i + 1 = y i − 1 + 2 h f ( x i , y i ) y_{i+1}=y_{i-1}+2hf(x_i,y_i) yi+1=yi1+2hf(xi,yi)

中点公式的截断误差
e i = O ( h 3 ) e_i=O(h^3) ei=O(h3)
中点公式具有2阶精度

几种求解公式直接的比较

image-20210427102945549

改进的欧拉公式

先用显示的欧拉公式对 y n + 1 y_{n+1} yn+1进行预测,再回代到梯形公式进行预测
y i + 1 = y i + h 2 [ f ( x i , y i ) + f ( x i + 1 , y i + h f ( x i , y i ) ) ] y_{i+1}=y_i+\frac{h}{2}[f(x_i,y_i)+f(x_{i+1},y_i+hf(x_i,y_i))] yi+1=yi+2h[f(xi,yi)+f(xi+1,yi+hf(xi,yi))]

改进的欧拉法又称为预测-校证法,具有2阶精度

龙格库塔法

建立高精度的单步递推公式

2阶龙格-库塔法

2阶龙格库塔法满足的基本公式
{ y i + 1 = y i + ( λ 1 + λ 2 ) h y ′ ( x i ) + λ 2 ρ h 2 y ′ ′ ( x i ) λ 1 + λ 2 = 1 λ 2 ρ = 1 2 \left\{ \begin{aligned} y_{i+1}=y_i+(\lambda_1+\lambda_2)hy'(x_i)+\lambda_2\rho{h^2}y''(x_i)\\ \lambda_1+\lambda_2=1\quad\lambda_2\rho=\frac{1}{2}\\ \end{aligned} \right. yi+1=yi+(λ1+λ2)hy(xi)+λ2ρh2y(xi)λ1+λ2=1λ2ρ=21

3阶龙格-库塔法

基本公式
$$
\left{
\begin{aligned}
y_{n+1}=y_n+\frac{h}{6}(K_1+4K_2+K_3)\
K_1=f(x_n,y_n)\
K_2=f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_1)\
K_3=f(x_n+h,y_n+h(2K_2-K_1))
\end{aligned}

\right.
$$

单步法的收敛性和稳定性

收敛性

定义若某算法对任意固定的 x = x i = x 0 + i h x=x_i=x_0+ih x=xi=x0+ih h → 0 同 时 i → ∞ 时 候 有 y i → y ( x i ) h\to0同时i\to\infty时候有y_i\to{}y(x_i) h0iyiy(xi)则称该算法是收敛的

稳定性
扰动的基本定义:

δ n = y ( x n ) − y n \delta_n=y(x_n)-y_n δn=y(xn)yn

y ( x n ) y_(x_n) y(xn)为数值算法得到的理想数值解

y n y_n yn为实际计算得到的数值解

稳定的定义

若在某一处的 x n x_n xn点处得到的扰动为 δ n \delta_n δn 那么对于任意一点 m , m ≥ n m,m\ge{n} m,mn都有
∣ δ m ∣ ≤ ∣ δ n ∣ |\delta_{m}|\leq|\delta_{n}| δmδn
则该数值方法就是稳定的

常见数值算法的稳定性

只考虑 y ′ = λ y y'=\lambda{y} y=λy的稳定性

欧拉法的稳定条件

0 ≤ h ≤ − 2 λ 0\leq{h}\leq-\frac{2}{\lambda} 0hλ2

隐式欧拉法稳定性

隐式欧拉法是恒稳定

线性多步法

线性多步法是利用已知 y ( x ) y(x) y(x)在各点的近似值以及导数的近似值线性组合来逼近的

龙格库塔法是利用 y ( x ) y(x) y(x) 在 [ x i , x i + 1 ] 在[x_i,x_{i+1}] [xi,xi+1]内若干导数预测值的线性组合来逼近的

这两种方法都是高精度的方法

Adamas方法

y n + k = y n + k − 1 + h ∑ i = − 1 k β i f n + i y_{n+k}=y_{n+k-1}+h\sum_{i=-1}^k\beta_if_{n+i} yn+k=yn+k1+hi=1kβifn+i

常用的Admans显示公式

image-20210427160937481

常用的Admans隐式公式

image-20210427161033329

米尔尼方法,汉明方法以及辛普森方法
米尔尼方法及其余项

y n + 1 = y n − 3 + 4 h 3 ( 2 f n − f n − 1 + 2 f n − 2 ) 余 项 T n = 14 45 h 5 y ( 5 ) ( ξ n ) y_{n+1}=y_{n-3}+\frac{4h}{3}(2f_n-f_{n-1}+2f_{n-2})\\ 余项\quad{}T_n=\frac{14}{45}h^{5}y^{(5)}(\xi_n) yn+1=yn3+34h(2fnfn1+2fn2)Tn=4514h5y(5)(ξn)

汉明方法及其余项

y n + 1 = 1 8 ( 9 y n − y n − 2 ) + 3 h 8 ( f n + 1 + 2 f n − f n − 1 ) 余 项 T n + 1 = − 1 40 h 5 y ( 5 ) ( ξ n ) y_{n+1}=\frac{1}{8}(9y_n-y_{n-2})+\frac{3h}{8}(f_{n+1}+2f_n-f_{n-1})\\ 余项\quad T_{n+1}=-\frac{1}{40}h^5y^{(5)}(\xi_n) yn+1=81(9ynyn2)+83h(fn+1+2fnfn1)Tn+1=401h5y(5)(ξn)

辛普森方法及其余项

y n + 1 = y n − 1 + h 3 ( f n + 1 + 4 f n + f n − 1 ) 余 项 T n + 1 = − 1 90 h 5 y ( 5 ) ( ξ n ) y_{n+1}=y_{n-1}+\frac{h}{3}(f_{n+1}+4f_n+f_{n-1}) \\ 余项\quad T_{n+1}=-\frac{1}{90}h^5y^{(5)}(\xi_n) yn+1=yn1+3h(fn+1+4fn+fn1)Tn+1=901h5y(5)(ξn)

预测校证法
米尔宁汉明方法和4阶Adams 显隐式预测校证公式

y n + 1 p = y n − 3 + 4 h 3 ( 2 f n − f n − 1 + 2 f n − 2 ) y n + 1 = 1 8 ( 9 y n − y n − 2 ) + 8 h 3 ( f ( x n + 1 , y n + 1 p ) + 2 f n − f n − 1 ) y^{p}_{n+1}=y_{n-3}+\frac{4h}{3}(2f_n-f_{n-1}+2f_{n-2})\\ y_{n+1}=\frac{1}8(9y_n-y_{n-2})+\frac{8h}{3}(f(x_{n+1},y_{n+1}^p)+2f_n-f_{n-1}) yn+1p=yn3+34h(2fnfn1+2fn2)yn+1=81(9ynyn2)+38h(f(xn+1,yn+1p)+2fnfn1)

米尔公式和汉明公式的截断误差分别是

T n + 1 M = 14 45 h 5 y ( 5 ) ( x n ) + O ( h 6 ) T n + 1 H = − 1 40 h 5 y ( 5 ) ( x n ) + O ( h 6 ) T_{n+1}^M=\frac{14}{45}h^5y^{(5)}(x_n)+O(h^6)\\ T_{n+1}^H=-\frac{1}{40}h^5y^{(5)}(x_n)+O(h^6) Tn+1M=4514h5y(5)(xn)+O(h6)Tn+1H=401h5y(5)(xn)+O(h6)

一阶方程组和高阶方程

常微分方程的边值问题的数值解法

边值条件的分类
  • 第一边值条件 y ( a ) = α , y ( b ) = β y(a)=\alpha,y(b)=\beta y(a)=α,y(b)=β
  • 第二边值条件 y ′ ( a ) = α , y ′ ( b ) = β y'(a)=\alpha,y'(b)=\beta y(a)=α,y(b)=β
  • 第三边值条件 y ′ ( a ) = a 0 y ( a ) + α 1 , y ′ ( b ) = β y ( b ) + β 1 y'(a)=a_0y(a)+\alpha_1,y'(b)=\beta{y(b)}+\beta_1 y(a)=a0y(a)+α1,y(b)=βy(b)+β1
边值的近似解,的三种基本求法
  • 编制问题华为初值问题方法求解
  • 差分法,用差商来替代微分方程以边值中的导数,化为代数方程求解
  • 有限元法
差分法

5y{(5)}(x_n)+O(h6)\
T_{n+1}H=-\frac{1}{40}h5y{(5)}(x_n)+O(h6)
$$

一阶方程组和高阶方程

常微分方程的边值问题的数值解法

边值条件的分类
  • 第一边值条件 y ( a ) = α , y ( b ) = β y(a)=\alpha,y(b)=\beta y(a)=α,y(b)=β
  • 第二边值条件 y ′ ( a ) = α , y ′ ( b ) = β y'(a)=\alpha,y'(b)=\beta y(a)=α,y(b)=β
  • 第三边值条件 y ′ ( a ) = a 0 y ( a ) + α 1 , y ′ ( b ) = β y ( b ) + β 1 y'(a)=a_0y(a)+\alpha_1,y'(b)=\beta{y(b)}+\beta_1 y(a)=a0y(a)+α1,y(b)=βy(b)+β1
边值的近似解,的三种基本求法
  • 编制问题华为初值问题方法求解
  • 差分法,用差商来替代微分方程以边值中的导数,化为代数方程求解
  • 有限元法
差分法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46964867/article/details/116354413

智能推荐

获取大于等于一个整数的最小2次幂算法(HashMap#tableSizeFor)_整数 最小的2的几次方-程序员宅基地

文章浏览阅读2w次,点赞51次,收藏33次。一、需求给定一个整数,返回大于等于该整数的最小2次幂(2的乘方)。例: 输入 输出 -1 1 1 1 3 4 9 16 15 16二、分析当遇到这个需求的时候,我们可能会很容易想到一个"笨"办法:..._整数 最小的2的几次方

Linux 中 ss 命令的使用实例_ss@,,x,, 0-程序员宅基地

文章浏览阅读865次。选项,以防止命令将 IP 地址解析为主机名。如果只想在命令的输出中显示 unix套接字 连接,可以使用。不带任何选项,用来显示已建立连接的所有套接字的列表。如果只想在命令的输出中显示 tcp 连接,可以使用。如果只想在命令的输出中显示 udp 连接,可以使用。如果不想将ip地址解析为主机名称,可以使用。如果要取消命令输出中的标题行,可以使用。如果只想显示被侦听的套接字,可以使用。如果只想显示ipv4侦听的,可以使用。如果只想显示ipv6侦听的,可以使用。_ss@,,x,, 0

conda activate qiuqiu出现不存在activate_commandnotfounderror: 'activate-程序员宅基地

文章浏览阅读568次。CommandNotFoundError: 'activate'_commandnotfounderror: 'activate

Kafka 实战 - Windows10安装Kafka_win10安装部署kafka-程序员宅基地

文章浏览阅读426次,点赞10次,收藏19次。完成以上步骤后,您已在 Windows 10 上成功安装并验证了 Apache Kafka。在生产环境中,通常会将 Kafka 与外部 ZooKeeper 集群配合使用,并考虑配置安全、监控、持久化存储等高级特性。在生产者窗口中输入一些文本消息,然后按 Enter 发送。ZooKeeper 会在新窗口中运行。在另一个命令提示符窗口中,同样切换到 Kafka 的。Kafka 服务器将在新窗口中运行。在新的命令提示符窗口中,切换到 Kafka 的。,应显示已安装的 Java 版本信息。_win10安装部署kafka

【愚公系列】2023年12月 WEBGL专题-缓冲区对象_js 缓冲数据 new float32array-程序员宅基地

文章浏览阅读1.4w次。缓冲区对象(Buffer Object)是在OpenGL中用于存储和管理数据的一种机制。缓冲区对象可以存储各种类型的数据,例如顶点、纹理坐标、颜色等。在渲染过程中,缓冲区对象中存储的数据可以被复制到渲染管线的不同阶段中,例如顶点着色器、几何着色器和片段着色器等,以完成渲染操作。相比传统的CPU访问内存,缓冲区对象的数据存储和管理更加高效,能够提高OpenGL应用的性能表现。_js 缓冲数据 new float32array

四、数学建模之图与网络模型_图论与网络优化数学建模-程序员宅基地

文章浏览阅读912次。(1)图(Graph):图是数学和计算机科学中的一个抽象概念,它由一组节点(顶点)和连接这些节点的边组成。图可以是有向的(有方向的,边有箭头表示方向)或无向的(没有方向的,边没有箭头表示方向)。图用于表示各种关系,如社交网络、电路、地图、组织结构等。(2)网络(Network):网络是一个更广泛的概念,可以包括各种不同类型的连接元素,不仅仅是图中的节点和边。网络可以包括节点、边、连接线、路由器、服务器、通信协议等多种组成部分。网络的概念在各个领域都有应用,包括计算机网络、社交网络、电力网络、交通网络等。_图论与网络优化数学建模

随便推点

android 加载布局状态封装_adnroid加载数据转圈封装全屏转圈封装-程序员宅基地

文章浏览阅读1.5k次。我们经常会碰见 正在加载中,加载出错, “暂无商品”等一系列的相似的布局,因为我们有很多请求网络数据的页面,我们不可能每一个页面都写几个“正在加载中”等布局吧,这时候将这些状态的布局封装在一起就很有必要了。我们可以将这些封装为一个自定布局,然后每次操作该自定义类的方法就行了。 首先一般来说,从服务器拉去数据之前都是“正在加载”页面, 加载成功之后“正在加载”页面消失,展示数据;如果加载失败,就展示_adnroid加载数据转圈封装全屏转圈封装

阿里云服务器(Alibaba Cloud Linux 3)安装部署Mysql8-程序员宅基地

文章浏览阅读1.6k次,点赞23次,收藏29次。PS: 如果执行sudo grep 'temporary password' /var/log/mysqld.log 后没有报错,也没有任何结果显示,说明默认密码为空,可以直接进行下一步(后面设置密码时直接填写新密码就行)。3.(可选)当操作系统为Alibaba Cloud Linux 3时,执行如下命令,安装MySQL所需的库文件。下面示例中,将创建新的MySQL账号,用于远程访问MySQL。2.依次运行以下命令,创建远程登录MySQL的账号,并允许远程主机使用该账号访问MySQL。_alibaba cloud linux 3

excel离散度图表怎么算_excel离散数据表格-Excel 离散程度分析图表如何做-程序员宅基地

文章浏览阅读7.8k次。EXCEL中数据如何做离散性分析纠错。离散不是均值抄AVEDEV……=AVEDEV(A1:A100)算出来的是A1:A100的平均数。离散是指各项目间指标袭的离散均值(各数值的波动情况),数值较低表明项目间各指标波动幅百度小,数值高表明波动幅度较大。可以用excel中的离散公式为STDEV.P(即各指标平均离散)算出最终度离散度。excel表格函数求一组离散型数据,例如,几组C25的...用exc..._excel数据分析离散

学生时期学习资源同步-JavaSE理论知识-程序员宅基地

文章浏览阅读406次,点赞7次,收藏8次。i < 5){ //第3行。int count;System.out.println ("危险!System.out.println(”真”);System.out.println(”假”);System.out.print(“姓名:”);System.out.println("无匹配");System.out.println ("安全");

linux 性能测试磁盘状态监测:iostat监控学习,包含/proc/diskstats、/proc/stat简单了解-程序员宅基地

文章浏览阅读3.6k次。背景测试到性能、压力时,经常需要查看磁盘、网络、内存、cpu的性能值这里简单介绍下各个指标的含义一般磁盘比较关注的就是磁盘的iops,读写速度以及%util(看磁盘是否忙碌)CPU一般比较关注,idle 空闲,有时候也查看wait (如果wait特别大往往是io这边已经达到了瓶颈)iostatiostat uses the files below to create ..._/proc/diskstat

glReadPixels读取保存图片全黑_glreadpixels 全黑-程序员宅基地

文章浏览阅读2.4k次。问题:在Android上使用 glReadPixel 读取当前渲染数据,在若干机型(华为P9以及魅族某魅蓝手机)上读取数据失败,glGetError()没有抓到错误,但是获取到的数据有误,如果将获取到的数据保存成为图片,得到的图片为黑色。解决方法:glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓..._glreadpixels 全黑