Вопрос № 35. VBA-программа численного интегрирования функций методом трапеций. Оценка точности метода. Привести пример.
1.Произвольным образом делим отрезок [a; b] на n равных частей.
2.Находим шаг интегрирования h = (b – a) / n
3.Наносим точки разбиения на интервал. x0 = a; x1 = a + h, x2 = a + 2h ….
4.Проводим перпендикуляры до пересечения с графиком.
5.Строим трапеции.
6.I = ∑Sn = ((f(x0) + f(x1)) / 2) * h + ((f(x1) + f(x2)) / 2) * h + … + ((f(x3) + f(x4)) / 2) * h
   I = h * ((f(x0) + 2f(x1) + 2f(x2) + 2f(x3) + F(x4)) / 2) (x0 = a; x4 = b)
   I = h * ((f(a) + f(b)) / 2 + ∑i=1n-1f(xi))
   I = S = h * ((f(a) + f(b)) / 2 + ∑i=1n-1f(a + i*h))
Однако одно приближенное значение не позволяет адекватно оценить точность интеграла. Поэтому необходимо найти второе приближённое значение интеграла. Для этого увеличим количество разбиений интервала [a; b] в 2 раза, т.е. n = 2n, в результате чего шаг h становится меньше в 2раза и вычисляется новое значение. Допустим, что S2 – второе приближённое значение, а S1 – первое. Проверяется условие |S2-S1| < ε. Если условие не выполняется, тогда на каждом шаге значение S1 считается предыдущим приближением, т.е. S1 присваивает S2 (S1 = S2), а S2 – последующим.
Итерационный процесс удвоения n и вычисление S2 продолжается до тех пор, пока |S2 – S1| < ε.
Из всех методов метод трапеций (наравне с методом средних прямоугольников) самый точный.
Const eps = 1E – 4
Function F(x As Double) As Double
F = sqr(1 – ¼ * (sin(x))^2)
End Function
Sub Trap (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
For i = 1To n-1
S2 = S2 + F(a + i * h)
Next i
S2 = h * ((f(a) + f(b)/2 + 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 ()
a As Double, b As Double, n As Integer, S2 As Double
a = 0
b = 1.57
n = 10
Trap a, b, n, S2
Cells(20, 1) = “оконч. сумма =” & Format (S2, “0.0000”)
End Sub