基于问题的优化算法
在内部,solve
函数通过调用以下求解器求解优化问题。有关该问题的默认求解器和支持的求解器,请参阅 solvers
函数。调用 solve
时,您可以使用 'solver'
名称-值对组参量来覆盖默认值。
问题必须由 solve
或者由其他一些相关联的函数或对象转换为求解器形式,solve
才能调用求解器。这种转换需要一些条件,例如具有矩阵表示而不是优化变量表达式的线性约束。
算法的第一步是将优化表达式放入问题中。OptimizationProblem
对象有一个在其表达式中使用的变量的内部列表。每个变量在表达式中都有一个线性索引,并具有大小。因此,问题变量具有隐含的矩阵形式。prob2struct
函数执行从问题形式到求解器形式的转换。有关示例,请参阅将问题转换为结构体。
对于非线性优化问题,solve
使用自动微分计算目标函数和非线性约束函数的梯度。当目标函数和约束函数由 优化变量和表达式支持的运算 组成时,这些导数适用。当自动微分不适用时,求解器使用有限差分来估计导数。有关自动微分的详细信息,请参阅自动微分背景。您可以使用 ObjectiveDerivative
名称-值参量控制 solve
如何使用自动微分。
有关 intlinprog
用于求解 MILP 问题的算法,请参阅传统 intlinprog 算法。有关 linprog
用于求解线性规划问题的算法,请参阅线性规划算法。有关 quadprog
用于求解二次规划问题的算法,请参阅二次规划算法。有关线性或非线性最小二乘求解器算法,请参阅最小二乘(模型拟合)算法。有关非线性求解器算法,请参阅无约束非线性优化算法和约束非线性优化算法。有关 Global Optimization Toolbox 求解器算法的信息,请参阅 Global Optimization Toolbox 文档。
对于非线性方程求解,solve
在内部将每个方程表示为左右两侧之差。然后 solve
会尝试最小化方程分量的平方和。有关求解非线性系统的算法,请参阅方程求解算法。当问题还有边界时,solve
调用 lsqnonlin
以最小化方程分量的平方和。请参阅最小二乘(模型拟合)算法。
注意
如果您的目标函数是一个平方和,并且您需要 solve
将其识别为平方和,请将其写为 norm(expr)^2
或 sum(expr.^2)
,而不是 expr'*expr
或任何其他形式。内部解析器仅在平方和表示为范数的平方或显式平方和时才能识别平方和。有关详细信息,请参阅编写基于问题的最小二乘法的目标函数。有关示例,请参阅基于问题的非负线性最小二乘法。
另请参阅
linprog
| intlinprog
| prob2struct