Алгоритм нахождения максимума функции

Простейшая задача нахождения максимума функции решается по следующему алгоритму:

1. Задаются границы a и b, в пределах которых имеется максимум функции.

2. Интервал [a,b] разбивается на определенное количество шагов.

3. Функция табулируется в пределах заданного интервала, и каждое вычисленное значение функции сравнивается с максимальным (заданным до начала табулирования).

4. Находится максимальное значение функции на заданном интервале с определенным шагом и выводится на печать.

БЛОК-СХЕМА АЛГОРИТМА ИМЕЕТ ВИД:

Алгоритм нахождения максимума функции - student2.ru

Рис. 4. Блок – схема алгоритма нахождения максимума функции

Естественно, что с уменьшением шага изменения аргумента точность вычисления максимума увеличивается.

Можно воспользоваться и следующим алгоритмом:

1. Найти значение максимума по алгоритму, представленному выше.

2. Для дальнейшего рассмотрения выбрать отрезок [xmax-dx, xmax+dx] и выполнить вычисление максимума с шагом, например, dx/10.

3. Сравнить два найденных значения.

max1 – значение максимума с шагом dx и max2 – значение максимума с шагом dx/10. Если |max2-max1| <=E (где Е – заданная степень точности вычисления), то закончить решение задачи и max2 вывести на печать, если нет, то вычисление продолжить дальше, повторяя п.2.

Такую задачу удобнее решать, используя процедуру нахождения максимального значения функции.

Блок – схема решения задачи имеет вид:

Алгоритм нахождения максимума функции - student2.ru

Рис. 5. Блок – схема алгоритма нахождения максимума функции

Методы оптимизации функций одной переменной

Метод равномерного поиска

Этот метод основан на том, что переменной x присваиваются значения x+∆x с шагом ∆x = const и вычисляются значения F(x). Если F(x n+1)>F(xn), переменной x даётся новое приращение. Как только F(xn+1)станет меньше F(x) поиск останавливается. При малой заданной погрешности этот метод неэкономичен по затратам машинного времени.

Метод поразрядного приближения

Этот метод является разновидностью метода равномерного поиска и реализуется следующим алгоритмом:

1. Задаём начальное приближение x=x₀ слева от максимума F(x) и вычисляем F(x₀). Задаём D=h, где h=∆x – начальный шаг поиска.

2. Полагаем, что G=F(xn), где вначале F(xn)=F(x₀), задаём x=x+D и вычисляем F(x n+1)=F(x).

3. Проверяем условие F(x n₊₁)>G; если оно выполняется, идём к п.2, если нет, то к п.4.

4. Полагаем D=-D/4. Проверяем условие |D|>E/4, где E – заданная погрешность вычисления xn в точке максимума. Если оно выполняется, идём к п.2, т.е. обеспечиваем поиск максимума в другом направлении с шагом в 4 раза меньше прежнего. Если данное условие выполняется, процесс вычисления заканчиваем.

Метод дихотомии

Метод дихотомии (деление интервала поиска [a, b] пополам) реализуется следующим алгоритмом:

1. Проверяем условие |b-a|<2E, где E – заданная погрешность вычисления xn. Если это условие выполняется, идём к п.6; если не выполняется, идём к п.2.

2. Делим интервал поиска [a, b] пополам и вычисляем две абсциссы, симметрично расположенные относительно точки

x=(a + b)/2

x1=(a + b - E)/2 и x2=(a + b + E)/2

3. Для этих значений x вычисляем F(x₁)>F(x₂).

4. Проверяем условие F(x₁)>F(x₂). Если оно выполняется, полагаем b=x₂ и идём к п.1. Если не выполняется, идём к п.5.

5. Полагаем a=x₁ и идём к п.1.

6. Выводим на печать xn=(a+b)/2 и вычисляем F(xn).

Метод Фибоначчи

В методе Фибоначчи точка деления интервала исследования определяется с каждым новым расчётом (в методе дихотомии необходимо на каждом шаге выполнять два расчёта). В интервал исследования попадет предыдущий расчёт и для продолжения поиска достаточно произвести расчёт симметрично имеющемуся.

Допустим, задано число расчётов (шагов) N. Необходимо их произвести так, чтобы интервал, в котором лежит оптимум, был минимальным. Числа Фибоначчи, используемые в этом методе, определяются следующим образом:

FN=FN-1+FN-2

F0=F1=1

Алгоритм метода Фибоначчи состоит из следующих этапов:

1) Изменяют масштаб исходного интервала, в котором лежит оптимум. В качестве единицы измерения принимают 1=X₀/FN, или если задана длина l, в котором лежит оптимум, находят его на исходном интервале длиной X₀. Для этого, разделив X₀ на 1, находят ближайшее большее число Фибоначчи FN,
а по нему определяют N – число необходимых расчётов для определения интервала.

2) Расставляют первые две точки Алгоритм нахождения максимума функции - student2.ru и Алгоритм нахождения максимума функции - student2.ru на интервале исследования X0 на расстоянии FN-2 от конца b.

3) Вычисляют значение целевой функции в этих точках для сужения интервала исследования. Пусть Алгоритм нахождения максимума функции - student2.ru > Алгоритм нахождения максимума функции - student2.ru , тогда интервал [ Алгоритм нахождения максимума функции - student2.ru , FN] исключается из рассмотрения.

4) На новом интервале исследования снова расставляют две точки Алгоритм нахождения максимума функции - student2.ru и Алгоритм нахождения максимума функции - student2.ru , но в одной из них уже известно значение целевой функции Алгоритм нахождения максимума функции - student2.ru = Алгоритм нахождения максимума функции - student2.ru .

5) Переходят к этапу 3 и т.д., пока не достигают искомого интервала, в котором находится значение переменной, максимизирующее её целевую функцию.

Алгоритм нахождения максимума функции - student2.ru На рис. 6 показан процесс сужения интервала исследования:

Рис. 6. Процесс сужения интервала исследования.

Последний N–й расчёт определяет интервал длиной l, в котором находится экстремум целевой функции.

Метод золотого сечения

Алгоритм нахождения максимума функции - student2.ru Золотое сечение проводит деление отрезка АВ на две неравные части так, чтобы было справедливо соотношение (рис. 7).

Рис. 7

Метод золотого сечения позволяет сужать отрезок [a, b] каждый раз вычисляя лишь одно значение F(x), а не два, как в методе дихотомии.

Данный метод реализуется следующим алгоритмом:

1. Находим коэффициент дробления k=(√5-1)/2 отрезка [a, b].

2. Находим абсциссу х1=a + (1-k)*(b-a) и вычисляем F(x1).

3. Находим абсциссу х2=a + k*(b-a) и вычисляем F(х2).

4. Проверяем выполнение условия |x2-x1|<E, где E – заданная погрешность вычисления xn. Если это условие выполняется, вычисляем xn = (x1+ x2)/2 и F(xn), после чего останавливаем счёт с выдачей значений xm и F(xn). Если данное условие не выполняется, идём к п.5.

5. Проверяем условие F(x1) < F(x2). Если оно выполняется, полагаем, а = х1, х1 = х2 и F(x1) = F(x2), после чего идём к п.3. и п.4.

Если F(x1) ≥ F(x2), полагаем b = x2, x2 = x1, f(x1) = f(x2), после чего выполняем п.2 и п.4

Наши рекомендации