Guest User

Untitled

a guest
Jul 15th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include "rkf45.c"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. int f(int n,double x, double y[],double dydx[])
  8. {
  9.     dydx[0]=-52*y[0]-100*y[1]+exp(-x);
  10.     dydx[1]=y[0]+sin(x);
  11.     return 0;
  12. }
  13.  
  14. double *mf(double x,double y[])
  15. {  
  16.     double *dydx=new double[2];
  17.     dydx[0]=-52*y[0]-100*y[1]+exp(-x);
  18.     dydx[1]=y[0]+sin(x);
  19.     return dydx;
  20. }
  21.  
  22. int main()
  23. {
  24.     double  h, relerr, abserr, x1, x2;
  25.     int     n=2, flag=1, nfe, maxfe, fail;
  26.     double  y[2], yp[2];
  27.  
  28.     maxfe  = 5000;
  29.     relerr = 0.0001;
  30.     abserr = 0.0001;
  31.     y[0]=1;
  32.     y[1]=0;
  33.     x1=0;
  34.     x2=2;
  35.  
  36.     rkfinit(n,&fail);
  37.     cout<< "x1  y[0]            y[1]\n----------------------------------------------------\n";
  38.     for(int step=0; step<20; step++)
  39.     {
  40.         x1=step*0.1;
  41.         x2=x1+0.1;
  42.     rkf45(f,n,y,yp,&x1,x2,&relerr,abserr,&h,&nfe,maxfe,&flag);
  43.     cout<< x1<<"    "<<y[0]<<"      "<<y[1]<<'\n';
  44.     }
  45.  
  46.  
  47.     rkfend();
  48.  
  49.     double zn025[2],
  50.         zn[2],
  51.         zn1[2]={1,0},
  52.         tn,
  53.         tn025,
  54.         t0=0,
  55.         mih=0.001,//в б поменять
  56.         mph=0.1;
  57.     cout<< "\nx1    y[0]            y[1]\n----------------------------------------------------\n";
  58.     for(int step=0; step<(2.0/mph); step++)
  59.     {
  60.         x1=step*mph;
  61.         tn=t0+step*mph;
  62.         tn025=t0+(step+0.25)*mph;
  63.  
  64.         for(int j=0; j<100;j++)//в б поменять
  65.         {
  66.             zn[0]=zn1[0];
  67.             zn[1]=zn1[1];
  68.             for(int i=0; i<n;i++)
  69.             {
  70.                 zn025[i]=zn[i]+mih*0.25*mf(tn,zn)[i];
  71.             }
  72.             for(int i=0; i<n;i++)
  73.             {
  74.                 zn1[i]=zn[i]+mih*(-mf(tn,zn)[i]+2*mf(tn025,zn025)[i]);
  75.             }
  76.         }
  77.         cout<< x1+mph<<"    "<<zn[0]<<"     "<<zn[1]<<'\n';
  78.     }
  79.  
  80.  
  81.  
  82.  
  83.  
  84.     return 0;
  85. }
Add Comment
Please, Sign In to add comment