fmincon
有五个算法选项:
“内点”
(默认)
“trust-region-reflective”
“sqp”
“sqp-legacy”
“激活集”
使用optimoptions
设置算法
选项。
建议 |
---|
看到内点算法的潜在不准确性. |
“内点”
处理大的,稀疏的问题,以及小的密集的问题。该算法在所有迭代中都满足边界,可以从南
或正
结果。它是一个大规模的算法;看到大规模与中等规模算法.该算法可以对大规模问题使用特殊的技术。有关详细信息,请参见内点算法在fmincon
选项
.
“sqp”
满足所有迭代的边界。算法可以从南
或正
结果。它不是一个大规模的算法;看到大规模与中等规模算法.
“sqp-legacy”
类似于“sqp”
,但通常速度较慢,使用更多内存。
“激活集”
可以迈大步,这样可以增加速度。该算法在一些非光滑约束问题上是有效的。它不是一个大规模的算法;看到大规模与中等规模算法.
“trust-region-reflective”
要求您提供一个梯度,并只允许边界或线性等式约束,但不允许两者。在这些限制条件下,该算法可以有效地处理大型稀疏问题和小型密集问题。它是一个大规模的算法;看到大规模与中等规模算法.该算法可以使用特殊的技术来节省内存使用,例如使用Hessian乘法函数。有关详细信息,请参见Trust-Region-Reflective算法在fmincon
选项
.
算法说明请参见约束非线性优化算法.
fsolve
有三种算法:
“trust-region-dogleg”
(默认)
“信赖域”
“levenberg-marquardt”
使用optimoptions
设置算法
选项。
建议 |
---|
|
“trust-region-dogleg”
是唯一一种专门用来解非线性方程的算法。其他的则试图使函数的平方和最小化。
的“信赖域”
该算法在稀疏问题上是有效的。它可以使用特殊的技术,如雅可比乘函数来解决大规模问题。
算法说明请参见方程求解算法.
fminunc
有两个算法:
“拟牛顿”
(默认)
“信赖域”
使用optimoptions
设置算法
选项。
建议 |
---|
如果最小化失败,请参见当求解器失败时或求解器可能成功的时候. |
算法说明请参见无约束非线性优化算法.
lsqlin
有三种算法:
“内点”
,默认的
“trust-region-reflective”
“激活集”
使用optimoptions
设置算法
选项。
建议 |
---|
如果最小化失败,请参见当求解器失败时或求解器可能成功的时候. 看到内点算法的潜在不准确性. |
算法说明请参见最小二乘(模型拟合)算法.
lsqcurvefit
和lsqnonlin
有两个算法:
“trust-region-reflective”
(默认)
“levenberg-marquardt”
使用optimoptions
设置算法
选项。
建议 |
---|
如果最小化失败,请参见当求解器失败时或求解器可能成功的时候. |
算法说明请参见最小二乘(模型拟合)算法.
linprog
有三种算法:
对偶单纯形的
,默认的
“interior-point-legacy”
“内点”
使用optimoptions
设置算法
选项。
建议 |
---|
使用 如果最小化失败,请参见当求解器失败时或求解器可能成功的时候. 看到内点算法的潜在不准确性. |
通常,对偶单纯形的
和“内点”
算法速度快,并且使用最少的内存。
的“interior-point-legacy”
算法类似于“内点”
,但“interior-point-legacy”
可能会更慢,更不健壮,或者使用更多内存。
算法说明请参见线性规划算法.
quadprog
有三种算法:
“interior-point-convex”
(默认)
“trust-region-reflective”
“激活集”
使用optimoptions
设置算法
选项。
建议 |
---|
如果最小化失败,请参见当求解器失败时或求解器可能成功的时候. 看到内点算法的潜在不准确性. |
算法说明请参见二次规划算法.
一个优化算法是大规模的当它使用不需要存储或操作完整矩阵的线性代数时。这可以在内部通过存储稀疏矩阵来实现,并在可能的情况下使用稀疏线性代数进行计算。此外,内部算法要么保持稀疏性,如稀疏Cholesky分解,要么不生成矩阵,如共轭梯度法。
相比之下,中等规模的方法在内部创建完整的矩阵并使用密集线性代数。如果问题足够大,完整的矩阵会占用大量内存,而密集的线性代数可能需要很长时间来执行。
不要让“大规模”这个名称误导了你;你可以在一个小问题上使用大规模的算法。此外,您不需要指定任何稀疏矩阵来使用大规模算法。选择一个中等规模的算法来访问额外的功能,比如额外的约束类型,或者可能是为了更好的性能。
内点算法fmincon
,quadprog
,lsqlin
,linprog
具有许多良好的特性,如低内存使用和快速解决大问题的能力。然而,他们的解决方案可能比其他金宝搏官方网站算法的精确度稍低。这种潜在的不准确性的原因是(内部计算的)障碍函数使迭代远离不等式约束边界。
对于大多数实际目的,这种不准确性通常是相当小的。
为了减少误差,尽量:
重新运行较小的解算器StepTolerance
,OptimalityTolerance
,可能ConstraintTolerance
公差(但要保持合理的公差。)看到公差和停止标准).
运行一个不同的算法,从内点解开始。这可能会失败,因为一些算法可能会使用过多的内存或时间linprog
和一些quadprog
算法不接受初始点。
例如,尝试最小化函数x当以0为界时。使用fmincon
默认的内点
算法:
选择= optimoptions (@fmincon,“算法”,“内点”,“显示”,“关闭”);x = fmincon (@ x (x), 1 ,[],[],[],[], 0[][]选项)
x = 2.0000 e-08
使用fmincon
sqp
算法:
选项。算法=“sqp”;x2 = fmincon (@ x (x), 1 ,[],[],[],[], 0[][]选项)
x2 = 0
类似地,使用linprog
interior-point-legacy
算法:
选择= optimoptions (@linprog,“显示”,“关闭”,“算法”,“interior-point-legacy”);x = linprog (1 ,[],[],[],[], 0, 1,选择[])
x = 2.0833 e-13
使用linprog
对偶单纯形
算法:
选择。算法=对偶单纯形的;x2 = linprog (1 ,[],[],[],[], 0, 1,选择[])
x2 = 0
在这些情况下,内点算法的精确度较低,但答案非常接近正确答案。