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