Когда решатель оптимизации выполняет свою задачу, он устанавливает exit flag. Выходной флаг является целым числом, которое является кодом по причине, решатель остановил свои итерации. В целом:
Положительные выходные флаги соответствуют успешным результатам.
Отрицательные выходные флаги соответствуют неудачным результатам.
Нулевой выходной флаг соответствует решателю, останавливаемому путем превышения предела итерации или предела на количестве функциональных оценок (см. Итерации и Функциональные количества, и также смотрите Допуски и Критерий остановки).
Таблица решателя выходные параметры в разделе ссылки на функцию решателя приводит значение выходных флагов каждого решателя.
Выйдите флаги являются весьма ненадежными руководствами по качеству решения. Много других факторов, таких как настройки допуска, могут влиять, является ли решение удовлетворительным для вас. Вы ответственны за решение, дает ли решатель удовлетворительный ответ. Иногда отрицательный выходной флаг не соответствует “плохому” решению. Точно так же иногда положительный выходной флаг не соответствует “хорошему” решению.
Вы получаете выходной флаг путем вызова решателя с синтаксисом exitflag
. Этот синтаксис зависит от решателя. Для получения дополнительной информации смотрите страницы ссылки на функцию решателя. Например, для fsolve
, синтаксис вызова, чтобы получить выходной флаг
[x,fval,exitflag] = fsolve(...)
Следующий пример использует этот синтаксис. Предположим, что вы хотите решить систему нелинейных уравнений
Запишите эти уравнения как анонимную функцию, которая дает нулевой вектор в решении:
myfcn = @(x)[2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))];
Вызовите fsolve
с синтаксисом exitflag
в начальной точке [-5 - 5]:
[xfinal fval exitflag] = fsolve(myfcn,[-5 -5]) Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient. xfinal = 0.5671 0.5671 fval = 1.0e-06 * -0.4059 -0.4059 exitflag = 1
В таблице для fsolve
exitflag
вы находите, что выходное флаговое значение средняя функция “1
сходилось к решению x
”. Другими словами, fsolve
сообщает, что myfcn
является почти нулем в x
= [0.5671 0.5671]
.
Каждый решатель выпускает сообщение к командному окну MATLAB® в конце его итераций. Это сообщение объясняет кратко почему остановленный решатель. Сообщение может предоставить больше подробную информацию, чем выходной флаг.
Много примеров в этой документации показывают выходные сообщения. Например, смотрите, Минимизируют Функцию Розенброка в Командной строке или Шаг 3: Вызовите fminunc использование опций.. Пример в предыдущем разделе, Выходных Флагах, показывает следующее выходное сообщение:
Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
Это сообщение более информативно, чем выходной флаг. Сообщение указывает, что градиент релевантен. Сообщение также утверждает, что функциональный допуск управляет, как около 0 вектор значений функции должен быть для fsolve
, чтобы расценить решение, как завершено.
Некоторые решатели имеют выходные сообщения, которые содержат ссылки для получения дополнительной информации. Существует два типа ссылок:
Ссылки на слова или фразы. Если вы щелкаете по такой ссылке, окно открывается, который отображает определение слова или дает другую информацию. Новое окно может содержать ссылки на документацию Браузера документации для более подробной информации.
Ссылка как последняя строка отображения, говоря <stopping criteria details>
. Если вы щелкаете по этой ссылке, MATLAB отображает больше детали о причине остановленный решатель.
Решатель fminunc
улучшил выходные сообщения:
opts = optimoptions(@fminunc,'Algorithm','quasi-newton'); % 'trust-region' needs gradient [xfinal fval exitflag] = fminunc(@sin,0,opts)
Это приводит к следующим результатам:
Каждое из подчеркнутых слов или фраз содержит ссылку, которая предоставляет больше информации.
Ссылка <stopping criteria details>
распечатывает следующее к командной строке MATLAB:
Optimization completed: The first-order optimality measure, 0.000000e+00, is less than options.OptimalityTolerance = 1.000000e-06.
Другие ссылки поднимают окно справки с определениями слова. Например, щелчок по ссылке Local minimum found
открывает следующее окно:
Щелчок по ссылке расширителя first-order optimality measure
поднимает определение меры по оптимальности первого порядка для fminunc
:
Ссылка расширителя является способом получить больше информации в том же окне. Щелчок по ссылке расширителя first-order optimality measure
снова закрывает определение.
Другие ссылки открывают Средство просмотра Справки.
Установите опцию Display
управлять внешним видом обоих выходных сообщений и итеративного отображения. Для получения дополнительной информации смотрите Итеративное Отображение. Следующая таблица показывает эффект различных настроек опции Display
.
Значение параметра экрана | Выведите к командному окну | |
---|---|---|
Выходное сообщение | Итеративное отображение | |
'none' или синонимичный 'off' | 'none' | 'none' |
'final' (значение по умолчанию для большинства решателей) | Значение по умолчанию | 'none' |
'final-detailed' | Подробный | 'none' |
'iter' | Значение по умолчанию | Да |
'iter-detailed' | Подробный | Да |
'notify' | Значение по умолчанию, только если exitflag ≤ 0 | 'none' |
'notify-detailed' | Подробный, только если exitflag ≤ 0 | 'none' |
Например,
opts = optimoptions(@fminunc,'Display','iter-detailed','Algorithm','quasi-newton'); [xfinal fval] = fminunc(@cos,1,opts);
урожаи следующее отображение: