Доверительная область отражающий метод для 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