adams预测-校正系统

这个程序是大学三年级学习《数值分析》的时候写的程序,计算机以数学作为基础,很好的了解数有助于我们学习程序设计。

#include
#include
#include
#include
#define M 80
double f(double,double);
//void runge4(double,double,double,double,double);
void runge4(double a,double b,double rk[],double h,double x[])
{
    int k,max;
 double k1,k2,k3,k4;
 max=(int)((b-a)/h);
 x[0]=a;
 for(k=1;k<=max;k++)//runge-kutta
 {
        x[k]=x[k-1]+h;
  k1=f(x[k-1],rk[k-1]);
  k2=f((x[k-1]+h*0.5),(rk[k-1]+h*0.5*k1));
  k3=f((x[k-1]+h*0.5),(rk[k-1]+h*0.5*k2));
  k4=f((x[k-1]+h),(rk[k-1]+h*k3));
  rk[k]=rk[k-1]+h*(k1+2*k2+2*k3+k4)/6;
 }
}
void main()
{
 double x[M]={0.0},a,b,h,y[M]={0.0},k[5],y0;
 int n,i,m;
 cout<<"输入y(0):";    
 cin>>y[0];
 cout<<"输入h:";
 cin>>h;
 cout<<"输入a:";
 cin>>a;
 cout<<"输入b:";
 cin>>b;
 x[0]=a;
 n=(int)((b-a)/h);
 runge4(a,a+3*h,y,h,x);
 for(i=0;i<4;i++)
 {
  k[i]=f(x[i],y[i]);
 }
 for(i=3;i {
  y0=y[i]+h/24*(55*k[3]-59*k[2]+37*k[1]-9*k[0]);
  x[i+1]=x[i]+h;
  k[4]=f(x[i+1],y0);
  y[i+1]=y[i]+h/24*(9*k[4]+19*k[3]-5*k[2]+k[1]);
  for(m=3;m>0;m--)
   k[m-1]=k[m];
  k[3]=f(x[i+1],y[i+1]);
 }
 cout<<"运行结果是:"< for(i=0;i<=n;i++)
 {
  printf("x[%d]=%0.3lf/t",i,x[i]);
  printf("y[%d]=%0.8lf/n",i,y[i]);
 }
}
////////////////////////////////////////////////
double f(double x,double y)
{
 return (1-y);
}
/////////////////////////////////////////////////

你可能感兴趣的:(