Advertisement
Magentax

ec dif Toate

Jan 19th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4. #define N 50
  5.  
  6. double f (double a, double b)
  7. {
  8.     return a+b;
  9. }
  10.  
  11. void EulerImb (double x0, double y0, double h, int n, double y[])
  12. {
  13.     double x[N];
  14.     int i;
  15.  
  16.     printf("\n Euler imbunatatit:") ;
  17.     y[0]=y0;
  18.     x[0]=x0;
  19.     for (i=1;i<=n;i++)
  20.     {
  21.         x[i]=x[0]+i*h;
  22.         y[i]=y[i-1]+0.5*h*(f(x[i-1],y[i-1])+f(x[i],y[i-1]+h*f(x[i-1],y[i-1])));
  23.         printf("\n calculat: %lf, verificare: %lf", y[i], 2*exp(x[i])-x[i]-1);
  24.     }
  25.     getch() ;
  26. }
  27.  
  28. void EulerMod (double x0, double y0, double h, int n, double y[])
  29. {
  30.     double x[N];
  31.     int i;
  32.  
  33.     printf("\n Euler modificat:") ;
  34.     y[0]=y0;
  35.     x[0]=x0;
  36.     for (i=1;i<=n;i++)
  37.     {
  38.         x[i]=x[i-1]+h;
  39.         y[i]=y[i-1]+h*(f(x[i-1]+0.5*h,y[i-1]+0.5*h*f(x[i-1],y[i-1])));
  40.         printf("\n calculat: %lf, verificare: %lf", y[i], 2*exp(x[i])-x[i]-1);
  41.     }
  42.     getch() ;
  43. }
  44.  
  45. void RungeKutta4(double x0, double y0, double h, int n, double y[])
  46. {
  47.     double x[N];
  48.     int i;
  49.  
  50.     printf("\n RK 4:") ;
  51.     x[0]=x0;
  52.     y[0]=y0;
  53.     for(i=1;i<=n;i++)
  54.     {
  55.         x[i]=x0+i*h;
  56.         double k1=f(x[i-1],y[i-1]);
  57.         double k2=f(x[i-1]+0.5*h,y[i]+0.5*h*k1);
  58.         double k3=f(x[i-1]+0.5*h,y[i]+0.5*h*k2);
  59.         double k4=f(x[i],y[i]+h*k3);
  60.         y[i]=y[i-1]+(h/6)*(k1+2*k2+2*k3+k4);
  61.         printf("\n calculat: %lf, verificare: %lf", y[i], 2*exp(x[i])-x[i]-1);
  62.     }
  63.     getch() ;
  64. }
  65.  
  66.  
  67. int main ()
  68. {
  69.   static double sol[N];
  70.   double x0,y0,pas;
  71.   int n,i;
  72.  
  73.   printf("Numarul de puncte in care se calculeaza solutia : ");
  74.   scanf("%d",&n);
  75.   printf("Abscisa punctului prin care trece graficul : (este 0, pt. verificare)");
  76.   scanf("%lf",&x0);
  77.   printf("Ordonata punctului prin care trece graficul : (este 1, pt. verificare)");
  78.   scanf("%lf",&y0);
  79.   printf("Pasul intre abscise : ");
  80.   scanf("%lf",&pas);
  81.  
  82.   EulerImb (x0,y0,pas,n,sol);
  83.   EulerMod (x0,y0,pas,n,sol);
  84.   RungeKutta4(x0,y0,pas,n,sol);
  85.  
  86.   return 1;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement