- •Постановка задачи
- •Численные методы одномерной минимизации
- •График функции
- •Поиск точного значения точки максимума с использованием необходимого и достаточного условий
- •1. Метод равномерного поиска
- •2. Метод деления интервала пополам
- •3. Метод дихотомии
- •4. Метод золотого сечения
- •5. Метод Фибоначчи
- •6. Метод квадратичной интерполяции (метод Пауэлла)
- •Сводная таблица
3. Метод дихотомии
Метод
относится к последовательным стратегиям.
Задается начальный интервал неопределенности
и требуемая точность. Алгоритм опирается
на анализ значений функции в двух точках.
Для их нахождения текущий интервал
неопределенности делится пополам и в
обе стороны от середины откладывается
по
,
где
малое положительное число. Поиск
заканчивается, если длина текущего
интервала неопределенности меньше
заданной величины.
Листинг программы:
a(1)=0;
b(1)=3;
alpha=0.02;
eps=0.004;
k=1;
L(1)=b(1)-a(1);
while L(k)>alpha
y(k)=(a(k)+b(k)-eps)/2;
fy=-0.2*y(k)-sin(2*y(k));
z(k)=(a(k)+b(k)+eps)/2;
fz=-0.2*z(k)-sin(2*z(k));
if fy>fz
a(k+1)=y(k);
b(k+1)=b(k);
else
a(k+1)=a(k);
b(k+1)=z(k);
end;
L(k+1)=b(k+1)-a(k+1);
k=k+1;
end;
k
xmin=(a(k+1)+b(k+1))/2;
fmin=-0.2*xmin-sin(2*xmin);
xmin
fmin
R=1/(2^(k/2))
Результат:
k = 9
xmin = 0.8350
fmin = -1.1621 fmax=1.1621
R = 0.0442
4. Метод золотого сечения
В методе золотого сечения в качестве двух внутренних точек выбираются точки золотого сечения.
Точка
производит золотое сечение, если
отношение длины всего отрезка к большей
части равно отношению большей части к
меньшей части. На отрезке
имеются две симметричные относительно
его концов точки
и
:
.
Точка
производит золотое сечение отрезка
,
а точка
– отрезка
.
Метод относится к последовательным стратегиям. Задается начальный интервал неопределенности и требуемая точность. Алгоритм опирается на анализ значений функции в двух точках. В качестве точек вычисления функции выбираются точки золотого сечения. На каждой итерации, кроме первой, требуется только одно новое вычисление функции. Поиск заканчивается, если длина текущего интервала неопределенности меньше заданной величины.
Листинг программы:
a(1)=0;
b(1)=3;
alpha=0.02;
delta(1)=b(1)-a(1);
k=1;
while delta(k)>alpha
y(k)=a(k)+(3-sqrt(5))*(b(k)-a(k))/2;
z(k)=a(k)+b(k)-y(k);
fy=-0.2*y(k)-sin(2*y(k));
fz=-0.2*z(k)-sin(2*z(k));
if fy<=fz
a(k+1)=a(k);
b(k+1)=z(k);
y(k+1)=a(k+1)+b(k+1)-y(k);
z(k+1)=y(k);
else
a(k+1)=y(k);
b(k+1)=b(k);
y(k+1)=z(k);
z(k+1)=a(k+1)+b(k+1)-z(k);
end;
delta(k+1)=b(k+1)-a(k+1);
k=k+1;
end;
k
xmin=(a(k)+b(k))/2;
fmin=-0.2*xmin-sin(2*xmin);
xmin
fmin
R=0.618^(k-1)
Результат:
k = 12
xmin = 0.8341
fmin = -1.1621 fmax=1.1621
R = 0.0050
5. Метод Фибоначчи
В методе Фибоначчи реализована последовательная стратегия, обеспечивающая максимальное гарантированное сокращение интервала неопределенности при заданном количестве вычисления функции. Эта стратегия опирается на числа Фибоначчи, определяемые по формуле
.
Последовательность чисел Фибоначчи имеет вид 1,1,2,3,5,8,13,23,34,55,89,144,233,.. .
Метод относится к последовательным стратегиям. Задается начальный интервал неопределенности и количество вычислений функции. Алгоритм опирается на анализ значений функции в двух точках. Точки вычисления функции находятся с использованием последовательности из чисел Фибоначчи. На каждой итерации, кроме первой, требуется только одно новое вычисление функции. Поиск заканчивается, если длина текущего интервала неопределенности меньше заданной величины.
Листинг программы:
a(1)=0;
b(1)=3;
alpha=0.02;
eps=0.004;
N=2;
L(1)=b(1)-a(1);
fi(1)=1;
fi(2)=1;
while fi(N)<(L(1)/alpha)
fi(N+1)=fi(N)+fi(N-1);
N=N+1;
end;
k=1;
y(k)=a(1)+(fi(N-2)/fi(N))*(b(1)-a(1));
z(k)=a(1)+(fi(N-1)/fi(N))*(b(1)-a(1));
while k~=N-2
fy=-0.2*y(k)-sin(2*y(k));
fz=-0.2*z(k)-sin(2*z(k));
if fy<=fz
a(k+1)=a(k);
b(k+1)=z(k);
z(k+1)=y(k);
y(k+1)=a(k+1)+(fi(N-k-3)/fi(N-k-1))*(b(k+1)-a(k+1));
else
a(k+1)=y(k);
b(k+1)=b(k);
y(k+1)=z(k);
z(k+1)=a(k+1)+(fi(N-k-2)/fi(N-k-1))*(b(k+1)-a(k+1));
end;
k=k+1;
end;
y(N-2)=z(N-2);
y(N-1)=y(N-2);
z(N-1)=y(N-1)+eps;
fy=-0.2*y(N-1)-sin(2*y(N-1));
fz=-0.2*z(N-1)-sin(2*z(N-1));
if fy<=fz
a(N-1)=a(N-2);
b(N-1)=z(N-1);
else
a(N-1)=y(N-1);
b(N-1)=b(N-2);
end;
k
xmin=(a(N-1)+b(N-1))/2;
fmin=-0.2*xmin-sin(2*xmin);
xmin
fmin
R=1/fi(N)
Результаты:
k = 11
xmin = 0.8458
fmin = -1.1619 fmax=1.1619
R = 0.0043
