Метод золотого сечения. Симметричные методы
Материал из MachineLearning.
(→Метод деления отрезка пополам) |
|||
(11 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
== Постановка задачи == | == Постановка задачи == | ||
- | В данной статье рассмотрены | + | В данной статье рассмотрены [[#Симметричные методы| симметричные методы]] поиска экстремума функции одного переменного. |
Пусть дана функция <tex>y=f(x)</tex>, необходимо найти минимум этой функции на заданном отрезке <tex>[a, \quad b]</tex> (задача максимума решается аналогично). | Пусть дана функция <tex>y=f(x)</tex>, необходимо найти минимум этой функции на заданном отрезке <tex>[a, \quad b]</tex> (задача максимума решается аналогично). | ||
Строка 22: | Строка 22: | ||
'''''Далее будем рассматривать только унимодальные функции. При этом предполагаем, что они определены в достаточном количестве точек.''''' | '''''Далее будем рассматривать только унимодальные функции. При этом предполагаем, что они определены в достаточном количестве точек.''''' | ||
- | == | + | == Симметричные методы == |
В классе '''симметричных методов''' на каждом шаге выбирается две точки отрезка <tex>x_1</tex> и <tex>x_2</tex>, симметрично расположенных относительно центра этого отрезка. Дальнейшие действия определяются свойством унимодальной функции: <br /> | В классе '''симметричных методов''' на каждом шаге выбирается две точки отрезка <tex>x_1</tex> и <tex>x_2</tex>, симметрично расположенных относительно центра этого отрезка. Дальнейшие действия определяются свойством унимодальной функции: <br /> | ||
Пусть функция <tex>f(x)</tex> унимодальна на отрезке <tex>[a, \quad b]</tex>, а ее минимум достигается в точке <tex>x^{\ast}</tex>. Для любых точек <tex>x_1</tex> и <tex>x_2</tex> этого отрезка и таких, что <tex>a < x_1 < x_2 < b</tex> верно следующее: | Пусть функция <tex>f(x)</tex> унимодальна на отрезке <tex>[a, \quad b]</tex>, а ее минимум достигается в точке <tex>x^{\ast}</tex>. Для любых точек <tex>x_1</tex> и <tex>x_2</tex> этого отрезка и таких, что <tex>a < x_1 < x_2 < b</tex> верно следующее: | ||
Строка 34: | Строка 34: | ||
Соответственно, методы различаются способом выбора симметричных точек <tex>x_1</tex> и <tex>x_2</tex>. | Соответственно, методы различаются способом выбора симметричных точек <tex>x_1</tex> и <tex>x_2</tex>. | ||
+ | ---- | ||
===Метод деления отрезка пополам=== | ===Метод деления отрезка пополам=== | ||
+ | ====Описание метода==== | ||
Параметры на входе: <tex>\delta, \quad \epsilon</tex> - достаточно малые положительные константы. | Параметры на входе: <tex>\delta, \quad \epsilon</tex> - достаточно малые положительные константы. | ||
Строка 47: | Строка 49: | ||
5. пока <tex>\frac{b-a}{2} \geq \epsilon</tex>; | 5. пока <tex>\frac{b-a}{2} \geq \epsilon</tex>; | ||
- | 6. <tex>x^{\ast}=\frac{a+b}{2}</tex>. | + | 6. <tex> \tilde{x}^{\ast}=\frac{a+b}{2}</tex>. |
+ | |||
+ | ====Анализ метода==== | ||
+ | |||
+ | Считаем, что один шаг - это один этап цикла (п. 2-4). | ||
+ | |||
+ | Изначальная длина отрезка составляет <tex>\Delta_0=a-b</tex>. | ||
+ | |||
+ | После первого шага: <tex>\Delta_1=\frac{a-b}{2}+(1-\frac{1}{2}) \delta</tex>, | ||
+ | |||
+ | После <tex>k</tex>-го шага: <tex>\Delta_k=\frac{a-b}{2^k}+(1-\frac{1}{2^k}) \delta</tex>. | ||
+ | |||
+ | Если мы останавливаемся на <tex>k</tex>-м шаге, то погрешность результата составит: <br /> | ||
+ | :<tex>|x^{\ast}-\tilde{x}^{\ast}| \quad < \quad \frac{1}{2}\Delta_k \quad = \quad \frac{a-b- \delta}{2^{k+1}}+ \frac{\delta}{2}</tex> | ||
+ | |||
+ | Таким образом, чтобы погрешность вычисления была менее <tex>\epsilon</tex>, должна выполняться оценка на число шагов: | ||
+ | |||
+ | :<tex>k>\log_2 (\frac{b - a - \delta}{\epsilon - \frac{\delta}{2} }) - 1</tex> | ||
+ | |||
+ | На каждом шаге необходимо вычислить значение функции в 2х точках, соответственно, при <tex>k</tex> шагах вычисляется <tex>N=2k</tex> значений. | ||
+ | |||
+ | ''Недостаток'': | ||
+ | |||
+ | *Информация о значении функции в точках <tex>x_1</tex> и <tex>x_2</tex> используется только на одном шаге. | ||
+ | |||
+ | ---- | ||
===Метод золотого сечения=== | ===Метод золотого сечения=== | ||
- | |||
- | == | + | '''Определение: ''' |
+ | |||
+ | Говорят, что точка <tex>x</tex> осуществляет золотое сечение отрезка <tex>[a, \quad b]</tex>, если | ||
+ | |||
+ | <center><tex>\frac{b-a}{b-x}=\frac{b-x}{x-a}=\phi=\frac{1+\sqrt{5} }{2}</tex></center> | ||
+ | |||
+ | |||
+ | В качестве <tex>x_1</tex> и <tex>x_2</tex> выберем точку золотого сечения отрезка и симметричную ей. Если <tex>a<x_1<x_2<b</tex>, то при указанном выборе точек получаем, что <tex>x_1</tex> - точка золотого сечения отрезка <tex>[a, \quad x_2]</tex>, а <tex>x_2</tex> - точка золотого сечения отрезка <tex>[x_1, \quad b]</tex>. Таким образом, на каждом шаге, кроме первого, необходимо вычислять значение только в одной точке, вторая берется из предыдущего шага. | ||
+ | |||
+ | ====Описание метода==== | ||
+ | |||
+ | Параметр на входе: <tex> \epsilon</tex> - достаточно малая положительная константа, погрешность метода. | ||
+ | |||
+ | 1. <tex>x_1 = b-\frac{b-a}{\phi}, \quad x_2 = a+\frac{b-a}{\phi}</tex> | ||
+ | |||
+ | 2. Повторять: | ||
+ | |||
+ | :3. Если <tex>f(x_1) > f(x_2)</tex>, то <tex>a=x_1, \quad x_1=x_2, \quad x_2=b-(x_1-a)</tex>; | ||
+ | |||
+ | :4. Если <tex>f(x_1) < f(x_2)</tex>, то <tex>b=x_2, \quad x_2=x_1, \quad x_1=a+(b-x_2)</tex>; | ||
+ | |||
+ | 5. пока <tex>\frac{b-a}{2} \geq \epsilon</tex>; | ||
+ | |||
+ | 6. <tex> \tilde{x}^{\ast}=\frac{a+b}{2}</tex>. | ||
+ | ====Анализ метода==== | ||
+ | Считаем, что один шаг - это один этап цикла (п. 3-4), <tex>\lambda=\frac{1}{\phi}=\frac{\sqrt{5}-1}{2}</tex>. Тогда, считая длину отрезка на каждом шаге <tex>\Delta_k </tex>, получаем: | ||
+ | |||
+ | :<tex>\Delta_0=a-b</tex>; | ||
+ | |||
+ | :<tex>\Delta_1=\lambda(b-a)=\lambda\Delta_0 </tex>; | ||
+ | |||
+ | :<tex>\Delta_{k+2}=\Delta_k-\Delta_{k+1}</tex>; | ||
+ | |||
+ | Нетрудно проверить, что | ||
+ | |||
+ | {{eqno|1}} | ||
+ | :<tex>\Delta_k=\Delta_k(\lambda)=(-1)^{k-1}(F_k\lambda-F_{k-1})\Delta_0</tex>, где <tex>F_k</tex>-[http://ru.wikipedia.org/wiki/Числа_Фибоначчи числа Фибоначчи]. | ||
+ | |||
+ | С другой стороны, выполняется равенство: | ||
+ | |||
+ | {{eqno|2}} | ||
+ | :<tex>\Delta_k(\lambda)=\lambda^k\Delta_0<0,7^k\Delta_0</tex> | ||
+ | |||
+ | Чтобы погрешность вычисления была менее <tex>\epsilon</tex>, должна по крайней мере выполняться оценка на число шагов: | ||
+ | |||
+ | :<tex>k>\frac{1}{\log_{0,7}\frac{2\Delta_0}{\epsilon}}</tex> | ||
+ | |||
+ | Тогда значение будет вычисляться в <tex>N=k+1</tex>точках. | ||
+ | |||
+ | '''Недостаток''': | ||
+ | |||
+ | *Неустойчивость относительно ошибок округления: мы получаем приблизительные значения чисел <tex>\phi</tex> и <tex>\lambda</tex>, дальнейшие вычисления только накапливают ошибки, что может привести к нарушению условия вложенности отрезков <tex>[a_k, \quad b_k]</tex> и расходимости процесса. | ||
+ | |||
+ | Пусть <tex>\lambda</tex> вычисляется с погрешностью <tex>\delta</tex> | ||
+ | |||
+ | Тогда имеем: <tex>\tilde{\lambda}=\lambda+\delta</tex> | ||
+ | |||
+ | Из {{eqref|1}}: | ||
+ | |||
+ | :<tex>\Delta_k(\tilde{\lambda})=(-1)^{k-1}(F_k(\lambda+\delta)-F_{k-1})\Delta_0= \Delta_k(\lambda)+(-1)^{k-1}\delta F_k \Delta_0</tex>. | ||
+ | |||
+ | Подставляем {{eqref|2}}: | ||
+ | |||
+ | {{eqno|3}} | ||
+ | :<tex>\Delta_k(\tilde{\lambda})=\lambda^k\Delta_0+(-1)^{k-1}\delta F_k \Delta_0</tex>. | ||
+ | |||
+ | Известно, что последовательность <tex>\{\Delta_k(\lambda)\}</tex> сходится при <tex>k \to \infty</tex>, В то же время <tex>F_k \to +\infty</tex>, поэтому <tex>|\Delta_k(\tilde{\lambda})| \to +\infty</tex>. | ||
+ | |||
+ | При этом числа Фибоначчи растут со скоростью геометрической прогрессии, знаменателем которой является число <tex>\phi</tex>. Вследствие этого при фиксированной точности "раскачка" процесса происходит довольно быстро. | ||
+ | |||
+ | ====Рекомендации в выборе параметров==== | ||
+ | |||
+ | Для сходимости процесса необходимо согласовывать точность <tex>\delta</tex> вычисления величины <tex>\lambda</tex> с заданной точностью <tex>\epsilon</tex> результата. | ||
+ | |||
+ | Из {{eqref|3}} получаем, что при | ||
+ | :<tex>\big(\frac{\sqrt{5}-1}{2}\big)^k\Delta_0 \leq \frac{\epsilon}{2}</tex> и <tex>|\delta| \leq \frac{\epsilon}{2F_k\Delta_0}</tex>, | ||
+ | будет выполняться <tex>\Delta_k(\tilde{\lambda}) \leq \epsilon</tex> | ||
+ | |||
== Числовой пример == | == Числовой пример == | ||
- | |||
== Заключение == | == Заключение == | ||
== Список литературы == | == Список литературы == |
Текущая версия
Содержание |
Постановка задачи
В данной статье рассмотрены симметричные методы поиска экстремума функции одного переменного.
Пусть дана функция , необходимо найти минимум этой функции на заданном отрезке (задача максимума решается аналогично). Предполагается, что производная функции либо не существует, либо сложно вычислима, что не позволяет свести задачу к поиску корней производной .
Методы заключаются в построении последовательности отрезков , стаягивающихся к точке .
Проанализируем симметричные методы поиска и оценим их эффективность и точность.
Требования к функции
Рассматривая все функции, пусть даже непрерывные, можно построить такой пример, что , хотя .
Гарантировать применимость рассматриваемых методов можно только для унимодальных функций.
Определение : Функция называется унимодальной на отрезке , если ∃! точка минимума на этом отрезке такая, что для любых точек этого отрезка
Другими словами унимодальная функция монотонна на обе стороны от точки минимума . Аналогично определяется унимодальная функция и для задачи на максимум. Унимодальные функции могут быть непрерывными, разрывными, дискретными...
Далее будем рассматривать только унимодальные функции. При этом предполагаем, что они определены в достаточном количестве точек.
Симметричные методы
В классе симметричных методов на каждом шаге выбирается две точки отрезка и , симметрично расположенных относительно центра этого отрезка. Дальнейшие действия определяются свойством унимодальной функции:
Пусть функция унимодальна на отрезке , а ее минимум достигается в точке . Для любых точек и этого отрезка и таких, что верно следующее:
- если , то точка минимума ,
- если , то точка минимума .
Исходя из определения методов, видно, что всякий симметричный метод полностью определяется заданием отрезка и правилом выбора первой точки. Тогда другая точка находится по правилу общему для всех симметричных методов:
.
Соответственно, методы различаются способом выбора симметричных точек и .
Метод деления отрезка пополам
Описание метода
Параметры на входе: - достаточно малые положительные константы.
1. Повторять:
- 2. ;
- 3. Если , то ;
- 4. Если , то ;
5. пока ;
6. .
Анализ метода
Считаем, что один шаг - это один этап цикла (п. 2-4).
Изначальная длина отрезка составляет .
После первого шага: ,
После -го шага: .
Если мы останавливаемся на -м шаге, то погрешность результата составит:
Таким образом, чтобы погрешность вычисления была менее , должна выполняться оценка на число шагов:
На каждом шаге необходимо вычислить значение функции в 2х точках, соответственно, при шагах вычисляется значений.
Недостаток:
- Информация о значении функции в точках и используется только на одном шаге.
Метод золотого сечения
Определение:
Говорят, что точка осуществляет золотое сечение отрезка , если
В качестве и выберем точку золотого сечения отрезка и симметричную ей. Если , то при указанном выборе точек получаем, что - точка золотого сечения отрезка , а - точка золотого сечения отрезка . Таким образом, на каждом шаге, кроме первого, необходимо вычислять значение только в одной точке, вторая берется из предыдущего шага.
Описание метода
Параметр на входе: - достаточно малая положительная константа, погрешность метода.
1.
2. Повторять:
- 3. Если , то ;
- 4. Если , то ;
5. пока ;
6. .
Анализ метода
Считаем, что один шаг - это один этап цикла (п. 3-4), . Тогда, считая длину отрезка на каждом шаге , получаем:
- ;
- ;
- ;
Нетрудно проверить, что
- , где -числа Фибоначчи.
С другой стороны, выполняется равенство:
Чтобы погрешность вычисления была менее , должна по крайней мере выполняться оценка на число шагов:
Тогда значение будет вычисляться в точках.
Недостаток:
- Неустойчивость относительно ошибок округления: мы получаем приблизительные значения чисел и , дальнейшие вычисления только накапливают ошибки, что может привести к нарушению условия вложенности отрезков и расходимости процесса.
Пусть вычисляется с погрешностью
Тогда имеем:
Из (1):
- .
Подставляем (2):
- .
Известно, что последовательность сходится при , В то же время , поэтому .
При этом числа Фибоначчи растут со скоростью геометрической прогрессии, знаменателем которой является число . Вследствие этого при фиксированной точности "раскачка" процесса происходит довольно быстро.
Рекомендации в выборе параметров
Для сходимости процесса необходимо согласовывать точность вычисления величины с заданной точностью результата.
Из (3) получаем, что при
- и ,
будет выполняться
Числовой пример
Заключение
Список литературы
- Карманов В.Г. Математическое программирование: Учебное пособие. - М.:ФИЗМАТЛИТ, 2004
- Горячев Л.В. Одномерная минимизация. Методические указания к самостоятельной работе студентов по курсу “Методы оптимизации” - кафедра процессов управления ДВГУ, 2003