Guest User

Untitled

a guest
May 18th, 2016
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <ctime>
  4. #include <iomanip>
  5.  
  6. typedef double (*method)(double f(double), double, double, int);
  7.  
  8.  
  9. #define N_1 100
  10. #define N_2 1000
  11.  
  12.  
  13.  
  14.  
  15. using namespace std;
  16.  
  17. double f(double x){
  18.     return sin(4 / (x + 1)) + cos(4 * x) * cos(4 * x);
  19. }
  20.  
  21. double rectangle(double f(double), double LEFT, double RIGHT, int N){
  22.  
  23.     double sq = 0, x, dx;
  24.     dx = (RIGHT - LEFT) / N;
  25.  
  26.     for (int i = 0; i < N; i++){
  27.         x = (RIGHT - LEFT) * (i + 1) / N;
  28.         sq += f(x) * dx;
  29.     }
  30.  
  31.     return sq;
  32.  
  33. }
  34.  
  35. double trapeze(double f(double), double LEFT, double RIGHT, int N){
  36.     double sq = 0, x, dx;
  37.     dx = (RIGHT - LEFT) / N;
  38.  
  39.     for (int i = 0; i < N; i++){
  40.         x = (RIGHT - LEFT) * (i + 1) / N;
  41.         sq += dx * (f(x) + f(x + dx)) / 2;
  42.     }
  43.  
  44.     return sq;
  45. }
  46.  
  47. double simp(double f(double), double LEFT, double RIGHT, int N){
  48.     double sq = 0, a, b, dx;
  49.     dx = (RIGHT - LEFT) / N;
  50.  
  51.     for (int i = 0; i < N; i++){
  52.         a = (RIGHT - LEFT) * (i + 1) / N;
  53.         b = a + dx;
  54.         sq += (dx / 6) * (f(a) + f(b) + 4 * f((a + b) / 2));
  55.     }
  56.  
  57.     return sq;
  58. }
  59.  
  60. double method_time(method Method, int N){
  61.  
  62.     unsigned int start;
  63.     double time;
  64.  
  65.     start = clock();
  66.     for (int i = 0; i < 1000; i++){
  67.         Method(f, 0, 2, N);
  68.     }
  69.     time = (clock() - start) / 1000.0;
  70.  
  71.     return time;
  72. }
  73.  
  74.  
  75. int main(int argc, char *argv[])
  76. {
  77.  
  78.     cout << "For 100:\n";
  79.  
  80.     cout << "rectangle: " << setw(6) << rectangle(f, 0, 2, N_1);
  81.     cout << " time: " << setw(7) << method_time(rectangle, N_1) << "ms" << endl;
  82.  
  83.     cout << "trapeze: " << setw(7) << trapeze(f, 0, 2, N_1);
  84.     cout << " time: " << setw(7) << method_time(trapeze, N_1) << "ms" <<  endl;
  85.  
  86.     cout << "simp: " << setw(7) << simp(f, 0, 2, N_1);
  87.     cout << " time: " << setw(7) << method_time(simp, N_1) << "ms" <<  endl;
  88.     cout << endl << endl;
  89.  
  90.  
  91.     cout << "For 1000:\n";
  92.  
  93.     cout << "rectangle: " << setw(7) << rectangle(f, 0, 2, N_2);
  94.     cout << " time: " << setw(7) << method_time(rectangle, N_2) << "ms" << endl;
  95.  
  96.     cout << "trapeze: " << setw(7) << trapeze(f, 0, 2, N_2);
  97.     cout << " time: " << setw(7) << method_time(trapeze, N_2) << "ms" << endl;
  98.  
  99.     cout << "simp: " << setw(7) << simp(f, 0, 2, N_2);
  100.     cout << " time: " << setw(7) << method_time(simp, N_2) << "ms" << endl;
  101.  
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment