Иллюстрированный самоучитель по Matlab



Минимизация функции нескольких переменных - часть 2


[х. fval .exitflag.output] - fminsearch(...) возвращает структуру (запись) output,

output.algorithm — использованный алгоритм;

output. funcCount — число оценок целевой функции;

output.Iterations — число проведенных итераций.

Классическим примером применения функции fminsearch является поиск минимума тестовой функции Розенброка, точка минимума которой находится в «овраге» с «плоским дном»: rb(x

1

,x

2

,а) = 100*(x

2

- x

1

)

2

+ (а - x

1

)

2

.

Минимальное значение этой функции равно нулю и достигается в точке [

а

а

2

]. В качестве примера уточним значения

x

1

и

х

2

в точке [-1.2 1]. Зададим функцию (в файле rb.m):

%

Тестовая функция Розенброка 

function f=rb(x.a) 

if nargin<2 a=l: end 

f=100*(x(2)-x(i^2)

^

2+(a-x(l)^2:

Теперь решим поставленную задачу:

»options=optimset( 'tolX',1.e-6):

[xmin. opt, rosexflag, rosout]=fminsearch(@rb.[-1.2 1],options) 

xmin =

1.0000 1.0000 

opt =

4.1940e-014 

rosexflag =

1 rosout =

iterations: 101

funcCount: 189

algorithm: 'Nelder-Mead simplex direct search' .

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

Для минимизации функций нескольких переменных можно использовать также функцию MATLAB fminunc и функцию Isqnonlin из пакета Optimization Toolbox. Первая из них позволяет использовать предварительно заданные командой optimset порог сходимости для значения целевой функции, вектор градиентов opt ions, grad-obj, матрицу Гесса, функцию умножения матрицы Гесса или график разреженности матрицы Гесса целевой функции. Isqnonl in реализует метод наименьших квадратов и, как правило, дает наименьшее число итераций при минимизации. Ограничимся приведением примеров их применения для минимизации функции Розенброка:

» options=optimset('tolX',le-6.'To!Fun'.le-6);




Содержание  Назад  Вперед