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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
Sk8erBoi
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 39
#1

Метод трапеций - C++

08.04.2012, 22:10. Просмотров 3309. Ответов 4
Метки нет (Все метки)

Добрый день.
Кто- то может составить программу вычисления интеграла полинома от a до b с точностью 0.001. Коэффициенты полинома 4ой степени вводятся с клавиатуры, пределы интегрирования так же вводятся с клавиатуры. В программе должна использоваться формула трапеции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 22:10     Метод трапеций
Посмотрите здесь:

Интеграл. Метод трапеций C++
Решение интеграла методом трапеций C++
C++ Метод трапеций и прямоугольников
Интегрирование методом прямоугольников и трапеций C++
Вычисление интеграла методом трапеций C++
C++ Численное интегрирование (метод трапеций). Как гарантировать нужную точность?
C++ Метод трапеций
C++ Вычисление интеграла методом трапеций
Определенный интеграл методом трапеций C++
Проверьте код,"численные методы,метод трапеций" C++
Вычисление интеграла методом трапеций C++
C++ Численное интегрирование по формуле трапеций

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
09.04.2012, 04:20     Метод трапеций #2
Вот отыскал в своём архиве подобную программу. Чуть-чуть отредактировал под твои нужды, не знаю как точно она работает, писал давно на скорую руку
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
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <cstdlib>
 
using namespace std;
const double PRECISION = 0.001; // точность вычисления
 
/* фунция вычисления площади трапеции */
inline double getTrapezoidArea( double a, double b, double h );
 
int main()
{
   double a = 0.0, b = 0.0, c = 0.0, d = 0.0, e = 0.0; // коэффициенты
   double y1 = 0.0, y2 = 0.0;
   double downLimit = 0.0, upLimit = 0.0; // пределы интегрирования
   double S = 0.0; // площадь под графиком
 
   cout << "Добро пожаловать в программу вычисления интеграла полинома 4-ой степени от a до b методом трапеции с точностью " << PRECISION << endl;
   cout << "Введите коэффициенты полинома ax^4 + bx^3 +cx^2 +dx + e" << endl;
 
   cout << "a = ";
   cin >> a;
   if ( a == 0.0 )
   {
      cout << "Ошибка. Это не полином четвертой степени. Выход" << endl;
      exit( EXIT_SUCCESS );
   }
   cout << "b = ";
   cin >> b;
   cout << "c = ";
   cin >> c;
   cout << "d = ";
   cin >> d;
   cout << "e = ";
   cin >> e;
 
   cout << "Введите пределы интегрирования( от a до b, где a <= b )" << endl;
   cout << "Введите нижний предел: ";
   cin >> downLimit;
   cout << "Введите верхний предел: ";
   cin >> upLimit;
 
   if ( downLimit > upLimit )
   {
      cout << "Ошибка. Неправильно заданы пределы интегрирования. Выход" << endl;
      exit( EXIT_SUCCESS );
   }
   else if ( downLimit == upLimit )
   {
      S = 0.0;
   }
   else
   {
      S = 0.0;
      y1 = a * downLimit*downLimit*downLimit*downLimit
           + b * downLimit*downLimit*downLimit
           + c * downLimit*downLimit + d * downLimit + e;
 
      for ( double i = downLimit + PRECISION; i <= upLimit; i += PRECISION )
      {
         y2 = a * i*i*i*i + b * i*i*i + c * i*i + d * i + e;
         if ( y1 >= 0.0 && y2 >= 0.0 )
         {
            S += getTrapezoidArea( y1, y2, PRECISION );
         }
         y1 = y2;
      }
   }
 
   cout << "Результат: " << S << endl;
   return 0;
}
 
inline double getTrapezoidArea( double a, double b, double h )
{
   return ( a + b ) * h / 2.0;
}
Sk8erBoi
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 39
09.04.2012, 20:23  [ТС]     Метод трапеций #3
Большое спасибо!!!!
Kuzia domovenok
1888 / 1743 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
09.04.2012, 20:45     Метод трапеций #4
Цитата Сообщение от Buckstabue Посмотреть сообщение
Вот отыскал в своём архиве подобную программу. Чуть-чуть отредактировал под твои нужды, не знаю как точно она работает, писал давно на скорую руку
Не самый оптимальный вариант
как известно у соседних трапеций общие основания., кроме того множитель "высота трапеции" можно вынести за знак суммы

Этим можно воспользоваться и считать по формуле
C++
1
2
3
4
S=0.5*(func(upLimit)+func(downLimit));
for ( double i = downLimit + PRECISION; i <= upLimit - PRECISION ; i += PRECISION )
            S += func(i);
 S=S*PRECISION;
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
10.04.2012, 01:17     Метод трапеций #5
Kuzia domovenok, не буду спорить, решал "в лоб", но по-моему общее основание учитывалось в моей программе в строчке 66( y2 = y1; ), а вот насчёт вынесения высоты трапеции - очень дельное замечание, ведь, как правило, высота имеет очень маленькое значение, что приводит к потери точности, не говоря уже о тактах процессора, затрачиваемых на перемножение. С другой стороны, как всегда, выигрывая в производительности, мы теряем в читаемости кода.
p.s. не охота разбираться, учитывает ли ваш алгоритм бессмысленность отрицательной площади?
Yandex
Объявления
10.04.2012, 01:17     Метод трапеций
Ответ Создать тему
Опции темы

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