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