Вопрос № 36. Численное интегрирование функций методом Симпсона (парабол). Оценка точности метода. Привести примеры.
1. Разбиваем отрезок [a; b] на n равных частей (n обязательно чётное!).
2. Находим шаг интегрирования. h = (b – a) / n
3. Наносим на ось Ох точки разбиения. x0 = a; x1 = a + h; x2 = a + 2h….xn = b
4. Из этих точек разбиения проводим перпендикуляр.
5. Проводим параболу через [f(x0); f(x2)], далее через [f(x2); f(x4)] и т.д.
6. x0∫x2f(x)dx = h/3 (f(x0) + 4f(x1) + f(x2))
    x2∫x4f(x)dx = h/3 (f(x2) + 4f(x3) + f(x4))
    x4∫x6f(x)dx = h/3 (f(x4) + 4f(x5) + f(x6))
    x0∫x6f(x)dx = h/3 (f(a) + 4f(x1) + 2f(x2) + 4f(x3) + 2f(x4) + 4f(x5) + f(b))
    c = 4
    c = 2
   a∫bf(x)dx = h/3 (f(a) + f(b) + c∑i=1n-1f(xi), где x0 = a, x1 = a + h и т.п.
   a∫bf(x)dx = h/3 (f(a) + f(b) + c∑i=1n-1f(a + i•h)
    c = 4                                                                   -   формула для метода Симпсона.
    c = 2
Однако одно приближенное значение не позволяет адекватно оценить точность интеграла. Поэтому необходимо найти второе приближённое значение интеграла. Для этого увеличим количество разбиений интервала [a; b] в 2 раза, т.е. n = 2n, в результате чего шаг h становится меньше в 2раза и вычисляется новое значение. Допустим, что S2 – второе приближённое значение, а S1 – первое. Проверяется условие |S2-S1| < ε. Если условие не выполняется, тогда на каждом шаге значение S1 считается предыдущим приближением, т.е. S1 присваивает S2 (S1 = S2), а S2 – последующим.
Итерационный процесс удвоения n и вычисление S2 продолжается до тех пор, пока |S2 – S1| < ε.
Метод Симпсона является самым точным методом, т.к. парабола на каждом интервале почти повторяет кривую подынтегральной ф-ции, на каждом интервале определяются новые коэффициенты a, b, c.
Const eps = 1E – 4
Function F(x As Double) As Double
F = sqr(1 – ¼ * (sin(x))^2)
End Function
Sub Simpson ( a As Double, b As Double, n As Integer, S2 As Double)
Dim S1 As Double
S2 = 0
Cells(1, 1) = “пред. зн. S1”
Cells(1, 3) = “посл. зн. S2”
Cells(1, 5) = “n”
p = 2
Do
   h = (b - a) / n
   S1 = S2
   S2 = 0
   c = 1
     For i = 1 To n-1
     S2 = S2 + F(a + i*h)*(c+3)
     c = -c
     Next i
   S2 = h/3*(F(a) + F(b) + S2)
   Cells(p, 1) = S1
   Cells(p, 3) = S2
   Cells(p, 5) = n
   p = p + 1
   n = 2*n
Loop Until Abs(S2 – S1) < eps
End Sub
Sub My_Pr()
Dim a As Double, b As Double, n As Integer, S2 As Double
a = 0
b = 1.57
n = 6
Simpson a, b, n, S2
Cells(20, 1) = “оконч. сумма = ” & Format (S2, “0.0000”)
End Sub