一阶微分方程组c语言编程,一阶常微分方程数值解的C语言编程实现

一阶常微分方程数值解的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-yfabsyr-yfabsyru-y 执行如下可以看出四阶龙格-库塔公式整体误差始终最小它有四阶精度。而有二阶精度的改进的欧拉方法、二阶龙格-库塔法误差相似一阶精度的欧拉方法误差较大但也可大致估计函数性态。为了综合函数近似

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值