freesky

task_sem3_4.10

Oct 10th, 2013
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "ode.h"
  4.  
  5. #define ALPHA   0.01
  6. #define TOL     1e-6
  7. #define REL     1
  8. #define DX      0.1
  9.  
  10. void f(double x, double y[], double yp[]) {
  11.     yp[0] = 2.0 * y[0] - ALPHA * y[0] * y[1];
  12.     yp[1] = -y[1] + ALPHA * y[0] * y[1];
  13. }
  14.  
  15. int main(int argc, char *argv[]) {
  16.     double y[2]; // y[0] - r; y[1] - f
  17.     double x;
  18.     double step = 1e-3;
  19.     FILE *fdat;
  20.    
  21.     // first situation
  22.     fdat = fopen("sit1.dat", "w");
  23.     x = 0.0;
  24.     y[0] = 10.0;
  25.     y[1] = 30.0;
  26.     fprintf(fdat, "%.1lf\t%.10e\t%.10e\n", 0.0, y[0], y[1]);
  27.     //printf("x = %.1lf\tr = %.10e\tf = %.10e\n", 0.0, y[0], y[1]);
  28.    
  29.     while (x <= 20.0) {
  30.         autoint(2, &x, x + DX, y, &step, TOL, REL, f);
  31.         fprintf(fdat, "%.1lf\t%.10e\t%.10e\n", x, y[0], y[1]);
  32.         //printf("x = %.1lf\tr = %.10e\tf = %.10e\n", x, y[0], y[1]);
  33.     }
  34.     fclose(fdat);
  35.    
  36.     // second situation
  37.     fdat = fopen("sit2.dat", "w");
  38.     x = 0.0;
  39.     y[0] = 30.0;
  40.     y[1] = 10.0;
  41.     fprintf(fdat, "%.1lf\t%.10e\t%.10e\n", 0.0, y[0], y[1]);
  42.    
  43.     while (x <= 20.0) {
  44.         autoint(2, &x, x + DX, y, &step, TOL, REL, f);
  45.         fprintf(fdat, "%.1lf\t%.10e\t%.10e\n", x, y[0], y[1]);
  46.     }
  47.     fclose(fdat);
  48.    
  49.     // third situation
  50.     fdat = fopen("sit3.dat", "w");
  51.     x = 0.0;
  52.     y[0] = 300.0;
  53.     y[1] = 100.0;
  54.     fprintf(fdat, "%.1lf\t%.10e\t%.10e\n", 0.0, y[0], y[1]);
  55.    
  56.     while (x <= 20.0) {
  57.         autoint(2, &x, x + DX, y, &step, TOL, REL, f);
  58.         fprintf(fdat, "%.1lf\t%.10e\t%.10e\n", x, y[0], y[1]);
  59.     }
  60.     fclose(fdat);
  61.    
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment