
2. Формати застосування функцій matlab, в яких закладений метод Нелдера-Міда
Пошук екстремуму критерію в багатопараметричних задачах оптимізації без обмежень на параметри оптимізації в програмному середовищі MATLAB здійснюється, в залежності від версії середовища, із застосуванням функції fmins або fminsearch.
Формати застосування функції fmins:
x=fmins('fun',x0) – знаходить вектор х з координатами мінімуму критерію, заданого у функції fun(х), починаючи з точки початкового наближення х0 за алгоритмом симплексного методу Нелдера-Міда.
x=fmins('fun',x0,options) – знаходить вектор х, враховуючи налаштування, задані у векторі options (ідентифікатор options може мати довільне ім’я). У функції fmins – це вектор із трьох елементів. Налаштування (опції), які можна задавати:
options(1) – надає можливість виведення значень наближення до точки екстремуму.
Якщо options(1)=1 – проміжні результати виводяться,
якщо options(1)=0 – проміжні результати не виводяться.
options(2) – надає можливість задання умови зупинки пошуку за значеннями параметрів х.
options(2)= число, де число – це значення |хк - хк-1|, де к – чергова ітерація наближення до точки екстремуму.
options(3) – надає можливість задання умови зупинки пошуку за значеннями критерію fun(x).
options(3)=число, де число – це значення |fun(хк) - fun(хк-1)|, де к – чергова ітерація наближення до точки екстремуму.
[x,options]=fmins('fun',x0,options) – знаходить вектор х, а також виводить параметри пошуку екстремуму. Параметр, що відповідає кількості проведених експериментів під час пошуку екстремуму – options(10).
Приклад застосуванням функції fmins() для пошуку екстремуму критерію myfun(х) з двома параметрами з точністю по критерію eps=10-3 та виведенням знайдених координат екстремуму і кількості проведених експериментів:
eps=1e-3;
[x,options]=fmins('myfun',[-3 0],[0 1 eps]);
x_min=x(1) % перша координата екстремуму
y_min=x(2) % друга координата екстремуму
n=options(10) % кількість проведених експериментів
Формати застосування функції fminsearch
В програмному середовищі MATLAB 5.3 (Release 11) та новіших версіях MATLAB функція fmins замінена функцією fminsearch.
Формати застосування функції fminsearch:
x=fminsearch('fun',x0) – починає з точки нульового наближення х0 та знаходить екстремум х критерію fun(х). х0 може бути число, вектор або матриця.
x=fminsearch('fun',x0,options) – виконує вищевказане із застосуванням опцій, введених у структурі options. Структура options містить такі поля:
Display – можливість виведення експериментів. Значення поля Display:
'off' – не виводити значення експериментів, 'iter' – виводити значення експериментів при кожній ітерації, 'final' – виводити лише значення кінцевого експерименту, 'notify' (за замовчуванням)– виводити результат лише коли функція не збігається.
якщо options(1)=0 – проміжні експерименти не виводяться.
MaxFunEvals – максимальна дозволена кількість експериментів.
MaxIter – максимальна дозволена кількість ітерацій.
TolX – точність вхідних параметрів х, при досягненні якої пошук екстремуму завершується.
[x,fval]=fminsearch('fun',x0,options) – виконує вищевказане та видає fval – значення критерію 'fun' в отриманому розв’язку x.
[x,fval,exitflag]=fminsearch('fun',x0,options) – виконує вищевказане та видає значення exitflag, яке показує умову виходу з ітераційного процесу функції fminsearch().
При exitflag>0 – ітераційний процес для заданого критерію 'fun' збігається до розв’язку x.
exitflag=0 означає, що максимальну кількість поставлених експериментів перевищено.
exitflag<0 означає, що ітераційний процес для заданого критерію 'fun' не збігається до розв’язку.
[x,fval,exitflag,output]=fminsearch('fun',x0,options) – виконує вищевказане та видає структуру output, у якій міститься інформація про оптимізацію:
output.algorithm – застосований алгоритм пошуку екстремуму;
output.funcCount – кількість поставлених експериментів;
output.iterations – кількість виконаних ітерацій.
Приклад застосуванням функції fminsearch для пошуку екстремуму дво-параметричного критерію, заданого функцією myfun(х), з виведенням значень експериментів при кожній ітерації, точністю вхідних параметрів 10-3 та виведенням знайдених координат екстремуму x, значення критерію в точці екстремуму fval, умови виходу з ітераційного процесу exitflag та кількості проведених експериментів:
[x,fval,exitflag,output]=fminsearch('myfun',[-3 0], optimset('Display','iter','TolX',1e-3));
x_min=x(1) % перша координата екстремуму
y_min=x(2) % друга координата екстремуму
f_min=fval % значення критерію в точці екстремуму
exitflag % умова виходу з ітераційного процесу
n=output.funcCount % кількість проведених експериментів