alexandrheathen

Untitled

May 17th, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.07 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "math.h"
  3. #include "stdlib.h"
  4. #include "time.h"
  5.  
  6. #define VAL 0.001f
  7. #define MyMax 10000
  8.  
  9. float mult(float var)
  10. {
  11.   return var * var;
  12. }
  13.  
  14. float MethodOfRectangle(float start, float last)
  15. {
  16.   float integVal = 0;
  17.   float step = VAL;
  18.   for (float i = start; i < last; i+=step)
  19.     integVal += mult(i);
  20.   integVal *= step;
  21.   return integVal;
  22. }
  23.  
  24. float MethodOfTrap(float start, float last)
  25. {
  26.   float integVal = 0;
  27.   float step = VAL;
  28.   for (float i = start; i < last; i += step)
  29.     integVal += 2 * mult(i);
  30.   integVal = (integVal + mult(start) + mult(last)) * step / 2;
  31.   return integVal;
  32. }
  33.  
  34. float MethodOfSimson(float start, float last)
  35. {
  36.   int n = 1;
  37.   float step = VAL;
  38.   float integVal = 0;
  39.   float fstInteg = 0;
  40.   float sndInteg = 0;
  41.   for (float i = start; i < last; i += step)
  42.   {
  43.     if (n % 2 == 0)
  44.     {
  45.       fstInteg += mult(i);
  46.     }
  47.     else
  48.     {
  49.       sndInteg += mult(i);
  50.     }
  51.     n++;
  52.   }
  53.   integVal = (integVal + mult(start) + mult(last) + 4 * sndInteg + 2 * fstInteg) * step / 3;
  54.   return integVal;
  55. }
  56.  
  57. double MonteCarlo(double start, double last)
  58. {
  59.   double a, b, x, y, sum, integVal = 0;
  60.   int step = last - start, nums = 0;
  61.  
  62.   if (mult(start) > mult(last))
  63.   {
  64.     b = mult(start);
  65.     a = last - start;
  66.   }
  67.   else
  68.   {
  69.     b = mult(last);
  70.     a = last - start;
  71.   }
  72.   sum = a * b;
  73.  
  74.   //int val = (last-start)/VAL;
  75.   //for(int i = 0; i < val; i++)
  76.   for (double i = start; i < last; i+=VAL)
  77.   {
  78.     x = (rand()*1.0 / RAND_MAX)*step + start;
  79.     y = (rand()*1.0 / RAND_MAX) * (b);
  80.     if (y <= mult(x))
  81.     {
  82.       nums++;
  83.     }
  84.   }
  85.   integVal = sum*(((double)nums) / MyMax);
  86.   return integVal / 2;
  87. }
  88.  
  89. int main()
  90. {
  91.   srand(time(NULL));
  92.   int start = 1;
  93.   int last = 21;
  94.   printf("Start value: %d, Last value: %d\n", start, last);
  95.   printf("Method of Rectangle: %f\nMethod of Trapezium: %f\nMethod of Simpson: %f\nMethod of Monte Carlo: %lf\n", MethodOfRectangle(start, last), MethodOfTrap(start, last), MethodOfSimson(start, last), MonteCarlo(start , last));
  96.   return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment