Advertisement
greannmhar

Интеграл2

May 31st, 2024
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. typedef double (*func_t) (double);
  5. double half (double eps, double alpha);
  6. double integrand(double t);
  7. double integrate (func_t f, double eps);
  8.  
  9. double half (double eps, double alpha) {
  10.     double a = 0;
  11.     double b = 1;
  12.     double x;
  13.    
  14.     while (b - a > eps) {
  15.         x = (a + b) / 2;
  16.        
  17.         if ((integrate(integrand, a, eps) - alpha)*(integrate(integrand, x, eps) - alpha) > 0) {
  18.             a = x;
  19.         }
  20.        
  21.         else {
  22.             b = x;
  23.         }
  24.     }
  25.    
  26.     return x;
  27. }
  28.  
  29. double integrand(double t) {
  30.     return x*x / ((1 + pow(x, 4)) * sqrt(1 - pow(x, 4)));
  31. }
  32.  
  33. double integrate (func_t f, double x, double eps) {
  34.    
  35.     double a = 0;
  36.     double b = 1;
  37.     double value = 0;
  38.     double h = (b - a) / 100;
  39.     double x = a;
  40.     int working = 1;
  41.     double integral_1;
  42.     double integral_2;
  43.    
  44.     while (working) {
  45.         if (x + h >= b) {
  46.             h = b - x;
  47.             working = 0;
  48.         }
  49.        
  50.         integral_1 = (x + h - x) * integrand(x);
  51.        
  52.         integral_2 = (x + h/2 - x) * integrand(x) +  (x + h - x + h / 2) * integrand(x + h / 2);
  53.        
  54.         if (fabs(integral_1 - integral_2) < eps / 4) {
  55.            
  56.             value = value + integral_1;
  57.             x = x + h;
  58.             h *= 1.5;
  59.         }
  60.         else if (fabs(integral_1 - integral_2) < eps) {
  61.            
  62.             value = value + integral_1;
  63.             x = x + h;
  64.         }
  65.        
  66.         else {
  67.             h = h / 2;
  68.             working = 1;
  69.         }
  70.    
  71.     return value;
  72. }
  73.  
  74. int main(void) {
  75.     double eps;
  76.     double x;
  77.     double alpha = M_PI/8;
  78.    
  79.     printf ("Enter epsilon!\n");
  80.    
  81.     if (scanf("%lf", &eps) != 1) {
  82.         printf ("Incorrect value!\n");
  83.         return -1;
  84.     }
  85.    
  86.     x = half(eps, alpha);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement