Операторы повторения (циклы). Итеративные методы вычислений»
Цель: Разработать программу на VBA вычисления заданной площади, используя три различных метода вычислений: прямоугольников, трапеций, Симпсона. Результат вывести на экран в виде таблицы MS Excell. Для использования цикла повторяющихся действий в VBA существует оператор For Next, синтаксис которого содержит переменную управляющую итерациями, условие завершения цикла (оно должно быть верно, определено иначе цикл будет бесконечным), а так же переменную шага итерации.
Для вычисления площади заданных областей:
Используя канонические формулы эллипса, окружности и прямой составим функции задающие соответствующие графики. Площадь обозначенных областей будет вычислять как разность смежных областей, т.е. для области «А» сперва вычислим площадь области заключенной под графиком окружности и вычтем площадь находящуюся под прямой; для области «В» вычислим площадь заключенную под графиком эллипса и вычтем площадь заключённую под графиком окружности. Для обоих случаев зададим соответствующие пределы интегрирования. Для чего вычислим точки пересечения всех графиков с осью ОХ.
Цикла метода прямоугольников опишем так:
'метод прямоугольников Private Function RectangleMethod(ByVal first_a As Double, ByVal first_b As Double, _ ByVal second_a As Double, ByVal second_b As Double, ByVal n As Integer)
Dim sA As Double, sB As Double h = (first_b - first_a) / n 'ширина прямоугольника For x = first_a To (first_b - h) Step h circleS = circleS + ycircle(x) * h 'считаем площадь под окружностью lineS = lineS + yline(x) * h 'считаем площадь под прямой Next sA = circleS - lineS 'считаем площадь области А
h = 0 circleS = 0
h = (second_b - second_a) / n For x = second_a To (second_b - h) Step h elipseS = elipseS + yelipse(x) * h 'считаем площадь под элипсом circleS = circleS + ycircle(x) * h 'считаем площадь под окружностью Next sB = elipseS - circleS 'считаем площадь области В FullS = sA + sB 'общая площадь закрашеных областей End Function
Для метода трапеций:
'метод трапеций Private Function KeystoneMethod(ByVal first_a As Double, ByVal first_b As Double, _ ByVal second_a As Double, ByVal second_b As Double, ByVal n As Integer)
Dim sA As Double, sB As Double h = (first_b - first_a) / n 'ширина основания трапеции For x = first_a To (first_b - h) Step h circleS = circleS + (((ycircle(x) + ycircle(x + h)) / 2) * h) 'считаем площадь под окружностью lineS = lineS + (((yline(x) + yline(x + h)) / 2) * h) 'считаем площадь под прямой Next sA = circleS - lineS 'считаем площадь области А
h = 0 circleS = 0
h = (second_b - second_a) / n For x = second_a To (second_b - h) Step h elipseS = elipseS + (((yelipse(x) + yelipse(x + h)) / 2) * h) 'считаем площадь под элипсом circleS = circleS + (((ycircle(x) + ycircle(x + h)) / 2) * h) 'считаем площадь под окружностью Next sB = elipseS - circleS 'считаем площадь области В FullS = sA + sB 'общая площадь закрашеных областей End Function
Для метода парабол (Симпсона):
'метод порабол Private Function SimpsonsMethod(ByVal first_a As Double, ByVal first_b As Double, _ ByVal second_a As Double, ByVal second_b As Double, ByVal n As Integer)
Dim sA As Double, sB As Double
h = (first_b - first_a) / n 'ширина области For x = (first_a + h / 2) To (first_b - h / 2) Step h circleS = circleS + h / 6 * (ycircle(x - h / 2) + 4 * ycircle(x) + ycircle(x + h / 2)) 'считаем площадь под окружностью lineS = lineS + h / 6 * (yline(x - h / 2) + 4 * yline(x) + yline(x + h / 2)) 'считаем площадь под прямой Next sA = circleS - lineS 'считаем площадь области А
h = 0 circleS = 0
h = (second_b - second_a) / n For x = (second_a + h / 2) To (second_b - h / 2) Step h elipseS = elipseS + h / 6 * (yelipse(x - h / 2) + 4 * yelipse(x) + yelipse(x + h / 2)) 'считаем площадь под элипсом circleS = circleS + h / 6 * (ycircle(x - h / 2) + 4 * ycircle(x) + ycircle(x + h / 2)) 'считаем площадь под окружностью Next sB = elipseS - circleS 'считаем площадь области В FullS = sA + sB 'общая площадь закрашеных областей End Function Блок схема программы.
|