Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка / MetRec02-2

.htm
Скачиваний:
14
Добавлен:
09.12.2013
Размер:
5.8 Кб
Скачать

Алгоритмические языки и программирование Задача 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)].

Соседние файлы в папке Методичка