Форум программистов, компьютерный форум CyberForum.ru

Интегралы, площадь заштрихованной области - C++

Восстановить пароль Регистрация
 
OlgaSaliy
0 / 0 / 0
Регистрация: 20.11.2014
Сообщений: 17
20.11.2014, 00:26     Интегралы, площадь заштрихованной области #1
Подскажите , пожалуйста. Даже не знаю с чего начинать. Проинтегрировать на листочке до окончательной формулы не получилось. Пыталась через WolframAlpha - не получилось тоже.
Миниатюры
Интегралы, площадь заштрихованной области  
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1859 / 1655 / 577
Регистрация: 14.05.2014
Сообщений: 4,755
Записей в блоге: 1
Завершенные тесты: 5
20.11.2014, 00:35     Интегралы, площадь заштрихованной области #2
OlgaSaliy, Вам нужно на С++?
OlgaSaliy
0 / 0 / 0
Регистрация: 20.11.2014
Сообщений: 17
20.11.2014, 00:45  [ТС]     Интегралы, площадь заштрихованной области #3
Да, на с++

Добавлено через 5 минут
Хотя , в принципе, все равно на каком
Мне бы идею..
D_in_practice
 Аватар для D_in_practice
330 / 330 / 159
Регистрация: 02.10.2014
Сообщений: 666
20.11.2014, 07:35     Интегралы, площадь заштрихованной области #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Интегралы, площадь заштрихованной области
Код для таблицы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
double f1(double x){
    return log(1 + x * x);
}
 
double f2(double x){
    return (2/x) * cos (x/2);
}
 
double f3(double x){
    return exp(-x * x);
}
 
int main(){
   
cout<< "  x      log(1 + x * x)   (2/x) * cos (x/2)         exp(-x * x)" <<endl;
cout<< "---------------------------------------------------------------" <<endl;
    
    for (int i = 0; i <= 20; ++i){
        
        double x = i * 0.5;
        cout << setw(3) << x;
        cout << setw(20) << f1(x);
        cout << setw(20) << f2(x);
        cout << setw(20) << f3(x) << endl;
    }
}

Код
Из таблицы получил:
0.5 < a < 1
  1 < b < 1.5
  3 < c < 3.5
Метод половинного деления
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <cmath>
 
double f1(double x){
    return log(1 + x * x);
}
 
double f2(double x){
    return (2/x) * cos (x/2);
}
 
double f3(double x){
    return exp(-x * x);
}
 
double f(double x, int i){ //a: i=0, b: i=1, c: i=2
    
    switch (i){
        case 0:
            return f1(x) - f3(x);
            break;
        case 1:
            return f1(x) - f2(x);
            break;
        case 2:
            return f2(x) - f3(x);
            break;
    }
}
 
int main(){
    
   const double EPS = 1e-10;
    
   for (int i = 0; i < 3; ++i){
    
    double left, right;
        switch (i){
            case 0:
                left = 0.5;
                right = 1;
                break;
            case 1:
                left = 1;
                right = 1.5;
                break;
            case 2:
                left = 3;
                right = 3.5;
                break;
        }
        
        double x = (right + left) / 2;
        while (fabs(f(x, i)) > EPS){
        if (f(left, i) * f(x, i) > 0)
            left = x;
        else
            right = x;
        x = (right + left) / 2;
        }
        
        std::cout << x << std::endl;
   }
}

Код
a = 0.817922
b = 1.40341
c = 3.14143
Метод Симпсона
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <cmath>
 
double f1(double x){
    return log(1 + x * x);
}
 
double f2(double x){
    return (2/x) * cos (x/2);
}
 
double f3(double x){
    return exp(-x * x);
}
 
int main(){
    
   const double N = 100000;
   
   double left = 0.817922;
   double right = 1.40341;
    double dx = (right - left) / (N - 1);
    double sum1 = 0;
   for (int i = 1; i < N - 1; ++i){
      double x = left + i * dx;
      if (i % 2 == 0)
         sum1 += 2 * (f1(x) - f3(x));
      else
         sum1 += 4 * (f1(x) - f3(x));
   }   
   sum1 = (dx / 3) * (left + sum1 + right);
   
    left = right;
   right = 3.14143;
    dx = (right - left) / (N - 1);
    double sum2 = 0;
   for (int i = 1; i < N - 1; ++i){
      double x = left + i * dx;
      if (i % 2 == 0)
         sum2 += 2 * (f2(x) - f3(x));
      else
         sum2 += 4 * (f2(x) - f3(x));
   }  
   sum2 = (dx / 3) * (left + sum2 + right);
    
    std::cout << sum1 + sum2 << std::endl;
}

Ответ: 0.989843
Yandex
Объявления
20.11.2014, 07:35     Интегралы, площадь заштрихованной области
Ответ Создать тему
Опции темы

Текущее время: 18:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru