Метод золотого сечения. Симметричные методы
Материал из 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

