Можно построить график различных показателей прогресса во время выполнения решателя. Установите PlotFcn
Пара "имя-значение" в optimoptions
и задайте одну или несколько функций построения графика для вызова решателем при каждой итерации. Передайте указатель на функцию или cell-массив указателей на функцию.
Существует множество предопределенных функций построения графика. Смотрите PlotFcn
описание опции на странице с описанием функции решателя.
Можно также использовать пользовательскую функцию построения графика. Запишите файл функции, используя ту же структуру, что и выходная функция. Для получения дополнительной информации об этой структуре смотрите Выходные функции и Синтаксис функции построения графика.
В этом примере показано, как использовать функции построения графика для просмотра прогресса fmincon
'interior-point'
алгоритм. Задача взята из решения ограниченной нелинейной задачи, основанной на решателе.
Запишите нелинейные функции цели и ограничения, включая их градиенты. Целевой функцией является функция Розенбрка.
type rosenbrockwithgrad
function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end
Сохраните этот файл как rosenbrockwithgrad.m
.
Функция ограничения состоит в том, что решение удовлетворяет norm(x)^2 <= 1
.
type unitdisk2
function [c,ceq,gc,gceq] = unitdisk2(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ]; if nargout > 2 gc = [2*x(1);2*x(2)]; gceq = []; end
Сохраните этот файл как unitdisk2.m
.
Создайте структуру опций, которая включает вызов трёх функций построения графика:
options = optimoptions(@fmincon,'Algorithm','interior-point',... 'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,... 'PlotFcn',{@optimplotx,@optimplotfval,@optimplotfirstorderopt});
Создайте начальную точку x0 = [0,0]
, и установите оставшиеся входы в пустые ([]
).
x0 = [0,0]; A = []; b = []; Aeq = []; beq = []; lb = []; ub = [];
Функции fmincon
, включая опции.
fun = @rosenbrockwithgrad; nonlcon = @unitdisk2; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.7864 0.6177