Advertisement
Guest User

Untitled

a guest
Mar 28th, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. temp trapecii(int k, double h) {
  2.     struct temp tempY, tempY2;
  3.     tempY.y1 = y[k].y1+ h * f1(y[k]);
  4.     tempY.y2 = y[k].y2 + h * f2(y[k]);
  5.     tempY.y3 = y[k].y3+ h * f3(y[k]);
  6.     tempY.y4 = y[k].y4 + h * f4(y[k]);
  7.  
  8.     tempY2.y1 = y[k].y1 + h / 2 *(f1(y[k]) + f1(tempY));
  9.     tempY2.y2 = y[k].y2 + h / 2 * (f2(y[k]) + f2(tempY));
  10.     tempY2.y3 = y[k].y3 + h / 2 * (f3(y[k]) + f3(tempY));
  11.     tempY2.y4 = y[k].y4 + h / 2 * (f4(y[k]) + f4(tempY));
  12.    
  13.     return tempY2;
  14. }
  15. void solveTrapecii(ostream &fout) {
  16.     double x1 = x0, err, d = 0, h = h0;
  17.     int k = 0;
  18.     struct temp y1, y2, y3;
  19.     x.push_back(x0);
  20.     int start = clock();
  21.     double hnew = h;
  22.     while (x1 < xMax) {
  23.         while (d < 1) {
  24.             h = hnew;
  25.             nr++;
  26.             y3 = trapecii(k, 2 * h);
  27.             y1 = trapecii(k, h);
  28.             y.push_back(y1);
  29.             y2 = trapecii(k + 1, h);
  30.             err = abs(y2.y1 - y3.y1);
  31.             err = max(err, abs(y2.y2 - y3.y2));
  32.             err = max(err, abs(y2.y3 - y3.y3));
  33.             err = max(err, abs(y2.y4 - y3.y4));
  34.             d = sqrt(abs(tol / err));
  35.  
  36.             hnew = h * 0.8 * d;
  37.             y.erase(y.end() - 1);
  38.         }  
  39.         na++;
  40.         nr--;
  41.         d = 0.0;   
  42.         y.push_back(y2);
  43.         x1 = x[k] + 2 * h;
  44.         x.push_back(x1);
  45.         k++;
  46.         h = min(hnew, (xMax - x[x.size() - 1]) / 2);
  47.         hnew = h;
  48.        
  49.     }
  50.     int end = clock();
  51.     fout << setprecision(2) << (double)(end - start) / CLOCKS_PER_SEC << endl;
  52.     fout << na << ' ' << nr << ' ' << na + nr << endl;
  53.  
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement