Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <math.h>
- #define N 50
- double f (double a, double b)
- {
- return a+b;
- }
- void EulerImb (double x0, double y0, double h, int n, double y[])
- {
- double x[N];
- int i;
- printf("\n Euler imbunatatit:") ;
- y[0]=y0;
- x[0]=x0;
- for (i=1;i<=n;i++)
- {
- x[i]=x[0]+i*h;
- 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])));
- printf("\n calculat: %lf, verificare: %lf", y[i], 2*exp(x[i])-x[i]-1);
- }
- getch() ;
- }
- void EulerMod (double x0, double y0, double h, int n, double y[])
- {
- double x[N];
- int i;
- printf("\n Euler modificat:") ;
- y[0]=y0;
- x[0]=x0;
- for (i=1;i<=n;i++)
- {
- x[i]=x[i-1]+h;
- 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])));
- printf("\n calculat: %lf, verificare: %lf", y[i], 2*exp(x[i])-x[i]-1);
- }
- getch() ;
- }
- void RungeKutta4(double x0, double y0, double h, int n, double y[])
- {
- double x[N];
- int i;
- printf("\n RK 4:") ;
- x[0]=x0;
- y[0]=y0;
- for(i=1;i<=n;i++)
- {
- x[i]=x0+i*h;
- double k1=f(x[i-1],y[i-1]);
- double k2=f(x[i-1]+0.5*h,y[i]+0.5*h*k1);
- double k3=f(x[i-1]+0.5*h,y[i]+0.5*h*k2);
- double k4=f(x[i],y[i]+h*k3);
- y[i]=y[i-1]+(h/6)*(k1+2*k2+2*k3+k4);
- printf("\n calculat: %lf, verificare: %lf", y[i], 2*exp(x[i])-x[i]-1);
- }
- getch() ;
- }
- int main ()
- {
- static double sol[N];
- double x0,y0,pas;
- int n,i;
- printf("Numarul de puncte in care se calculeaza solutia : ");
- scanf("%d",&n);
- printf("Abscisa punctului prin care trece graficul : (este 0, pt. verificare)");
- scanf("%lf",&x0);
- printf("Ordonata punctului prin care trece graficul : (este 1, pt. verificare)");
- scanf("%lf",&y0);
- printf("Pasul intre abscise : ");
- scanf("%lf",&pas);
- EulerImb (x0,y0,pas,n,sol);
- EulerMod (x0,y0,pas,n,sol);
- RungeKutta4(x0,y0,pas,n,sol);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement