rodan0818

Euler and rk4

Jul 10th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.94 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. float dydx(float x, float y)
  4. {
  5.     return((x - y)/(x+y));
  6. }
  7. int main()
  8. {
  9.  
  10.     float k1, k2, k3, k4, k5;
  11.     float x0 = 0, y0 = 1, x = 1.4, h = 0.2,y;
  12.    
  13.     int n; int ch;
  14.     n = (int)((x - x0) / h);
  15.     y = y0;
  16.     while(1)
  17.     {
  18.     printf("\n\n1. Euler's method\n2. RK4\n3. Exit\n");
  19.     scanf("%d",&ch);
  20.     switch(ch)
  21.     {
  22.     case 1:
  23.         x0 = 0, y0 = 1, x = 1.4, h = 0.2;
  24.         y=y0;
  25.         printf("\nx\ty");
  26.         for(int i=1;i<=n;i++)
  27.         {
  28.             y=y+h*dydx(x0,y);
  29.             x0=x0+h;
  30.             printf("\n%.3f\t%.3f",x0,y);
  31.         }
  32.     break;
  33.     case 2:
  34.         x0 = 0, y0 = 1, x = 1.4, h = 0.2;
  35.    
  36.         y=y0;
  37.     printf("\nx\ty");
  38.     for (int i=1; i<=n; i++)
  39.     {  
  40.         k1 = h*dydx(x0, y);
  41.         k2 = h*dydx(x0 + 0.5*h, y + 0.5*k1);
  42.         k3 = h*dydx(x0 + 0.5*h, y + 0.5*k2);
  43.         k4 = h*dydx(x0 + h, y + k3);
  44.         y = y + (1.0/6.0)*(k1 + 2*k2 + 2*k3 + k4);;
  45.         x0 = x0 + h;
  46.         printf("\n%.3f\t%.3f",x0,y);
  47.     }
  48.     break;
  49.     case 3:
  50.         exit(0);
  51. }
  52. }
  53. return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment