Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология программирования / ИТ / Лекции_Технология_прогр.doc
Скачиваний:
115
Добавлен:
17.05.2015
Размер:
848.38 Кб
Скачать

Метод прямоугольников

Допустим, нам нужно найти приближенно площадь фигуры, ограниченной осью абсцисс и кривой на промежутке[a;b].

Идея метода: криволинейная фигура разбивается на много узких полосок, каждая полоска заменяется прямоугольником. Площадь фигуры приближенно равна сумме площадей этих прямоугольников.

Для решения задачи разобьем фигуру на n полосок. Каждую из них заменим прямоугольником шириной, равной 1/n отрезка [a,b], и высотой, равной значению функции в средней точке разбиения1. Площадь каждого из них равна произведению ширины на высоту.

Понятно, что чем больше полосок, тем точнее получается результат2.

Для вычисления суммы можно воспользоваться любой инструкцией цикла из описанных в предыдущем параграфе. Воспользуемся циклом в предусловием.

Фрагмент программы, предназначенный для вычисления площади, может выглядеть примерно так:

w:=(b-a)/n; {вычисляем ширину полоски}

s:=0; {переменная для накопления площади}

x:=a; {начальное значение х}

while x < b do {продолжаем вычисление, пока не дошли до конца отрезка }

begin

s:=s+w*f(x); {добавляем к s площадь очередной полоски}

x:=x+w; {переходим к следующей полоске}

end;

Для того чтобы программа была работоспособной и выдавала результат, следует добавить описание всех используемых переменных и предусмотреть выдачу результата (переменной s) с помощью какого-либо подходящего компонента (Edit или Label) с соответствующим преобразованием данных.

Метод Монте-Карло

Метод Монте-Карло – общее название вычислительных методов, в которых для вычисления какой-либо величины используется датчик случайных чисел (по названию города Монте-Карло, где расположено множество игорных заведений).

Идея метода: смоделировать случайное «бросание» большого количества точек в прямоугольник, содержащий криволинейную фигуру. При этом отношение числа точек, попавших внутрь фигуры, к общему числу точек будет приближенно равно отношению площади фигуры к площади прямоугольника. Понятно, что чем больше точек, тем точнее результат, однако оценить точность при использовании метода Монте-Карло не удается.

Для программирования этого метода в Паскале (как и в большинстве языков программирования) имеется функция random, моделирующая датчик случайных чисел. У этой функции есть два варианта написания (еще одно проявление полиморфизма).

k:=random(n); – дает целое случайное число в диапазоне , гдеn тоже целое число;

a:=random; – дает вещественное число в диапазоне .

Для решения нашей задачи более удобен второй вариант, т. к. размеры фигуры могут быть маленькие, и целочисленных точек там может вообще не оказаться.

Из рассмотренных типов цикла можно выбрать любой. Воспользуемся циклом с параметром.

Возьмем, к примеру, n=10000 точек. Прямоугольник, содержащий фигуру, имеет размеры , где – наибольшее значение функции на отрезке.

Фрагмент программы, предназначенный для вычисления площади, может выглядеть примерно так:

k:=0; {количество точек, попавших в фигуру}

for i:=1 to n do {моделируем n бросаний }

begin

x:=random*(b-a)+a;{случайная координата x}

y:=random*h; {случайная координата y}

if y<=f(x) {если точка попала в фигуру}

then k:=k+1;

end;

s:=(b-a)*h*k/n;{площадь прямоугольника (b-a)*h умножаем на число попавших в фигуру точек и делим на общее число точек }

Соседние файлы в папке ИТ