Advertisement
NyanCoder

no1.c

May 20th, 2022
767
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.97 KB | None | 0 0
  1. #include "stdlib.h"
  2. #include "stdio.h"
  3. #include "math.h"
  4.  
  5. double f(double x);
  6. double g1(double x);
  7. double g2(double x);
  8. double g4(double x);
  9.  
  10. const double eps = 0.001;
  11. const double a = 0.0;
  12. const double b = 1.0;
  13.  
  14. int main(int argc, char **argv) {
  15.     double m1 = max(fabs(g1(a)), fabs(g1(b)));
  16.     double m2 = max(fabs(g2(a)), fabs(g2(b)));
  17.     double m4 = max(fabs(g4(a)), fabs(g4(b)));
  18.  
  19.     // Средние прямоугольники
  20.     int n = round((b - a) / sqrt(eps * 24.0 / (m2 * (b - a))));
  21.     double step = (b - a) / n;
  22.     double s = 0;
  23.     for (double x = a + step/2; x < b; x += step)
  24.         s += f(x) * step;
  25.     printf("А>> %f\n\n", s);
  26.  
  27.     // Левые прямоугольники
  28.     n = round(m1*(b - a)*(b - a)/(2 * eps));
  29.     step = (b - a) / n;
  30.     s = 0;
  31.     for (int i = 0; i < n; i++)
  32.         s += f(a + i * step) * step;
  33.     printf("Б(левая)>> %f\n", s);
  34.     // Правые прямоугольники
  35.     s = 0;
  36.     for (int i = 1; i <= n; i++)
  37.         s += f(a + i * step) * step;
  38.     printf("Б(правая)>> %f\n\n", s);
  39.  
  40.     // Трапеции
  41.     n = round((b - a) / sqrt(eps * 12.0 / (m2 * (b - a))));
  42.     step = (b - a) / n;
  43.     s = 0;
  44.     double fA = f(a);
  45.     for (int i = 1; i <= n; i++) {
  46.         double fB = f(a + step*i);
  47.         s += (fA + fB) / 2 * step;
  48.         fA = fB;
  49.     }
  50.     printf("В>> %f\n\n", s);
  51.  
  52.     // Симпсон
  53.     n = round((b - a) / sqrt(sqrt(eps * 180.0 / (m4 * (b - a)))));
  54.     step = (b - a) / n;
  55.     s = 0;
  56.     fA = f(a);
  57.     for (int i = 1; i <= n; i++) {
  58.         double fMid = f(a + step*((double)i - 0.5));
  59.         double fB = f(a + step*i);
  60.         s += (step/6)*(fA + fMid*4 + fB);
  61.         fA = fB;
  62.     }
  63.     printf("Г>> %f\n\n", s);
  64.  
  65.     return 0;
  66. }
  67.  
  68. double f(double x) {
  69.     return 2*x + 6*x*x*x*x*x;
  70. }
  71. double g1(double x) {
  72.     return 2 + 30*x*x*x*x;
  73. }
  74. double g2(double x) {
  75.     return 120*x*x*x;
  76. }
  77. double g4(double x) {
  78.     return 720*x;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement