各位学长,以下是龙格库塔法求解微分方程的程序。请教各位学长的问题是:若现在我想把函数z=-0.08*u-sin(q)+2.2*sin(s);中加一个变量w,它的范围是[0,10],即函数变为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;
}