МАГНИТОГОРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННЫХ ИНТЕГРАЛОВ. ФОРМУЛА ПАРАБОЛ (ФОРМУЛА СИМПСОНА) Подготовил: Студент группы ФГК-98 Магнитогорск –1999 Григоренко М.В. Н е для всякой непрерывной функции ее первообразная выражается через элементарные функции. В этих случаях вычисление определенных Ньютона-Лейбница затруднительно, и интегралов по формуле применяются различные способы вычисления определенных интегралов. Один из них приведен ниже. Формула парабол (формула Симпсона) Разделим отрезок [a,b] на четное число равных частей n = 2m. Площадь криволинейной трапеции, соответствующей первым двум отрезкам [x0,x1] и [x1,x2] и ограниченной заданной кривой y = f(x), заменим площадью криволинейной трапеции, которая ограничена параболой второй степени, проходящей через три точки M(x0,y0), M1(x1,y1), M2(x2,y2) рисунок). Такую и имеющей ось, параллельную оси Оу (см. трапецию будем называть параболической трапецией. Уравнение параболы с осью, параллельной оси Оу, имеет вид y = Ax2 + Bx + C. Коэффициенты А, В и С однозначно определяются из условия, что парабола проходит через три заданные точки. Аналогичные параболы строим и для других пар отрезков. Сумма площадей параболических трапеций и даст приближенное значение интеграла. 2 Вычислим сначала площадь одной параболической трапеции. Если криволинейная трапеция ограничена параболой y = Ax2 + Bx + C, осью Ох и двумя ординатами, расстояние между которыми равно 2h, то ее площадь равна S = h/3 (y0 + 4y1 + y2), (☺) где у0 и у2 – крайние ординаты, а у1 – ордината кривой в середине отрезка Пользуясь формулой (☺), мы можем написать следующие приближенные равенства (h=Δx): x2 x ( y 0 4 y1 y 2 ), 3 a x0 x4 x f ( x ) dx ( y 2 4 y3 y 4 ), x 3 2 f ( x)dx ...................... x2 m b x2 m 2 f ( x)dx x ( y 2 m 2 4 y 2 m1 y 2 m ). 3 Складывая левые и правые части, получим слева искомый интеграл, справа его приближенное значение: b a f ( x)dx ba [ y0 y 2 m 2( y 2 y 4 ... y 2 m2 ) 4( y1 y3 ... y 2 m1 )]. 6m Это и есть формула Симпсона. Здесь число точек деления n = 2m произвольно, но чем больше это число, тем точнее сумма в правой части равенства дает значение интеграла. 2 Примеры Было дано задания вычислить приблизительно следующие определенные интегралы: 1 1 x dx 4 5 И 0 dx 2 ln x Для вычисления данных интегралов мною были написаны специальные программы на языке Visual Basic for Application. (тексты программ приведены в приложении). Программы осуществляют запрос количества отрезков, на которые следует разбить заданный отрезок. Структура программ универсальна и применима для вычисления любых определенных интегралов. Для этого необходимо изменить границы определенного интеграла в строках (*) и (**), а также подынтегральную функцию в строке (***). Были получены следующие ответы: 1 1 x 4 dx 1,089429413 0 5 dx 2 ln x 2,589440569 При n = 20. 2 Приложение 1 1 x 4 dx 0 'Приближенное вычисление интегралов по формуле парабол '(формула Симпсона) Option Explicit Sub integral_1() Dim i As Integer, n As Integer Dim t As Boolean Dim b As Double, a As Double Dim chet As Double, nechet As Double Dim delta As Double, result As Double a=0 '(*) b=1 '(**) t = True Do n = InputBox("Введите четное число n", "Запрос") If n Mod 2 = 0 Then t = False Loop While t delta = (b - a) / n chet = 0 nechet = 0 For i = 1 To n - 1 If (i Mod 2) = 0 Then chet = chet + (f(a + (delta * i))) Else nechet = nechet + (f(a + (delta * i))) End If Next i result = (delta / 3) * (f(a) + f(b) + (2 * chet) + (4 * nechet)) MsgBox result, vbInformation, "Результат" End Sub Function f(x) As Double f = Sqr(1 + (x ^ 4)) '(***) End Function 2 5 dx 2 ln x 'Приближенное вычисление интегралов по формуле парабол '(формула Симпсона) Option Explicit Sub integral_1() Dim i As Integer, n As Integer Dim t As Boolean Dim b As Double, a As Double Dim chet As Double, nechet As Double Dim delta As Double, result As Double a=2 '(*) b=5 '(**) t = True Do n = InputBox("Введите четное число n", "Запрос") If n Mod 2 = 0 Then t = False Loop While t delta = (b - a) / n chet = 0 nechet = 0 For i = 1 To n - 1 If (i Mod 2) = 0 Then chet = chet + (f(a + (delta * i))) Else nechet = nechet + (f(a + (delta * i))) End If Next i result = (delta / 3) * (f(a) + f(b) + (2 * chet) + (4 * nechet)) MsgBox result, vbInformation, "Результат" End Sub Function f(x) As Double f = 1 / (Log(x)) '(***) End Function 2