计算方法-常微分方程初值问题的数值解法
常微分方程的初值问题
y′(x)=f(x,y)y(x0)=y0y'(x)=f(x,y) \\\quad\\ y(x_0)=y_0 y′(x)=f(x,y)y(x0)=y0
常微分方程问题的初值解法
一、欧拉公式
yn+1=yn+hf(xn,yn)y_{n+1}=y_n+hf(x_n,y_n)yn+1=yn+hf(xn,yn)
- hhh为步长,即 xnx_nxn 到 xn+1x_{n+1}xn+1间的距离(xn+1−xn)(x_{n+1}-x_n)(xn+1−xn)。
- f(xn,yn)f(x_n,y_n)f(xn,yn)为(xn,yn)(x_n,y_n)(xn,yn)点的斜率。
二、隐式欧拉公式
yn+1=yn+hf(xn+1,yn+1)y_{n+1}=y_n+hf(x_{n+1},y_{n+1})yn+1=yn+hf(xn+1,yn+1)
即采用了后面点的斜率作为两点连线的斜率。
从上方公式可以看出,求常微分方程的初值问题的关键是:
如何选取一个合适的斜率f′(ξ)f'(\xi)f′(ξ)使得yn+1y_{n+1}yn+1的值最为精确
yn+1=yn+(xn+1−xn)∗f′(ξ),ξ∈(xn,xn+1)y_{n+1} = y_n + (x_{n+1}-x_n)*f'(\xi),\quad\xi\in (x_n,x_{n+1})yn+1=yn+(xn+1−xn)∗f′(ξ),ξ∈(xn,xn+1)
- 欧拉方法使用xnx_nxn点的斜率近似
- 隐式欧拉方法使用xn+1x_{n+1}xn+1点的斜率近似
但我们如果将欧拉公式和隐式欧拉公式的斜率平均会不会得到更为近似的斜率呢?
为此引出梯形公式
三、梯形公式
yn+1=yn+h[f(xn,yn)+f(xn+1,yn+1)]2y_{n+1}=y_n+h\frac{\left[ f(x_n,y_n)+f(x_{n+1},y_{n+1})\right]}{2} yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]
但如何求解隐式公式:
如果y′(x)=f(x,y)y'(x)=f(x,y)y′(x)=f(x,y)中,f(x,y)只包含y的一次项 (即f(x,y)f(x,y)f(x,y)是yyy的线性函数)),则可显示计算。
但若不是线性函数,则需要用迭代法计算。
迭代公式:
yn+10=yn+hf(xn,yn)yn+1(k+1)=yn+h2[f(xn,yn)+f(xn+1,yn+1k)]y_{n+1}^0=y_n+hf(x_n,y_n) \\ y_{n+1}^{(k+1)} = y_n + \frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1}^k)] yn+10=yn+hf(xn,yn)yn+1(k+1)=yn+2h[f(xn,yn)+f(xn+1,yn+1k)]
上标为迭代次数,第一次迭代使用欧拉公式确定一个近似值。
改进的欧拉公式
为了编程方便,且具有较好的精确度,一般采用改进的欧拉公式。
{T1=yn+hf(xn,yn)T2=yn+hf(xn+1,T1)yn+1=T1+T22\begin{cases} T_1=y_n+hf(x_n,y_n) \\ T_2=y_n+hf(x_{n+1},T_1) \\ y_{n+1} = \frac{ T_1+T_2}{2} \end{cases}⎩⎪⎨⎪⎧T1=yn+hf(xn,yn)T2=yn+hf(xn+1,T1)yn+1=2T1+T2
两步欧拉公式(中点公式)
两步欧拉公式:用前两步的值作为迭代初值,用前一步的斜率作为两步间的斜率。
yn+1=yn−1+2hf(xn,yn)y_{n+1} = y_{n-1}+2hf(x_n,y_n)yn+1=yn−1+2hf(xn,yn)
中点公式:yn+1=yn+2hf(x2n+12,y2n+12)y_{n+1} = y_{n}+2hf(x_{\frac{2n+1}{2}},y_{\frac{2n+1}{2}})yn+1=yn+2hf(x22n+1,y22n+1)
如何判断以上方法的精度?
局部截断误差
Tn+1=y(xn+1)−y(xn)−h∗φ(xn,xn+1,y(xn),y(xn+1),h)T_{n+1} = y(x_{n+1})-y(x_n)-h*\varphi(x_n,x_{n+1},y(x_n),y(x_{n+1}),h )Tn+1=y(xn+1)−y(xn)−h∗φ(xn,xn+1,y(xn),y(xn+1),h)
φ(xn,xn+1,y(xn),y(xn+1),h)\varphi(x_n,x_{n+1},y(x_n),y(x_{n+1}),h )φ(xn,xn+1,y(xn),y(xn+1),h)为各种方法中的斜率近似值函数
Tn+1=O(hp+1)T_{n+1}=O(h^{p+1})Tn+1=O(hp+1)则称该方法是具有p阶精度的。
含hp+1h^{p+1}hp+1的项称为局部截断误差主项。
求解截断误差需要使用泰勒展开:
yn+1=y(xn)+hy′(xn)+h22!y′′(xn)+...+hpp!y(p)(xn)+O(hp+1)y_{n+1} = y(x_n) + hy'(x_n)+\frac{h^2}{2!}y''(x_n)+...+\frac{h^p}{p!}y^{(p)}(x_n)+O(h^{p+1})yn+1=y(xn)+hy′(xn)+2!h2y′′(xn)+...+p!hpy(p)(xn)+O(hp+1)
式中:
y′′(x)=fx′(x,y)+fy′(x,y)f(x,y)y′′′(x)=fxx+2f∗fxy+f∗fyy+y′′(x)fyy''(x) = f'_x(x,y)+f'_y(x,y)f(x,y) \\y'''(x) = f_{xx}+2f*f_{xy}+f*f_{yy}+y''(x)f_yy′′(x)=fx′(x,y)+fy′(x,y)f(x,y)y′′′(x)=fxx+2f∗fxy+f∗fyy+y′′(x)fy
龙格-库塔方法(Runge-Kutta)
通过多个采样点,加权近似精度最高的斜率。
即构造方程组,使得局部截断误差达到最小。
经典四阶龙格-库塔方法
{yn+1=yn+h6(k1+2k2+2k3+k4)k1=f(x,y)k2=f(xn+h2,yn+h2k1)k3=f(xn+h2,yn+h2k2)k4=f(xn+h,y+hk3)\begin{cases} y_{n+1}=y_n+\frac{h}{6}(k_1+2k_2+2k_3+k_4) \\ k_1=f(x,y) \\ k_2=f(x_n+\frac{h}{2},y_n+\frac{h}{2}k_1) \\ k_3=f(x_n+\frac{h}{2},y_n+\frac{h}{2}k_2) \\ k_4=f(x_n+h,y+hk_3) \end{cases}⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧yn+1=yn+6h(k1+2k2+2k3+k4)k1=f(x,y)k2=f(xn+2h,yn+2hk1)k3=f(xn+2h,yn+2hk2)k4=f(xn+h,y+hk3)
计算方法-常微分方程初值问题的数值解法相关推荐
- 计算方法(六):常微分方程初值问题的数值解法
文章目录 常微分方程初值问题的数值解法 欧拉(Euler)方法与改进欧拉方法 欧拉方法 欧拉公式的局部截断误差与精度分析 改进欧拉方法 龙格-库塔(Runge-Kutta)法 构造原理 经典龙格-库塔 ...
- 计算物理学(数值分析)上机实验答案5、常微分方程初值问题的数值解法
实验五.常微分方程初值问题的数值解法 常微分方程的求解问题在实践中经常遇到,因此研究常微分方程的数值解法就很有必要.欧拉方法是最简单.最基本的方法,利用差商代替微商,就可得到一系列欧拉公式.这些公 ...
- 二阶边值问题的数值解matlab,《二阶常微分方程边值问题的数值解法》-毕业论文.doc...
w 摘 要 本文主要研究二阶常微分方程边值问题的数值解法.对线性边值问题,我们总结了两类常用的数值方法,即打靶法和有限差分方法,对每种方法都列出了详细的计算步骤和Matlab程序代码,通过具体的算例对 ...
- matlab初值微分方程,常微分方程初值问题的MATLAB解法
大连圣亚海洋世界官网-2021年2月7日发(作者:转身之后还是你) 用 Matlab 求常微分方程 < br>(ODE) 的初值问题 (IVP) 本节考虑一阶常微分方程 u f ...
- 【计算方法】线性方程组的数值解法
题外话: 我上学期做了笔记的科目好像都炸了..像Java还有数据结构.计算方法也来做一个吧,反正迟早是要炸的 一.综述 线性方程组的解法可以分为两类:直接法和迭代法. 直接法通过有限四次运算得到精确解 ...
- 【数理知识】《数值分析》李庆扬老师-第9章-常微分方程初值问题数值解法
第8章 回到目录 无 第9章-常微分方程初值问题数值解法 9.1 引言 利普希茨 (Lipschitz) 条件 / 利普希茨常数 定理1 解的存在唯一性定理 定理2 解对初值依赖的敏感性 9.2 简单 ...
- 常微分方程初值问题数值解法[完整公式](Python)
目录 1.概述 (1)常微分方程初值问题数值解法 (2)解题步骤 (3)数值微分解法 (4)数值积分解法 2.所有知识点代码 3.结果---以三阶Runge-Kutta公式为例(其他的类似) 1.概述 ...
- 常微分方程数值解的c语言程序,常微分方程的数值解法 一阶常微分方程数值解的C语言编程实现.doc...
常微分方程的数值解法 一阶常微分方程数值解的C语言编程实现 导读:就爱阅读网友为您分享以下"一阶常微分方程数值解的C语言编程实现"资讯,希望对您有所帮助,感谢您对92的支持! 一阶 ...
- 欧拉折线法解常微分方程C语言,第五章:常微分方程数值解法第一节欧拉法
<第五章:常微分方程数值解法第一节欧拉法>由会员分享,可在线阅读,更多相关<第五章:常微分方程数值解法第一节欧拉法(32页珍藏版)>请在人人文库网上搜索. 1.第五章 常微分方 ...
- 一阶常微分方程的数值解法(二阶显式、隐式 Adams 公式及 Milne 方法)
一阶常微分方程的数值解法 这里我们介绍二阶显式.隐式 Adams 公式及 Milne 方法求解方程. 题目: 对初值问题 u ′ = u − t 2 , 0 ≤ t ≤ 1 , u ( 0 ) = 0 ...
最新文章
- 微服务化的数据库设计与读写分离
- Wxwinter.BPM类库更新
- python小白入门可以参看下
- 图像处理之基于阈值模糊
- 124第七章—逻辑卷简介及在图形界面进行管理配置
- 【centos6.5 安装 node.js + npm】
- Excel催化剂开源第37波-音视频文件元数据提取(分辨率,时长,采样率等)
- 学python可以做什么职业-python学完之后比较适合哪些职业工作呢?
- Python datetime 格式化字符串:strftime()
- Android Activity防劫持方案
- java定时任务 cron
- aplay amixer用法详解
- 中国钢铁物流行业发展策略分析及投资建议咨询报告2021-2027年
- Ubuntu下实现触摸板多指手势操作
- 键盘调节台式计算机声音,电脑键盘打字声音特效_键盘打字声音特效
- ZZULIOJ:1001植树问题
- 【机器学习】决策树(实战)
- 【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )
- 【JavaSe】面向对象篇(五) 三大特征之二继承
- 【性能测试】性能测试指标TPS(Transaction per Second)
热门文章
- 跟极限编程创始人Kent Beck学编程
- nofollow能否禁止爬虫爬取
- 【日语】日语一级句型强记
- 创意小发明:山寨码表.自行车码表的制作 程序原理图,设计图,源代码
- OpenGL ES 2.0 for Android教程(三):编译着色器并绘制到屏幕
- 图中最深的根 (25分)
- DataGear 制作Excel动态数据可视化图表
- (附源码)springboot教材订购系统的开发毕业设计081419
- Python爬虫:搜狗(微信,知乎)公众号内容
- [JZOJ3339]【NOI2013模拟】wyl8899和法法塔的游戏