Метод парабол

Метод золотого сечения является надежным, но медленным. Так, в предыдущем примере поиска минимума для достижения точности 10 десятичных знаков потребовалось 50 ¸ 60 итераций. Если функция дифференцируема, то возможно использовать гораздо более быстрые методы отыскания экстремума, основанные на решении уравнения F¢(x) = 0. Если функция имеет вторую производную и в точке экстремума F¢¢(x) > 0, то это, как известно, минимум, если F¢¢(x) < 0, то — максимум.

Разложим функцию F(x) в ряд Тейлора в точке xs, оставляя первые три члена ряда, тогда

. (11)

 

Рис.3,а. График минимизируемой функции Рис.3,б. Выход на первый локальный минимум (xmin = 1)
Рис.3,б. Выход на второй локальный минимум (xmin = 2) Рис.3,б. Выход на третий локальный минимум (xmin = 3)

 

Согласно (11), исходная функция аппроксимирована параболой, которая принимает экстремальное значение (либо минимум, либо максимум) в точке

. (12)

Если положить в (12) x = xs+1 получим итерационный процесс, который при удачном выборе начального приближения быстро сходится к точке экстремума функции. Поскольку итерационный процесс (12) ньютоновского типа, постольку он, как установлено выше, сходится квадратично.

Часто как первая, так и вторая производные функции выглядят громоздко. В этом случае производные возможно заменить соответствующими конечными разностями. Для первой производной выберем центральную разность, а для второй — симметричную вторую разность. В итоге получим:

. (13)

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

Выведем формулу (13). Запишем интерполяционную параболу: y = a + bx + cx2. Для нахождения неизвестных коэффициентов a, b, c составим систему уравнений:

(14)

Решим систему уравнений (14), используя аналитические средства вычислений в MATLAB. Кроме того, найдем значение аргумента x, в котором парабола y = a + bx + cx2достигает экстремального значения. На листинге_№2 приведен код соответствующей программы.

 

Листинг_№2

%Программа нахождения коэффициентов

%интерполяционной параболы в методе

%парабол нахождения экстремальных точек

%очищаем рабочее пространство

clear all

%определяем символические переменные

syms xs h

%определяем значения интерполируемой функции

%в точках xs-h, xs и xs+h соответственно

syms Fsm Fs Fsp

%определяем матрицу линейной системы

%уравнений (14) относительно неизвестных a, b, c

A=[1 xs-h (xs-h)^2;1 xs xs^2;1 xs+h (xs+h)^2];

%определяем правую часть r линейной

%системы уравнений

r=[Fsm;Fs;Fsp];

%символически решаем линейную систему уравнений

abc=A\r;

%искомое положение точки экстремума параболы xps

%находится, как известно, из соотношения -b/2c

xps=-abc(2)/(2*abc(3))

 

Итог работы кода программы листинга_№2 дает следующее выражение:

xps =

 

1/2*(-4*xs*Fs+2*xs*Fsp+2*xs*Fsm-h*Fsp+Fsm*h)/(-2*Fs+Fsp+Fsm)

Это выражение, как нетрудно проверить, полностью совпадает с уравнением (14), когда xps = xs+1, Fsm = F(xs-h), Fs = F(xs), Fsp = F(xs+h).

Рассмотрим пример работы метода парабол. Возьмем функцию F следующего вида: F(x) = cos(p x2), экстремумы которой, как нетрудно проверить, находятся в точках При изучении метода парабол будем стартовать с разных начальных данных и посмотрим на характер сходимости к экстремумам изучаемой функции. На листинге_№3 приведен код соответствующей программы.

 

Листинг_№3

%Программа, иллюстрирующая работу метода

%парабол на примере поиска положений

%экстремумов функции F(x)=cos(pi*x^2)

%очищаем рабочее пространство

clear all

%определяем функцию, значения экстремумов

%которой определяются

F=@(x)cos(pi*x^2);

%определяем параметр h метода парабол

h=1e-4;

%определяем число итераций в методе парабол

iterm=10;

%задаем набор начальных значений

x0=-1.6:0.05:1.6;

%организуем цикл расчетов по методу парабол

%стартуя с каждого начального значения

for i=1:length(x0)

xs=x0(i);

iter=1; x(1)=xs;

%организуем цикл итераций метода парабол

while iter<iterm

xs=xs-0.5*h*((F(xs+h)-F(xs-h))/...

(F(xs+h)-2*F(xs)+F(xs-h)));

iter=iter+1; x(iter)=xs;

end

%наносим очередной график зависимости

%значений итераций от номера итераций

plot(1:iter,x);

hold on

end

 

На рис.4 приведен итог работы кода программы листинга_№3. Рис.4 демонстрирует, во-первых, очень быструю сходимость (в пределах 10 итераций достигается точность 8 знаков после запятой, кроме нулевой точки) к одному из локальных экстремумов функции F(x) = cos(p x2), во-вторых, график иллюстрирует довольно сложную зависимость между начальным приближением и выходом на то или иное экстремальное значение. На рис.4 представлено 65 расчетов методом парабол при выборе различных начальных данных. Точнее говоря, был рассмотрен отрезок [-1,6;1,6], на котором выбрана равномерная сетка с шагом 0,05, т.е. начальные данные x0 выбирались согласно формуле: x0i = -1,6 + 0,05(i - 1), i = 1,…,65. При этом было найдено 13 локальных минимумов: 0, ±1, ±Ö2, ±Ö3, ±Ö5, ±Ö6, ±.

 

Рис.4. Демонстрация характера связи начальных значений с
экстремальными точками изучаемой функции