注:以下来自《C++数值算法一书》,仅对章节内容做摘要,为的是给自己扫盲,不涉及算法。

与常微分方程组ODE有关的问题常常都可以化为一系列一阶微分方程的问题来研究。

可化为两个一阶微分方程

常微分方程组的解不完全由其方程决定,要确定方程的解还需要边界值条件。边界值条件分为初值问题和两点边值问题,本章主要讨论初值问题。

1. 龙格库塔法Runge-Kutta

通过类似于欧拉方法中的步长(每次都要算出右边的f值),把各个步长所提供的信息结合起来,算出有一定间隔的值解,然后利用所有信息和泰勒展开式匹配,以得到高阶近似解。

工程上常用的是四阶龙格库塔法。

2. Runge-Kutta法的自适应步长控制

自适应步长的控制是为了用尽可能少的计算量达到解的预定精确度。在一些不可靠的地方,应该用一些较小的步长,在一些平滑的无关紧要的地方,则用大一些的步长以加快计算过程。对于四阶Rungge-Kutta法,最直接的方法是步长数加倍,而对五阶方法,更有效的是Cash-Karp Runge-Kutta法。

3. 修正中点法

从点x到点x+H,通过每一步长为h的n=H/h子步来计算因变量y(x)向量。

4. Richardson外推法和Bulirsch-Stoer方法

Richardson外推法利用了一种很有效的思想,它是在如果步长比实际值小得多时,对能得到的计算值进行外推。特殊情况下,趋近于0的步长值进行外推是理想的目标,Bulirsch和Stoer首次把这种方法应用到常微分方程的积分中,因此外推法常被称为Bulirsch-Stoer方法。

在两种情况下,用自适应步长的Runge-Kutta法会有更好的效果,一是方程右边的函数值是通过查找表或插值来定义的;或者微分方程的积分区间中有奇异点。

除了上面两个缺点外,Bulirsch-Stoer方法是用最小的计算达到常微分方程求解高精度的一个目前来说最好的方法。一个大的间隔H由逐渐细分的子步序列来组成。其结果是对设想的无穷细分的子步进行外推,积分法采用修正中点法,外推法是采用有理函数或多项式的外推法。

5. 刚性方程组

刚性问题通常出现在自变量的取值有两个或多个不同尺度,而因变量正随此而变化的问题中。刚性方程需要在解的取值较小的度量范围内变化步长,以保持积分的稳定性,尽管积分精度可以允许一个比较大的步长。

对于,c>0是一个常数,使用显式(向前)欧拉公式,得到:   (书上错了,向前欧拉是显式方法,向后欧拉是隐式方法)

在h>2/c的情况下,就无法得到收敛的y值。遇到这样的问题,解决的方法便是使用隐式差分,使用向后欧拉格式:

当h->∞时,仍有yn+1->0。

但并非所有的方程都是常系数的线性方程,我们必须每步进行迭代处理,用线性化解决隐式解法的问题,称为半隐式解法。这种解法通常是稳定的。

目前刚性方程组三种重要的高阶算法有:通用的Runge-Kutta方法,其中最有用的是Rosenbrock方法。首次用这个思想进行实践的是Kaps等,因此又被称为Kaps-Rentrop方法;通用的Bulirsch-Stoer方法,尤其是Bader和Deuflhard提出的半隐式外推方法;预测校正法,其主要部分是Gear后向差分法的继续。

6. 多步法、多值法和预测-校正法

这一章因为之前在做服装模拟,关于怎么解ODE,试了一些方法,显示的、半隐式的,龙格库塔、共轭梯度、Verlet 积分之类的。

其实这些方法都不会出现在这本书的同一章了,我至今仍有些混乱,不知道什么样的问题该用什么方法。很多方法都明白了,但看书时仍觉得很吃力。我觉得这本书的语言并不够明了,总试图绕着圈子高深地去解释一种方法,有时候WIKI能得到更好的答案。而且也有些错误,比如我看到隐式的向前欧拉就一阵混乱。还是做一个总结,到要用的时候,就去google之吧。

本文原创,转载请注明出处

http://www.cnblogs.com/luluathena/

转载于:https://www.cnblogs.com/luluathena/archive/2010/12/24/1915969.html

[摘记]数值方法12——常微分方程组的积分相关推荐

  1. 阿当姆斯校正程序代码MATLAB,全区间积分的阿当姆斯预报校正法(常微分方程组的求解)...

    /* 代码作者:不详 代码整理者:设计天下 MySDN网站 算法天下工作室 功能:全区间积分的阿当姆斯预报校正法(常微分方程组的求解) */ #include "stdio.h" ...

  2. fick第二定律matlab求解,(最新整理)实验二MATLAB数值计算常微分方程(组)的求解

    <(最新整理)实验二MATLAB数值计算常微分方程(组)的求解>由会员分享,可在线阅读,更多相关<(最新整理)实验二MATLAB数值计算常微分方程(组)的求解(19页珍藏版)> ...

  3. Matlab求常微分方程组的数值解

    上篇博客介绍了Matlab求解常微分方程组解析解的方法:博客地址 微分方程组复杂时,无法求出解析解时,就需要求其数值解,这里来介绍. 以下内容按照Matlab官方文档提供的方程来展开(提议多看官方文档 ...

  4. 常微分方程与常微分方程组的特征值解法总结笔记

    来源链接:https://www.docin.com/p-2690426712.html 文章目录 常微分方程特征值解法 常微分方程组特征值解法 常微分方程特征值解法 设 nnn 次常微分方程为 x( ...

  5. MATLAB中lsqnonlin多元,Matlab中lsqnonlin对常微分方程组进行参数拟合以后 怎样用nlparci查看参数的置信区间...

    我用fminsearch 进行了常微分方程组参数优化 现想知道参数置信区间 所以改用lsqnonlin进行单参数拟合 初值是我已经得到的优化结果 但是拟合显示local minimum 而且ci = ...

  6. 非线性常微分方程组 matlab,matlab常微分方程和常微分方程组求解.doc

    常微分方程和常微分方程组的求解 ? 一.实验目的: 熟悉Matlab软件中关于求解常微分方程和常微分方程组的各种命令,掌握利用Matlab软件进行常微分方程和常微分方程组的求解. ? 二.相关知识 在 ...

  7. python解常微分方程龙格库_求解常微分方程组初值问题的龙格库塔法分析及其C代码...

    求解常微分方程组初值问题的 龙格库塔法分析及其 C 代码 1 .概 述 由高等数学的知识可知,一些特殊类型的常微分方程(组)能够求出给定初 始值的解析解, 而在科学与工程问题中遇到的常微分方程 (组) ...

  8. 17.12.2B组总结

    17.12.2B组总结 T1 比较奇怪的一道题,考试时打了个三循的两维DP,只勉强跑过了50分(数据太水). 然而事实告诉我们,我的第一维,完全可以省略,于是我又过了60分. 但是我猛然发现,正解居然 ...

  9. 常微分方程组的四阶RungeKutta龙格库塔法matlab实现

    常微分方程组的四阶Runge-Kutta方法 文件:n459.com/file/25127180-476086572

最新文章

  1. PyTorch 1.3发布:能在移动端部署,支持Colab云TPU,阿里云上也能用
  2. 最强大的GNN出现了!
  3. Distinct Subsequences
  4. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化
  5. 前端学习(3277):promise的使用
  6. Webpack基础之输出
  7. 农历算法-ASP.NET(C#)(转)
  8. 法学生民法方面的论文选题,有什么推荐吗?
  9. c语言汉字属于什么类型_C语言为什么需要定义数据类型
  10. isalpha、isalnum、islower、isupper等字符函数
  11. nuc7 android tv,NUC7PJYH HDMI在特定显示屏上出现问题
  12. insert overwrite table 后面为什么不能用select *,怎么解决这个bug
  13. 2019年全国大学生数学建模E题
  14. 组装一台稳定的计算机
  15. ARANGODB INSTALL
  16. Matlab将数据写入文件
  17. 数字转字母python_将一串数字转换成字母python
  18. 群晖rsync同步详解_FreeNas中使用rsync同步文件
  19. 基于QT的局域网文件传输系统
  20. Ubuntu18.04安装Cmake(最新最详细亲测)

热门文章

  1. opencv Shi-Tomasi角检测
  2. 数据结构之基于Java的链接列表实现
  3. WSUS补丁更新相关命令及参数
  4. 产品经理学习总结(2)——实用的BRD产品文档模板参考
  5. Java基础学习总结(111)——Java虚拟机JVM总结大全
  6. eclipse如何运行html文件,eclipse中applet嵌入html文件
  7. 默认栅格大小为多少_用于创建空栅格的ST_MakeEmptyRaster函数
  8. java client和servers_“java -server”和“java -client”之间的真正区别?
  9. tomcat日志中出现乱码
  10. jquery中prop()方法和attr()方法的区别