Приближенное вычисление интегралов (тема 9)

Содержание

Слайд 2

Формулы для вычисления интеграла получают следующим образом. Интервал [a, b] разбивают

Формулы для вычисления интеграла

получают следующим образом.
Интервал [a, b] разбивают

на n отрезков длиной h = (b – a) / n (в общем случае – разной длины), тогда значение интеграла по всей области равно сумме интегралов на этих отрезках.
На каждом отрезке [xi, xi+1] выбирают 1 – 5 узлов и по ним строят интерполяционный много-член соответствующего порядка. Вычисляют ин-теграл от этого многочлена на отрезке.
Слайд 3

Интерполяционным многочленом называ-ют алгебраический многочлен степени (n – 1), со-впадающий с


Интерполяционным многочленом называ-ют алгебраический многочлен степени (n – 1), со-впадающий с

аппроксимируемой (заменяемой) функцией в выбранных n точках (узлах).
Общий вид многочлена:
Pn-1(x) = c1x + c2x2 + … + cnxn-1 .
Слайд 4

В результате получают выражение интеграла (формулу численного интегрирования) через зна-чения подынтегральной

В результате получают выражение интеграла (формулу численного интегрирования) через зна-чения подынтегральной

функции в выбранной системе точек.
Такие выражения называют квадратурными формулами.
Рассмотрим наиболее часто используемые ква-дратурные формулы для отрезков равной длины:
h = (b – a) / n;
xi = a + (i – 1) ⋅ h; i = 1, 2, … , n.
Слайд 5

Формула средних Формула средних получается, если на каж-дом i-м отрезке взять

Формула средних
Формула средних получается, если на каж-дом i-м отрезке взять один

центральный узел xi+1/2 = (xi + xi+1)/2, соответствующий середине отрезка. Функция на каждом отрезке заменяется многочленом нулевой степени (константой)
P0(x) = yi+1/2 = f (xi+1/2). Заменяя площадь криволинейной фигуры площадью прямоуголь-ника высотой yi+1/2 и основанием h, получим приближенную формулу для расчета (рис. 1):

(1)

Слайд 6

Рис. 1. Иллюстрация формулы средних

Рис. 1. Иллюстрация формулы средних

Слайд 7

Формула трапеций Формула трапеций получается при замене функции f(x) на каждом

Формула трапеций
Формула трапеций получается при замене функции f(x) на каждом отрезке

[xi, xi+1] многочленом первого порядка, т.е. прямой, проходящей через точки (xi, yi), (xi+1, yi+1). Площадь криволинейной фигуры заменяется площадью трапеции с основаниями yi, yi+1 и высотой h (рис. 2):

(2)

Слайд 8

Рис. 2. Иллюстрация формулы трапеций

Рис. 2. Иллюстрация формулы трапеций

Слайд 9

Формула Симпсона Эта формула получается при замене функции f(x) на каждом

Формула Симпсона
Эта формула получается при замене функции f(x) на каждом

отрезке [xi, xi+1] многочленом второго порядка (параболой) с узлами xi, xi+1/2, xi+1. После интегрирования параболы получаем (рис. 3):

(3)

Слайд 10

После приведения подобных членов полу-чаем более удобный для программирования вид:

После приведения подобных членов полу-чаем более удобный для программирования вид:

Слайд 11

Рис. 3. Иллюстрация формулы Симпсона

Рис. 3. Иллюстрация формулы Симпсона

Слайд 12

Расчет интеграла по заданной точности ε Метод 1. Один из вариантов

Расчет интеграла по заданной точности ε
Метод 1. Один из вариантов вычисления

интеграла с заданной точностью:
1) задают начальное число разбиений n и вычисляют приближенное значение интеграла I1 выбранным методом;
2) число интервалов удваивают n = 2 n;
3) вычисляют новое значение интеграла I2;
4) если |I1 – I2| ≥ ε, то I1 = I2 и расчет повторяют – переход к п. 2; иначе (|I1 – I2| < ε) – заданная точность достигнута, выводят резуль-таты: I2 – найденное значение интеграла с задан-ной точностью ε и n – количество разбиений.
Слайд 13

Метод 2 – классическая схема автоматиче-ского выбора шага. Анализ формул (1)

Метод 2 – классическая схема автоматиче-ского выбора шага.
Анализ формул (1)

– (3) показал, что точное значение интеграла находится между значения-ми ФСР и ФТР и выполняется соотношение
ФСИ = (ФТР + 2⋅ФСР) / 3. (4)
Расчет начинается с n = 2 и производится по двум методам ФСР и ФТР.
Если |ФСР – ФТР| ≥ ε, увеличивают n = 2n и расчет повторяют.
Если точность достигнута, то окончательное значение интеграла находят по формуле (4).
Слайд 14

Формулы Гаусса В рассмотренных формулах в качестве узлов многочлена выбирались середины

Формулы Гаусса
В рассмотренных формулах в качестве узлов многочлена выбирались середины и

