常微分方程的数值解法 一阶常微分方程数值解的C语言编程实现.doc

常微分方程的数值解法 一阶常微分方程数值解的C语言编程实现.doc

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
常微分方程的数值解法 一阶常微分方程数值解的C语言编程实现 导读:就爱阅读网友为您分享以下“一阶常微分方程数值解的C语言编程实现”资讯,希望对您有所帮助,感谢您对92的支持! 一阶常微分方程数值解的C语言编程实现 现实问题与分析学科自身的发展使得微积分及其涉及领域内出现了寻求数值解的诸多问题在其他数学领域亦是如此。这是由于多种原因造成的比如现实问题中函数表达式往往并不存在即使可以拟合也并没有得到表达式的必要且表达式的讨论可能出现较大误差。再比如很多复杂函数或函数约束条件很难使用甚至不能使用一般的分析工具像微分方程存在不可积、不可解的大量实例。所以数值解的相关理论不断产生、完善。特别是现代以来计算机的迅速发展为解决数值解问题提供了算法的计算机程序实现可能并提供了更多的求解思路。MathematicaMATLABMaple是最常用的数学软件对应于Mathematica语言MATLAB语言Maple语言。当然一般使用C语言也可以比较便捷地解决很多分析学科问题的数值解。举一元函数微积分学一些熟知的数值解例子数值导数常见有图解微分法、差商公式、插值多项式、拉格朗日公式拉格朗日插值公式得来、马尔科夫公式牛顿插值公式得来、等距公式、三次样条函数等等数值积分有内插求积公式最为基础的有梯形法、辛普森公式抛物线法、高斯型求积公式等等。这里考察一阶导数已解出的一阶常微分方程的初值问题的数值解。问题给出常微分方程数值解问题中一阶常微分方程与一阶常微分方程组一阶导数均解出形式的数值解法是最基础的也是非常常用的。一般数值解法有欧拉方法及改进的欧拉方法、龙格-库塔方法、阿达姆斯方法。现给出前两种方法它们都是单步法而阿达姆斯法是线性多步法各有优缺点此外计算机上常会加以使用浮动步长法如自动变步长计算方法。单步法的通用表达式是拉格朗日中值定理的形式差分代替微分是一种重要的近似思想反过来用微分代替差分亦重要欧拉方法改进的欧拉方法预报校正法龙格-库塔方法二阶龙格-库塔方法四阶龙格-库塔方法容易看出欧拉方法及改进的欧拉方法都是特殊的龙格-库塔方法。对于龙格-库塔公式常数的确立是通过单、双变量泰勒级数展式推理得到的不再叙述。另外微分方程数值解的相容性条件、收敛性问题、精度判断、误差分析等内容也不叙述。只说明龙格-库塔方法通常使用上述的二阶、四阶形式。下面给出一例这是变量可分离方程容易积分得到现写出该一阶常微分方程数值解法的一个C语言程序输出结果是分别使用欧拉方法、预报校正法、二阶龙格-库塔法、四阶龙格-库塔法得到的函数近似值组成的表格打印。程序如下 include stdio.h double fdouble xdouble y return y1-yy void main int ni float xyeyeuyeulyrk11k21yruk1k2k3k4x0y0h printfn请输入初值x scanffx0 printfy scanffy0 printf步长h scanffh printf总步数n scanfdn xx0 yeyeuyryruy0 printfn7s欧拉方法改进的欧拉方法二阶龙格-库塔方法四阶龙格-库塔方法nx fori1ini yehfxye yeulyeuhfxyeu yeuh/2fxyeufxyeul k11fxyr k21fxh/2yrh/2k11 yrhk21 k1fxyru k2fxh/2yruh/2k1 k3fxh/2yruh/2k2 k4fxhyruhk3 yruh/6k12k22k3k4 xh printf8.1f13.4f13.4f17.4f19.4fnxyeyeuyryru printfnn 执行结果如下这个程序涉及语句非常简单而且具有很强的可移植性即改变第四行return语句规定的被调函数返回值代以其它一阶常微分方程已解出的导数表达式注意相关变量的数据类型声明以及特殊常量的定义此外使用数学函数还需调用头文件math.h此程序依旧可以执行上述四种数值解法解决代换的方程的函数值求近似解问题。要说明的是这里步长应精确到十分位选取如果要进一步精确可在倒数第四行8.1f处将小数位数指定由1变成所需位数但不可过大而扰乱表格排列。本例属于基本类型的一阶微分方程直接积分已经得到结果。将精确解编入程序编写打印数值解误差的程序。突出改变重点地列出新程序语句 include math.h include stdio.h double fdouble xdouble y return y1-yy double Ydouble x return sqrt4exp2x/4exp2x-3 void main float y … xh yYx printf8.2f13.4f13.4f17.4f19.4fnxfabsye-yfabsyeu

文档评论(0)

raojun00006 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档