Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. void realfunc(double &y1, double &y2, double x){
  2.     double y10 = 1, y20 = 1;
  3.     y1 = 0.5 * (y10+y20) * exp(x * (p1+p2)) + 0.5 * (y10-y20) * exp(x * (p1-p2));
  4.     y2 = 0.5 * (y10+y20) * exp(x * (p1+p2)) - 0.5 * (y10-y20) * exp(x * (p1-p2));
  5. }
  6.  
  7. double norm (double x1, double x2, double y1, double y2){
  8.     return sqrt((x1-y1)*(x1-y1) + (x2-y2)*(x2-y2));
  9. }
  10.  
  11. double mtrx_euler_1 (int n){
  12.     dots = new double[n + 1];
  13.     fill_dots(n);
  14.     double *y1 = new double[n+1];
  15.     double *y2 = new double[n+1];
  16.     y1[0] = y2[0] = 1;
  17.  
  18.     double er = 0., t, y1o, y2o, h;
  19.     for(int i = 1; i <= n; ++i){
  20.         h = dots[i] - dots[i-1];
  21.         y1[i] = y1[i-1] + h * (p1*y1[i-1] + p2*y2[i-1]);
  22.         y2[i] = y2[i-1] + h * (p2*y1[i-1] + p1*y2[i-1]);
  23.         realfunc(y1o, y2o, dots[i]);
  24.         t = norm(y1[i], y2[i], y1o, y2o);
  25.         if(t > er) er = t;
  26.     }
  27.     return er;
  28. }
  29.  
  30. double mtrx_euler_2 (int n){
  31.     dots = new double[n + 1];
  32.     fill_dots(n);
  33.     double *y1 = new double[n+1];
  34.     double *y2 = new double[n+1];
  35.     y1[0] = y2[0] = 1;
  36.  
  37.     double er = 0., t, y1o, y2o, h;
  38.     for(int i = 1; i <= n; ++i){
  39.         h = dots[i] - dots[i-1];
  40.         y1[i] = ((1-h*p1) * y1[i-1] + h*p2*y2[i-1]) / ((1-h*p1)*(1-h*p1) - h*h*p2*p2);
  41.         y2[i] = ((1-h*p1) * y2[i-1] + h*p2*y1[i-1]) / ((1-h*p1)*(1-h*p1) - h*h*p2*p2);
  42.         realfunc(y1o, y2o, dots[i]);
  43.         t = norm(y1[i], y2[i], y1o, y2o);
  44.         if(t > er) er = t;
  45.     }
  46.     return er;
  47.  
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement