Иллюстрированный самоучитель по 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);




    Начало  Назад  Вперед