Когда решатель оптимизации выполняет свою задачу, он устанавливает 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® в конце его итераций. Это сообщение объясняет кратко почему остановленный решатель. Сообщение может предоставить больше подробную информацию, чем выходной флаг.
Много примеров в этой документации показывают выходные сообщения, те, которые Минимизируют Функцию Розенброка в Командной строке. Пример в предыдущем разделе, Выходных Флагах, показывает следующее выходное сообщение:
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);
урожаи следующее отображение: