Внутренне, solve
функция решает задачи оптимизации путем вызова решателя. Для решателя по умолчанию для проблемы и поддерживаемых решателей для проблемы, смотрите 'solver'
аргумент.
Перед solve
может вызвать решатель, проблемы должны быть преобразованы в форму решателя, любого solve
или некоторые другие присоединенные функции или объекты. Это преобразование влечет за собой, например, линейные ограничения, имеющие матричное представление, а не переменное выражение оптимизации.
Первый шаг в алгоритме происходит, когда вы помещаете выражения оптимизации в проблему. OptimizationProblem
объект имеет внутренний список переменных, используемых в его выражениях. Каждая переменная имеет линейный индекс в выражении и размер. Поэтому переменные задачи имеют подразумеваемую матричную форму. prob2struct
функция выполняет преобразование от проблемной формы до формы решателя. Для примера смотрите, Преобразуют проблему в Структуру.
Для нелинейных задач оптимизации, solve
использование automatic differentiation, чтобы вычислить градиенты целевой функции и нелинейных ограничительных функций. Эти производные применяются, когда цель и ограничительные функции состоят из Поддерживаемых Операций для Переменных и выражений Оптимизации и не используют fcn2optimexpr
функция. Когда автоматическое дифференцирование не применяется, решатели оценивают производные с помощью конечных разностей. Для получения дополнительной информации автоматического дифференцирования, смотрите Автоматический Фон Дифференцирования.
Для значения по умолчанию и позволенных решателей, что solve
вызовы, в зависимости от проблемной цели и ограничений, смотрите 'solver'
. Можно заменить значение по умолчанию при помощи 'solver'
аргумент пары "имя-значение" при вызове solve
.
Для алгоритма, что intlinprog
использование, чтобы решить задачи MILP, см. intlinprog Алгоритм. Для алгоритмов, что linprog
использование, чтобы решить задачи линейного программирования, см. Линейные Алгоритмы Программирования. Для алгоритмов, что quadprog
использование, чтобы решить задачи квадратичного программирования, см. Алгоритмы Квадратичного программирования. Для линейного или алгоритмов решателя нелинейного метода наименьших квадратов, смотрите Наименьшие квадраты (Подбор кривой Модели) Алгоритмы. Для нелинейных алгоритмов решателя см. Неограниченные Нелинейные Алгоритмы Оптимизации и Ограниченные Нелинейные Алгоритмы Оптимизации.
Для нелинейного решения уравнения, solve
внутренне представляет каждое уравнение как различие между левыми и правыми сторонами. То solve
попытки минимизировать сумму квадратов компонентов уравнения. Для алгоритмов для решения нелинейных систем уравнений смотрите, что уравнение Решает Алгоритмы. Когда проблема также имеет границы, solve
вызовы lsqnonlin
минимизировать сумму квадратов компонентов уравнения. Смотрите Наименьшие квадраты (Подбор кривой Модели) Алгоритмы.
Примечание
Если ваша целевая функция является суммой квадратов, и вы хотите solve
чтобы распознать его как таковой, запишите его как любой norm(expr)^2
или sum(expr.^2)
, и не как expr'*expr
или любая другая форма. Внутренний синтаксический анализатор распознает сумму квадратов только, когда представлено квадратом нормы или явные суммы квадратов. Для получения дополнительной информации смотрите Целевую функцию Записи для Основанных на проблеме Наименьших квадратов. Для примера смотрите Неотрицательную линейную задачу для метода наименьших квадратов, Основанную на проблеме.
linprog
| intlinprog
| prob2struct