(или) концы интервала разбиения.
Оказывается, что увеличение количества узлов не всегда приводит к уменьшению погре-шности, т.е. за счет удачного расположения узлов можно значительно увеличить точность.
Суть методов Гаусса порядка n состоит в таком выборе расположения n узлов многочлена на отрезке [xi, xi+1], при котором достигается минимум погрешности квадратурной формулы.
Слайд 15

Анализ показал, что узлами, удовлетворяю-щими такому условию, являются нули ортого-нальнoго многочлена

Анализ показал, что узлами, удовлетворяю-щими такому условию, являются нули ортого-нальнoго многочлена

Лежандра степени n :
{ φ1(x) = 1; φ2(x) = x;
φk+1(x) = [ (2k + 1) x φk(x) – k φk–1(x)],
k = 2, 3, …, n } .
Так, для n = 1 один узел должен быть выбран в центре.
Следовательно, метод средних является методом Гаусса 1-го порядка.
Слайд 16

Для n = 2 узлы должны быть выбраны сле-дующим образом (два

Для n = 2 узлы должны быть выбраны сле-дующим образом (два

узла):
xi1 = xi+1/2 – h/2 * 0.5773502692;
xi2 = xi+1/2 + h/2 * 0.5773502692;
и формула Гаусса 2-го порядка имеет вид:

Погрешность этой формулы при h → 0 такой же, как у метода Симпсона, хотя используется только 2 узла.

Слайд 17

Для n = 3 выбираются три узла: xi0 = xi+1/2 ;

Для n = 3 выбираются три узла:
xi0 = xi+1/2 ;
xi1 =

xi0 – h/2 * 0.7745966692 ;
xi2 = xi0 + h/2 * 0.7745966692 ;
и формула Гаусса 3-го порядка имеет вид:

Погрешность этой формулы при h → 0 имеет 7-й порядок, что значительно выше, чем у формулы Симпсона, практически при одинаковых вычислительных затратах.

Слайд 18

Рассмотрим пример Написать и отладить программу вычисления значения интеграла от функции

Рассмотрим пример
Написать и отладить программу вычисления значения интеграла от функции f(x)

= 4 x – 7 sinx на интервале [a, b] методом Симпсона с выбором: по заданному количеству разбиений n и заданной точности ε (метод 1).
На интервале [–2, 3] интеграл равен 5,983.
Текст программы в может иметь вид:
. . .
// Декларации прототипов функций Пользователя
double fun (double);
double Metod (double (*f )(double), double, double, int);
Слайд 19

void main () { double a, b, x, eps, h, I1,

void main () {
double a, b, x, eps, h, I1, I2,

pogr;
int n, n1, kod;
cout << " If a = -2, b = 3, Int = 5,983" << endl;
// Цикл, организующий повторение расчетов
do {
cout << " Input a, b : ";
cin >> a >> b;
/* Выбор расчета: 1 – по разбиению на n, иначе по точности eps */
cout << "\n\t Input 1 – n, Else – eps : ";
cin >> kod;
Слайд 20

if ( kod == 1 ) { // Выполняем расчет по

if ( kod == 1 ) {
// Выполняем расчет по числу

разбиений n
cout << " Input n : ";
cin >> n;
I1 = Metod ( fun, a, b, n );
}
else {
// Иначе, выполняем расчет по точности eps
cout << " Input eps : ";
cin >> eps;
n1 = 2;
// Начальное число разбиений n1, интеграл – I1
I1 = Metod ( fun, a, b, n1 );
Слайд 21

do { /* Увеличиваем число разбиений и находим новое значение интеграла

do {
/* Увеличиваем число разбиений и находим новое значение интеграла

I2 */
n1 *= 2;
I2 = Metod ( fun, a, b, n1);
pogr = fabs (I2 – I1);
I1 = I2;
} while ( pogr > eps );
/* Цикл выполняем пока разница между предыду-щим значением интеграла I1 и найденным I2 не станет меньше eps */
Слайд 22

cout /* Выводим количество разбиений n1, при кото-ром была достигнута заданная

cout << "\t n = " << n1 << endl;
/*

Выводим количество разбиений n1, при кото-ром была достигнута заданная точность */
} // Конец else
cout << "\n\t Integral = " << I1 << endl;
// Выводим найденное значение интеграла I1
cout << "\n Repeat - 1, Else - EXIT " << endl;
/* Для повторения (Repeat) введите 1, чтобы усло-вие getch() == '1' в следующем операторе while было истинным, иначе – конец программы */
} while ( getch() == '1' );
}
Слайд 23

Функция метода Симпсона double Metod (double ( *f ) (double x),

Функция метода Симпсона
double Metod (double ( *f ) (double x),

double a,
double b, int n)
{
double s = 0, h, x;
h = (b - a) / n; // Находим шаг
x = a;
// Выполняем расчеты согласно формуле (3)
for ( int i = 1; i <= n; i++) {
s += f (x) + 4 * f (x + h/2) + f (x + h);
x += h;
}
return s * h / 6;
}