Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/32: Рейтинг темы: голосов - 32, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 39
1

Метод трапеций

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

Author24 — интернет-сервис помощи студентам
Добрый день.
Кто- то может составить программу вычисления интеграла полинома от a до b с точностью 0.001. Коэффициенты полинома 4ой степени вводятся с клавиатуры, пределы интегрирования так же вводятся с клавиатуры. В программе должна использоваться формула трапеции.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2012, 22:10
Ответы с готовыми решениями:

Метод трапеций
Здравствуйте! Задача состоит в нахождении интреграла методом трапеций. В функцию передаются...

Метод трапеций и прямоугольников
Выручайте.Если до понедельника не сделаю-не поставит препод зачет.Необходимо написать программу на...

Интеграл. Метод трапеций
Товарищи, прошу у Вас помощи. Необходимо решить интервал методом трапеции, соответственно в С++....

Интегралы. Метод трапеций
Помогите написать код именно для моего интеграла. Просматривал темы с аналогичным названием,...

4
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
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;
}
1
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 39
09.04.2012, 20:23  [ТС] 3
Большое спасибо!!!!
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 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;
2
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
10.04.2012, 01:17 5
Kuzia domovenok, не буду спорить, решал "в лоб", но по-моему общее основание учитывалось в моей программе в строчке 66( y2 = y1; ), а вот насчёт вынесения высоты трапеции - очень дельное замечание, ведь, как правило, высота имеет очень маленькое значение, что приводит к потери точности, не говоря уже о тактах процессора, затрачиваемых на перемножение. С другой стороны, как всегда, выигрывая в производительности, мы теряем в читаемости кода.
p.s. не охота разбираться, учитывает ли ваш алгоритм бессмысленность отрицательной площади?
0
10.04.2012, 01:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2012, 01:17
Помогаю со студенческими работами здесь

Численное интегрирование (метод трапеций). Как гарантировать нужную точность?
#include &lt;cmath&gt; #include &lt;iostream&gt; #define PI 3.1415926535 /*----подинтегральная...

Проверьте код,"численные методы,метод трапеций"
Помогите,тут немного не такая формула,как сделать чтобы брался i-1 элемент функции слаживался с...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru