Нули и экстремумы функций


Как известно, решение уравнений и поиск экстремумов функций - родственные задачи. Так решение системы fi(X)=0, i=1,...,n можно заменить поиском минимума , заведомо равного нулю, если система имеет решение. С другой стороны, поиск экстремумов функции можно свести к решению системы уравнений относительно нулевых значений ее производных.

Для некоторых классов функций имеются вполне универсаль-ные методы решения: так для полиномов поиск корней реализуется без каких-то условий обобщенным методом Ньютона - функцией roots(...) . В общем случае при великом многообразии методов реше-ние подобных задач отнюдь нетроивиально. В системе реализованы функции лишь для простейших задач без гарантий получения реше-ния.

xmin=fmin('имя',a,b), xmin=fmin('имя',a,b,<опции>), xmin= fmin ('имя', a,b,<опции>, p1,...,p10), [xmin,options]=fmin(...) - поиск минимума функции одной переменной на интервале [a,b]; в списке <опции> можно указать option(1)=1 (вывод промежуточных результатов), option(2)- погрешность итераций для аргумента (разница между смежными приближениями; по умолчанию 10-4) и option(14)- максимальное число итераций (по умолчанию 500). Используется метод золотого сечения и параболической интерполяции.

function r=m1(x)
r=x^2-x-3;
>> xm=fmin('m1',-2,3,[1, 1e-6])
Func evals x f(x) Procedure
-0.0901699 -2.9017 initial
1.09017 -2.9017 golden
1.81966 -1.5085 golden
0.5 -3.25 parabolic
0.5 -3.25 parabolic
0.5 -3.25 parabolic
xm =
0.5000

xmin=fmins('имя',x0), xmin=fmins('имя',x0,<опции>), xmin= fmins ('имя', x0,<опции>или [], p1,...,p10), [xmin,options]=fmins(...) - поиск минимума функции нескольких переменных: x0 - начальное приближение; p1,...,p10 - дополнительные параметры; в списке <опции> можно указать option(1)=1 (вывод промежуточных результа-тов), option(2)- погрешность итераций для аргумента (разница между смежными приближениями; по умолчанию 10-4), option(3)-итерационная погрешность для функции и option(14)- максимальное число итераций (по умолчанию 200 x n).

function r=m2(x)
r=(x(1)-1)^2+(x(2)-3)^2;
>> [xmin,opt]=fmins('m2',[0.5 2.5])
xmin =
1.0000 3.0000  
opt =
0.0001 0.0001 0.0000 0.0000  
0.0000 0.1000

(возвращаемые здесь опции 8 и 10 определяют минимум функции и число итераций). Используется метод Нелдера-Мида (строится симплекс из n+1 вершины в n-мерном пространстве, берется новая точка внутри или вблизи симплекса и может заменить одну из вершин; процесс повторяется до малого диаметра симплекса).

fzero('имя',x0), fzero('имя',x0,eps), fzero ('имя', x0, eps , trace), fzero ('имя', x0, eps, trace,p1,...,p10) - поиск действительных корней функции одной переменной при начальном приближении х0 (можно взять и в форме [a,b] при условии f(a) x f(b) < 0) с заданной относительной погрешностью; trace=1 - вывод промежуточных результатов. Используется метод дихотомии, хорд и обратной квадратической интерполяции. При поиске корней полинома см.roots.

Процесс поиска корня виден из примера:

>>> fzero('sin',6,[],1)
Func evals x f(x) Procedure
-0.279415 initial
5.83029 -0.437567 search
6.16971 -0.113236 search
5.76 -0.499642 search
6.24 -0.0431719 search
5.66059 -0.583146 search
6.33941 0.0561963 search
Looking for a zero in the interval [5.6606, 6.3394]
6.27974 -0.00344052 interpolation
6.28319 1.70244e-006 interpolation
6.28319 -3.35667e-012 interpolation
6.28319 -2.44921e-016 interpolation
6.28319 2.41961e-015 interpolation
ans = 6.28318530717959
>> 2*pi
ans = 6.28318530717959

Заметим, что в случае двух переменных существенную помощь для выбора начального приближения может оказать функция gradient (cм. 8.2) и contour(...), которая будет рассмотрена при ознакомлении с функциями графики.