Методичка / MetRec02-2
.htmАлгоритмические языки и программирование Задача 2-2 Вычислить площадь заданной фигуры методом трапеций Рис. 2-2 Рассмотрим в качестве примера задачу, похожую на задачу 2-1
Требуется с помощью метода трапеций вычислить площадь S фигуры, очерченной сверху линией, заданной функцией F(x,y), снизу - координатной осью X, слева - осью Y и справа - вертикальной прямой x=xB. На рис. 2-2 приведено изображение этой фигуры.
Для описания алгоритма ее решения рассмотрим суть этого метода на примере вычисления площади геометрической фигуры, рассмотренной в предыдущей задаче 2-1 (см. рис. 2-2). Разобьем фигуру на N равных частей вдоль оси X. Точки пересечения вертикальных линий и функции F(x,y) соединим последовательно друг с другом. Получим N элементарных трапеций с одинаковым основанием (шириной, расположенной вдоль оси X). Площадь каждой такой трапеции определяется произведением величины основания Dx на среднюю линию трапеции Ty (например, для 1-й трапеции x0-x1-y1-y0 площадь будет вычисляться по формуле
St = Dx * (y0+y1)/2)). Опишем один из простейших алгоритмов вычисления площади фигуры методом трапеций по шагам Определим все параметры функции F(x,y).
В нашем случае - это эллипс. Его формула:
((x-x0)*(x-x0))/(A*A) + ((y-y0)*(y-y0))/(B*B) = 1. (2-1)
Все параметры формулы: x0, y0, A, B должны быть определены.
Здесь x0 и y0 - координаты центра эллипса, A и B - его радиусы вдоль осей X и Y. Выбираем в качестве параметра сканирования переменную x. Определяем ее начальное xA и конечное xB значения.
В нашей задаче xA=0, xB мы должны вычислить как правый корень уравнения 2-1 при y=0. Задаем переменной x начальное значение x=xA. Задаем число разбиений N отрезка [xA,xB], например N=100. Вычисляем величину шага сканирования Dx или ширину элементарной трапеции.
В нашем случае Dx = (xB - xA)/N. Задаем начальное значение 0 переменной, в которой мы будем суммировать площади трапеций разбиения: S=0. Задаем начальное значение переменной yP, в которой будем хранить значение функции y=f(x), вычисленное на предыдущем шаге.
Это освобождает нас от необходимости повторных вычислений на каждом шаге итерации.
Итак, это значение равно значению функции y=f(x) при x=xA: yP=f(xA). На этом подготовительные операции можно считать завершенными. Входим в цикл.
Делаем шаг в цикле. Для этого параметр x увеличиваем на Dx. Подставляем текущее значение x в формулу 2-1 и вычисляем значение y.
Естественно, формулу для этого как и в задаче 2-1 требуется преобразовать. Находим значение средней линии трапеции
yT=(yP+y)/2). Вычисляем площадь текущей i-й трапеции:
Ds = Dx * yT. Добавляем в переменную S вычисленную площадь Ds: S:=S + Ds. Обновляем значение yP:
yP=y. Проверяем, дошли ли мы до конца отрезка [xA,xB].
Если не дошли - то цикл продолжим, т.е. еще раз выполним шаги 9-15,
Если дошли до конца отрезка - цикл завершаем, перейдем на шаг 16. Полученное значение S являются приближенным решением задачи. Далее используем это значение для дальнейшей обработки - вывода данных в соответствующих ячейках таблицы.
ПРИМЕЧАНИЯ Задачу или шаг 15 как и в предыдущей задаче лучше возложить на оператор цикла FOR, который сам изменяет счетчик или переменную цикла и следит, чтобы эта переменная была в заданном интервале (например,
FOR I:=0 TO N DO ОПЕРАТОР;
при этом ОПЕРАТОР будет выполняться N раз).
Данный оператор должен задаваться при входе в цикл, т.е. на шаге 9. Приведенный алгоритм можно упростить.
Во-первых, ряд действий (шаги 11-13) несложно объединить.
Во-вторых, умножение в цикле (шаг 12) Dx * y можно осуществить всего один раз после выхода из цикла. В этом случае в цикле нужно суммировать значения средних линий трапеции и сохранять это значение в некой переменной (например, yS). Тогда, после завершения цикла в этой переменной будем иметь длину некой обобщенной трапеции с основанием Dx. Умножив ее Dx, получим результат:
S = Dx * yS.
Можно еще более упростить алгоритм вычислений, если воспользоваться формулой, приведенной в тексте лабораторного задания:
h[(Y(0)+Y(N))/2+Y(1)+Y(2)+ ... +Y(N-1)].