Доверительная область отражающий метод для fmincon может обработать линейные ограничения равенства, если никакие другие ограничения не существуют. Предположим, что вы хотите минимизировать
подвергните некоторым линейным ограничениям равенства. Целевая функция закодирована в функциональном brownfgh.m. Этот пример берет n = 1000. Кроме того, browneq.mat файл содержит матрицы Aeq и beq это представляет линейные ограничения Aeq · x = beq. Aeq имеет 100 строк, представляющих 100 линейных ограничений (таким образом, Aeq 100 1000 матрица).
Файл длинен, так не включен здесь. Просмотрите код с командой
type brownfgh
Поскольку brownfgh вычисляет градиент и значения Гессиана, а также целевую функцию, необходимо использовать optimoptions указать, что эта информация доступна в brownfgh, использование SpecifyObjectiveGradient и Hessian опции.
Разреженная матрица Aeq и векторный beq доступны в файле browneq.mat:
load browneq
Линейная ограничительная система 100 1000, не структурировал разреженность (используйте spy(Aeq) чтобы просмотреть структуру разреженности), и не слишком ужасно плохо обусловлено:
condest(Aeq*Aeq') ans = 2.9310e+006
fun = @brownfgh;
load browneq % Get Aeq and beq, the linear equalities
n = 1000;
xstart = -ones(n,1); xstart(2:2:n) = 1;
options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'HessianFcn','objective',...
'Algorithm','trust-region-reflective');
[x,fval,exitflag,output] = ...
fmincon(fun,xstart,[],[],Aeq,beq,[],[],[],options);fmincon печать следующее выходное сообщение:
Local minimum possible. fmincon stopped because the final change in function value relative to its initial value is less than the default value of the function tolerance.
exitflag значение 3 также указывает, что алгоритм остановился, потому что изменение в значении целевой функции было меньше допуска FunctionTolerance. Итоговое значение функции дано fval. Ограничениям удовлетворяют, как вы видите в output.constrviolation
exitflag,fval,output.constrviolation
exitflag =
3
fval =
205.9313
ans =
2.2071e-13Линейным равенствам удовлетворяют в x.
norm(Aeq*x-beq)
ans =
1.1858e-12