Поиск минимального значения функции

В системе MATLAB имеются функции, осуществляющие поиск минимальных значений (минимумов) заданных функций, причем как для функций одной переменной, так и для функций многих переменных.

В частности, для отыскания минимума функции одной переменной используется функция fminbnd:

fminbnd(hFunction,x0,xl)

где hFunction – дескриптор функции, для которой находится минимум; x0 и xl задают границы отрезка поиска.

Рассмотрим использование данной функции на примере поиска минимума многочлена Поиск минимального значения функции - student2.ru на отрезке Поиск минимального значения функции - student2.ru . Для построения графика обратимся к функции fplot (рис. 2.21.1):

>> f=inline('x^4+4*x^3-6*x^2+12*x-1','x')

f =

Inline function:

f(x) = x^4+4*x^3-6*x^2+12*x-1

>> fplot(f,[-5 5])

Согласно рис. 2.21.1, минимум рассматриваемой функции Поиск минимального значения функции - student2.ru существует на отрезке Поиск минимального значения функции - student2.ru . Для нахождения минимума будем иметь:

>> fminbnd(f,-5,-3)

ans =

-3.9514

Для одновременного определения минимума и соответствующего значения Поиск минимального значения функции - student2.ru в точке минимума следует использовать следующий синтаксис вызова функции fminbnd:

>> [x,y]=fminbnd(f,-5,-3)

x =

-3.9514

y =

-145.0966

Для поиска минимума функции нескольких переменных используется функция fminsearch:

fminsearch(hFunction,x0)

где hFunction – дескриптор функции нескольких переменных, для которой находится минимум; x0 – вектор аргументов функции, с которого начинается поиск минимума.

Продемонстрируем использование данной функции на примере поиска минимума функции Поиск минимального значения функции - student2.ru . Имеем:

>> f=inline('x(1)^2+x(2)^2','x')

Поиск минимального значения функции - student2.ru

Рис. 2.20.1. График функции Поиск минимального значения функции - student2.ru .

Поиск минимального значения функции - student2.ru

Рис. 2.21.1. График функции Поиск минимального значения функции - student2.ru .

f =

Inline function:

f(x) = x(1)^2+x(2)^2

>> xmin=fminsearch(f,[1 1])

xmin =

1.0e-04 *

-0.2102 0.2548

Отметим, что для функции нескольких переменных большое значение (более существенное, чем для функции одной переменной) имеет предварительная оценка количества и приблизительного расположения локальных минимумов. Полезным здесь может оказаться опять-таки предварительное построение графика рассматриваемой функции.

Для получения сведений о количестве итераций, которое было сделано системой MATLAB для получения уточненного результата, необходимо обратиться к функции fminsearch следующим образом:

[xmin,val,flag,output]=fminsearch(hFun,x0)

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

>> [x,val,flag,output]=fminsearch(f,[1 1])

x =

1.0e-04 *

-0.2102 0.2548

val =

1.0915e-09

flag =

output =

iterations: 38

funcCount: 69

algorithm: 'Nelder-Mead simplex direct search'

message: 'Optimization terminated:

the current x satisfies the termination criteria using ...'

Численное интегрирование

Наши рекомендации