声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5692|回复: 4

[C/C++] 龙格库塔求解微分方程数值解

[复制链接]
发表于 2005-7-20 08:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
工程中很多的地方用到龙格库塔求解微分方程的数值解,
龙格库塔是很重要的一种方法,尤其是四阶的,精确度相当的高。

此代码只是演示求一个微分方程
/*y'=y-2x/y,x∈[0,0.6]
/*y(0)=1
的解,要求解其它的微分方程,可以自己定义借口函数,退换程序里面的函数:

float f(float , float)即可;

  1. /*
  2. /*编程者:刘艮平
  3. /*完成日期:2004.5.29
  4. /*e.g:y'=y-2x/y,x∈[0,0.6]
  5. /*  y(0)=1
  6. /*使用经典四阶龙格-库塔算法进行高精度求解 
  7. /* y(i+1)=yi+( K1+ 2*K2 +2*K3+ K4)/6
  8. /* K1=h*f(xi,yi)
  9. /* K2=h*f(xi+h/2,yi+K1/2)
  10. /* K3=h*f(xi+h/2,yi+K2/2)
  11. /* K4=h*f(xi+h,yi+K3)
  12. */
  13. #include <stdio.h>
  14. #include <math.h>

  15. float f(float den,float p0)  //要求解的微分方程的右部的函数 e.g: y-2x/y
  16. {
  17.         float rus;
  18. //   den=w/(W0+sl);
  19. //   rus=k*A*f/Wp*sqrt(RTp)-(k-1)*.....
  20.         rus=p0-2*den/p0;
  21.         return(rus);
  22. }

  23. //float fden()
  24. //{

  25. //}


  26. void main()
  27. {
  28.         float x0; //范围上限
  29.         int x1;   //范围下限
  30.         float h;  //步长
  31.         int n;    //计算出的点的个数
  32.         float k1,k2,k3,k4;
  33.     float y[3]; //用于存放计算出的常微分方程数值解
  34.         int i=0;
  35.         int j;

  36. //以下为函数的接口
  37.         printf("intput x0:");
  38.     scanf("%f",&x0);

  39.         printf("input x1:");
  40.         scanf("%f",&x1);

  41.     printf("input y[0]:");
  42.     scanf("%f",&y[0]);

  43.         printf("input h:");
  44.     scanf("%f",&h);

  45. // 以下为核心程序
  46.     n=((x1-x0)/h);
  47.         n=3;
  48.        
  49.     for(j=0;j<n;j++)
  50.         {   

  51.       k1=h*f(x0,y[i]); //求K1
  52.       k2=h*f((x0+h/2),(y[i]+k1/2)); //求K2
  53.       k3=h*f((x0+h/2),(y[i]+k2/2)); //求K3
  54.       k4=h*f((x0+h),(y[i]+k3)); //求K4

  55.           y[i+1]=y[i]+((k1+2*k2+2*k3+k4)/6); //求yi+1
  56.           x0+=float(0.2);
  57.       printf("y[%f]=%f\n",x0,y[i+1]);
  58.       ++i;
  59.          
  60.         }

  61. }
复制代码

[ 本帖最后由 风花雪月 于 2006-10-11 15:45 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-6-25 00:51 | 显示全部楼层
我想学偏微分方程的数值解法
发表于 2006-8-11 20:12 | 显示全部楼层
谢谢~等我仔细看看有没有关于非线性微分方程组的问题!
发表于 2006-10-11 15:20 | 显示全部楼层
楼主有没有关于RK解微分方程组的程序啊
发表于 2006-10-11 15:48 | 显示全部楼层
原帖由 yut_o 于 2006-10-11 15:20 发表
楼主有没有关于RK解微分方程组的程序啊


这个就是rk法解微分方程的C语言程序
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-11 21:13 , Processed in 0.059389 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表