logo
Лаб ЧМ для АЭС

Изучение алгоритмов численного нахождения минимума функции нескольких переменных в Excel

Найдем минимум функции F(x,y)=sin(y)*cos(x) в области x[‑3,3], y[-3,0]. Чтобы представить себе тип исследуемой поверхности, постройте в программе MathCAD её график.

Метод покоординатного спуска.

Задание 1: Начинать можно с любой точки (x0,y0), принадлежащей указанной области.

1 шаг: фиксируем одну координату (присваиваем ей некоторое конкретное значение), например, координату x. Находим экстремум получившейся функции одной переменной y либо аналитически, либо любым из изученных численных методов. В результате получили некоторое промежуточное значение ymin1.

2 шаг: фиксируем другую координату y = ymin1. Находим экстремум получившейся функции одной переменной x. В результате получили некоторое промежуточное значение xmin1.

3 шаг: снова фиксируем первую координату x = xmin1. Находим экстремум получившейся функции одной переменной y любым из изученных методов. В результате получили некоторое промежуточное значение ymin2.

4 шаг: получаем значение xmin2.

И т.д.

Расчет заканчиваем в том случае, когда расстояние d от предыдущей точки (xmini-1, ymini-1) до точки, полученной в результате последней итерации (xmini, ymini), станет меньше выбранной вами точности. Результаты промежуточных вычислений оформите в виде таблицы.

Метод Хука-Дживса.

Задание 2: Исследующий поиск начинать можно с любой точки (x0,y0), принадлежащей указанной области. Далее нужно выбрать величину шага, которая может быть различной для разных координатных направлений. Для удобства выберите одинаковый шаг h=0,1.

1 шаг: считаем значение функции в базовой точке F0=F(x0,y0). Делаем шаг вправо и считаем значение функции в найденной точке F01=F(x0+h,y0). Если F01<F0, то мы сделали шаг в нужном направлении, в обратном случае делаем шаг влево и считаем значение функции в другой точке F02=F(x0-h,y0). Если F02<F0, значит, мы сделали шаг в нужном направлении, в обратном случае координата x на этом шаге не изменяется.

Теперь делаем шаг вверх и считаем значение функции в найденной точке F03=F(x0,y0+h). Если F03<F0, то мы сделали шаг в нужном направлении, в обратном случае делаем шаг влево и считаем значение функции в другой точке F04=F(x0,y0-h). Если F04<F0, значит, мы сделали шаг в нужном направлении, в обратном случае нужно уменьшить значение шага (например, вдвое), так как мы подошли слишком близко к точке минимума.

В результате вышеописанных действий мы получили новое значение базовой точки (x1,y1).

2 шаг: Считаем значение функции в базовой точке F1=F(x1,y1). Попытаемся выполнить поиск по образцу. Делаем такие же шаги в направлении обеих осей, которые привели к успеху на шаге 1. Получаем точку (x2,y2), считаем значение F2=F(x2,y2). Если F2<F1, поиск по образцу завершился успехом, и шаг 2 можно повторить. В противном случае возвращаемся к шагу 1 с базовой точкой (x1,y1).

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

H

x

y

x+h

x-h

y+h

y-h

f(x,y)

f(x+h,y)

f(x-h,y)

f(x,y+h)

f(x,y-h)

[…]

[…]

[…]

[…]

[…]

[…]

[…]

[…]

[…]

[…]

[…]

[…]

Расчет заканчиваем, когда значение шага будет меньше выбранной вами точности (не более 0,01).

Метод градиентного спуска.

Задание 3: Будем двигаться к минимуму в направлении наиболее быстрого убывания функции (в антиградиентном направлении). Выберите некоторое начальное приближение (x0,y0) и найдите в данной точке значения градиента hx=F/x при x = x0 и hy=F/y при y = y0. Теперь нам нужно сделать шаг в антиградиентном направлении: xi = xi-1 - α·hx, yi = yi-1 - α·hy. Расчет заканчиваем в том случае, когда расстояние d от предыдущей точки (xi-1, yi-1) до точки, полученной в результате последней итерации (xi, yi), станет меньше выбранной вами точности. Результаты промежуточных вычислений оформите в виде таблицы:

α

x

y

d/dx

d/dy

f(x,y)

d

[…]

[…]

[…]

[…]

[…]

[…]

[…]