各位学长,以下是龙格库塔法求解微分方程的程序!请教各位学长的问题是:若现在我想把函数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; }
>> 本文固定链接: http://www.vcgood.com/archives/1892