Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- //dy/dt = -y(t)+ e^-t * cos(t)
- double h, fx, fy;
- double euler(double t0, double y0, double h, double(*f)(double , double ));
- double f(double fx, double fy);
- double der(double t, double y);
- double sol(double t, double y);
- double rk(double x0, double y0, double h, double(*f)(double , double ));
- double error(double t0, double y0, double(*f)(double, double), double(*g)(double, double, double , double));
- void main()
- {
- // FILE *fi;
- int num;
- double t0 = 0;
- double y0 = 0;
- printf("state number of steps = ");
- scanf("%d", &num);
- printf("\nand their size =");
- scanf("%lf", &h);
- // fi = fopen("graph.xls", "w");
- for(int i = 0; i < num; i++)
- {
- y0 = rk(t0, y0, h, der);
- t0 += h;
- printf("y %d = %lf t %d = %lf",i,y0,i,t0);
- printf("error = %lf \n",fabs((sol(t0 + h, y0)-rk(t0, y0, h, der))/sol(t0 + h, y0)));
- // fprintf(*fi,"%lf %lf %lf \n", t0, y0, fabs((sol(t0, y0)-rk(t0, y0, h, der))/rk(t0, y0, h, der)));
- }
- t0 = 0;
- for(int i = 0; i < num; i++)
- {
- y0 = euler(t0, y0, h, der);
- t0 += h;
- printf("y %d = %lf t %d = %lf ",i,y0,i,t0);
- printf("error = %lf \n",fabs((sol(t0 +h, y0)-euler(t0, y0, h, der))/sol(t0 + h, y0)));
- }
- //tell it to draw graph in fi
- // fclose(fi);
- }
- double euler(double t0, double y0, double h, double(*f)(double , double ))
- {
- return y0 + h*f(t0, y0);
- }
- double der(double t, double y)
- {
- return -1*y + cos(t)* exp(-1*t);
- }
- double sol(double t, double y)
- {
- return sin(t)* exp(-1*t);
- }
- double rk(double t0, double y0, double h, double(*f)(double , double))
- {
- double q1 = h * f(t0, y0);
- double q2 = h * f(t0 + h/2, y0 + q1/2);
- double q3 = h * f(t0 + h/2, y0 + q2/2);
- double q4 = h * f(t0 +h, y0 + q3);
- return y0 + (q1 + q2 + q3 + q4)/6;
- }
- /*
- double error(double t0, double y0, double(*f)(double, double), double(*g)(double, double, double , double(*asd)(double t0, double y0))
- {
- return abs((f(t0, y0)- g(t0, y0, h, asd(t0, y0))/f(t0, y0));
- }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement