Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт до лабораторної роботи № 5
з курсу “Комп’ютерні методи дослідження систем керування”
ЧИСЛОВЕ ОБЧИСЛЕННЯ
ВИЗНАЧЕНИХ ІНТЕГРАЛІВ
Варіант #7
Львів 2014
Мета роботи: вивчити основні методи обчислення визначених інтегралів.
Теоретичні відомості:
Метод Сімпсона
Метод вимагає розбиття проміжку на парну кількість ділянок з кроком . На кожній ділянці , , … , підінтегральну функцію замінюємо параболою другого порядку
. (4.1)
де
Для цього випадку (рис. 5), коефіцієнти , , обчислюються з накладеної умови, що парабола проходить через крапки функції у цих вузлах інтерполяції. Тобто, можемо записати систему трьох лінійних алгебричних рівнянь, з яких і обчислюються необхідні нам коефіцієнти
. (4.2)
Розв’язавши систему (4.2), отримаємо значення коефіцієнтів
. (4.3)
Підставивши отримані значення коефіцієнтів у рівняння параболи (4.1), отримаємо таке співвідношення
. (4.4)
При підставленні замість підінтегральної функцій виразу (4.4), отримаємо значення визначеного інтегралу на проміжку
. (4.5)
Узагальнюючи формулу (4.5) для усіх ділянок , , … , , отримаємо такий вираз
. (4.6)
Просумуємо значення інтегралу на усіх зазначених ділянках
(4.7)
Записавши значення функцій з коефіцієнтами 2 та 4 у вигляді двох сум, отримаємо загальну формулу методу Сімпсона (парабол)
. (4.8)
Завдання:
Метод Сімпсона
Кількість розбиттів проміжку інтегрування m=10
Код програми:
//Метод Сімпсона
#include <iostream>
#include <math.h>
using namespace std;
double Integral = 0, pi = 3.1415926;
double a = 0, b, h, n, m = 10;
double fa, fb, x = 0;
void main()
{
setlocale(0, "");
b = pi/2;
n = 2*m;
h = (b - a)/n;
fa = sin(a) * pow(cos(a), 2);
fb = sin(b) * pow(cos(b), 2);
for (int i = 1; i < m; i++)
{
x = a + (2 * i - 1)*h;
Integral += (4 * sin(x)*pow(cos(x), 2));
}
for (int i = 1; i < m - 1; i++)
{
x = a + 2 * i * h;
Integral += 2 * sin(x)*pow(cos(x), 2);
}
Integral = (h / 3) * (fa + fb + Integral);
cout << "\n\tЗначення iнтегралу: " << Integral << endl;
// Перевірка
cout << "\n\tТочно обчислений визначений iнтеграл \n\tзгiдно формули Ньютона-Лейбнiца: "
<< (-1./3. * pow(cos(b), 3)) - (-1./3. * pow(cos(a), 3));
_fgetchar();
}
Результат роботи ппрограми:
/