⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adams.txt

📁 亚当姆斯预报_校正系统,解决初值问题
💻 TXT
字号:
亚当姆斯预报_校正系统解一阶微分的初值问题

#include <iostream>

using namespace std;

void main()

{

 float x0,y0,h,**result;

 int N;

 float f(float x,float y);

 void adams(float (*f)(float,float),float,float,int,float,float **result);

 cout<<"输入初始点:";

 cin>>x0>>y0;

 cout<<"输入解的个数和步长:";

 cin>>N>>h;

 result=new float *[N];

 for(int i=0;i<N;i++)

  result[i]=new float[2];

 adams(f,x0,y0,N,h,result);

 cout<<"运算结果是:"<<endl; 

 for(i=0;i<N;i++)

  cout<<result[i][0]<<"     "<<result[i][1]<<endl;

}

void adams(float (*f)(float,float),float x0,float y0,int N,float h,float **result) 

{

 float k1,k2,k3,k4;

 float yp,yp1;

 result[0][0]=x0;result[0][1]=y0;

 for(int n=1;n<N && n<4;x0+=h,y0=result[n++][1])  //经典格式求前三点

 {

  result[n][0]=x0+h;

  k1=f(x0,y0);

  k2=f(x0+h/2,y0+h*k1/2);

  k3=f(x0+h/2,y0+h*k2/2);

  k4=f(x0+h,y0+h*k3);

  result[n][1]=y0+h*(k1+2*k2+2*k3+k4)/6;

 }

 for(;n<N;x0+=h,y0=result[n++][1])

 {

  result[n][0]=x0+h;

  yp=result[n-1][1]+h*(55*f(result[n-1][0],result[n-1][1])-59*f(result[n-2][0],

     result[n-2][1])+37*f(result[n-3][0],result[n-3][1])-9*f(result[n-4][0],

     result[n-4][1]))/24;

  yp1=f(result[n][0],yp);

  result[n][1]=result[n-1][1]+h*(9*yp1+19*f(result[n-1][0],result[n-1][1])-5*f(

      result[n-2][0],result[n-2][1])+f(result[n-3][0],result[n-3][1]))/24;

 }

}

float f(float x,float y)   //当初始值满足y=x*x时,微分方程解为y=x*x;

{

 return 2*x+y-x*x;

}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -