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

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

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

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

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

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

Метод трапеций - C++
Здравствуйте! Задача состоит в нахождении интреграла методом трапеций. В функцию передаются границы а и b, delta - точность, fnum - номер...

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

Интеграл. Метод трапеций - C++
Товарищи, прошу у Вас помощи. Необходимо решить интервал методом трапеции, соответственно в С++. Я думаю вы меня поняли) 1 вариант,...

Численное интегрирование (метод трапеций). Как гарантировать нужную точность? - C++
#include <cmath> #include <iostream> #define PI 3.1415926535 /*----подинтегральная функция---*/ static double INTEGR(const...

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

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - 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;
}
1
Sk8erBoi
1 / 1 / 0
Регистрация: 15.12.2010
Сообщений: 39
09.04.2012, 20:23  [ТС] #3
Большое спасибо!!!!
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
10.04.2012, 01:17 #5
Kuzia domovenok, не буду спорить, решал "в лоб", но по-моему общее основание учитывалось в моей программе в строчке 66( y2 = y1; ), а вот насчёт вынесения высоты трапеции - очень дельное замечание, ведь, как правило, высота имеет очень маленькое значение, что приводит к потери точности, не говоря уже о тактах процессора, затрачиваемых на перемножение. С другой стороны, как всегда, выигрывая в производительности, мы теряем в читаемости кода.
p.s. не охота разбираться, учитывает ли ваш алгоритм бессмысленность отрицательной площади?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2012, 01:17
Привет! Вот еще темы с ответами:

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

Мой код - метод бисекции, метод секущих (метод хорд) - C++
Всем привет!!! Изучаем в институте С++. Сделал код, и там, и там одна и та же проблема - при любых вбиваемых значениях программа делает...

Вычисление интеграла методом трапеций - C++
Задали в вузе задачу решить интеграл методом трапеций... Всё бы хорошо, если бы не тот факт, что интегралы мы ещё не проходили и даже не...

Вычисление интеграла методом трапеций - C++
Составить программу для вычисления определенного интеграция- лу: s=\int_{a}^{b}f(x)dx;согласно методу трапецийs=\left*h где...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.04.2012, 01:17
Ответ Создать тему
Опции темы

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