首页 > 用户发贴区 > 编程问题提问区 > 请各位学长帮忙看看怎么写这个程序?
2007
10-28

请各位学长帮忙看看怎么写这个程序?


各位学长,以下是龙格库塔法求解微分方程的程序!请教各位学长的问题是:若现在我想把函数z=-0.08*u-sin(q)+2.2*sin(s);中加一个变量w,它的范围是[010],即函数变为z=-0.08*u-sin(q)+2.2*sin(w*s);要求函数每被调用10000次,w的值增加0.01,也就是说主程序中执行完10000次的for循环后w增加0.01,然后再执行for循环,这样运算直到w达到10为止,这个程序应该怎样改呢?请各位学长指点!谢谢!


 


/*龙格库塔法求解微分方程*/


#include “stdio.h”


#include “math.h”


double f(double,double,double);


main()


{


  double t=0.0,y1,y2,h=0.02,w10=1.0,w20=1.0,k11,k12,k21,k22,k31,k32,k41,k42;


  int n;


  


  for (n=0;n<=10000;n=n+1)                  /*套用公式解微分方程*/


 { 


    t=t+h;


    k11=h*w20;


    k12=h*f(t,w10,w20);


    k21=h*(w20+0.5*k12);


    k22=h*f(t+0.5*h,w10+0.5*k11,w20+0.5*k12);


    k31=h*(w20+0.5*k22);


    k32=h*f(t+0.5*h,w10+0.5*k21,w20+0.5*k22);


    k41=h*(w20+k32);


    k42=h*f(t+h,w10+k31,w20+k32);


    w10=w10+1.0/6.0*(k11+2.0*k21+2.0*k31+k41);


    w20=w20+1.0/6.0*(k12+2.0*k22+2.0*k32+k42);


    if(n>5000)


    {


    printf(“%lf\t%lf\t%lf\t\n”,t,w10,w20);


    } 


   }


 }


double f(double s,double q,double u)          /*函数的定义*/


{


double z;


z=-0.08*u-sin(q)+2.2*sin(s);


return z;


}


 


 


 


留下一个回复