Когда решатель оптимизации завершает свою задачу, он устанавливает флаг выхода. Флаг выхода - это целое число, которое является кодом по той причине, что решатель остановил итерации. В целом:
Положительные флаги выхода соответствуют успешным результатам.
Отрицательные флаги выхода соответствуют неудачным результатам.
Флаг выхода из нуля соответствует тому, что решатель останавливается при превышении предела итерации или ограничения на число оценок функций (см. Итерации и подсчеты функций, а также раздел Допуски и критерии остановки).
В этой таблице содержится ссылка на описание флага выхода каждого решателя.
Флаги выхода решателем
Примечание
Флаги выхода не являются непогрешимыми путеводителями к качеству решения. Многие другие факторы, такие как параметры допуска, могут повлиять на удовлетворительность решения. Вы несете ответственность за решение вопроса о том, возвращает ли решатель удовлетворительный ответ. Иногда отрицательный флаг выхода не соответствует «плохому» решению. Аналогично, иногда положительный флаг выхода не соответствует «хорошему» решению.
Чтобы получить флаг выхода, вызовите решатель с помощью exitflag синтаксис. Этот синтаксис зависит от решателя. Дополнительные сведения см. на страницах ссылок на функции решателя. Например, для fsolve, синтаксисом вызова для получения флага выхода является
[x,fval,exitflag] = fsolve(...)
В следующем примере используется этот синтаксис. Предположим, что вы хотите решить систему нелинейных уравнений
2x2 = e − x2.
Запишите эти уравнения как анонимную функцию, которая дает нулевой вектор в решении:
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 expander link выводит определение меры оптимальности первого порядка для fminunc:

Канал расширения - это способ получения дополнительной информации в том же окне. Щелкните значок first-order optimality measure Ссылка расширения снова закрывает определение.
Другие ссылки открывают средство просмотра справки.
Установите Display для управления отображением сообщений выхода и итеративным отображением. Дополнительные сведения см. в разделе Итеративное отображение. В следующей таблице показано влияние различных настроек Display вариант.
| Значение опции отображения | Вывод в командное окно | |
|---|---|---|
| Выйти из сообщения | Итеративное отображение | |
'none', или синоним 'off' | Ничего | Ничего |
'final' (по умолчанию для большинства решателей) | Дефолт | Ничего |
'final-detailed' | Подробный | Ничего |
'iter' | Дефолт | Да |
'iter-detailed' | Подробный | Да |
'notify' | По умолчанию только в том случае, если exitflag ≤ 0 | Ничего |
'notify-detailed' | Подробно, только если exitflag ≤ 0 | Ничего |
Например,
opts = optimoptions(@fminunc,'Display','iter-detailed','Algorithm','quasi-newton'); [xfinal fval] = fminunc(@cos,1,opts);
выдает следующий экран:
