粉刺
有五个算法选项:
“内点”
(默认)
“trust-region-reflective”
“sqp”
'SQP-Legacy'
“激活集”
使用优化选择
设置算法
选项。
建议书 |
---|
看到与内部点算法的潜在不准确。 |
“内点”
处理大的、稀疏的问题,以及小的、密集的问题。该算法在所有迭代都满足边界,并能从南
或正
结果。这是一个大规模的算法;看到大规模算法与中等规模算法。该算法可以使用特殊技术进行大规模问题。有关详细信息,请参阅内点算法在粉刺
选项
。
“sqp”
满足所有迭代的范围。算法可以从中恢复南
或正
结果。它不是一个大规模的算法;看到大规模算法与中等规模算法。
'SQP-Legacy'
类似于“sqp”
,但通常比较慢,并使用更多的内存。
“激活集”
可以走大步,这就增加了速度。该算法对一些具有非光滑约束的问题是有效的。它不是一个大规模的算法;看到大规模算法与中等规模算法。
“trust-region-reflective”
要求您提供一个梯度,并且只允许边界或线性等式约束,但不同时允许两者。在这些限制下,算法可以有效地处理大的稀疏问题和小的稠密问题。这是一个大规模的算法;看到大规模算法与中等规模算法。该算法可以使用特殊的技术来节省内存使用,例如使用黑森乘法函数。有关详细信息,请参阅信任区域反光算法在粉刺
选项
。
有关算法的描述,请参见约束非线性优化算法。
fsolve
有三种算法:
“trust-region-dogleg”
(默认)
“信赖域”
'levenberg-marquardt'
使用优化选择
设置算法
选项。
建议书 |
---|
“trust-region-dogleg”
是唯一专为求解非线性方程而设计的算法。另一些则试图使函数平方和最小。
该“信赖域”
算法对稀疏问题有效。它可以使用特殊的技术,例如雅孚倍数函数以进行大规模问题。
有关算法的描述,请参见方程求解算法。
Fminunc.
有两个算法:
“拟牛顿”
(默认)
“信赖域”
使用优化选择
设置算法
选项。
建议书 |
---|
|
有关算法的描述,请参见无约束非线性优化算法。
Lsqlin.
有三种算法:
“内点”
,默认值
“trust-region-reflective”
“激活集”
使用优化选择
设置算法
选项。
建议书 |
---|
有关最小化失败的帮助,请参阅当解算器失败时或当求解器可能成功时。 看到与内部点算法的潜在不准确。 |
有关算法的描述,请参见最小二乘(模型拟合)算法。
lsqcurvefit.
和lsqnonlin.
有两个算法:
“trust-region-reflective”
(默认)
'levenberg-marquardt'
使用优化选择
设置算法
选项。
建议书 |
---|
|
有关算法的描述,请参见最小二乘(模型拟合)算法。
linprog
有三种算法:
对偶单纯形的
,默认值
'内部点遗留'
“内点”
使用优化选择
设置算法
选项。
建议书 |
---|
使用 有关最小化失败的帮助,请参阅当解算器失败时或当求解器可能成功时。 看到与内部点算法的潜在不准确。 |
通常,对偶单纯形的
和“内点”
算法是快速的,并且使用最少的内存。
该'内部点遗留'
算法类似于“内点”
,但是'内部点遗留'
可能会更慢,不那么健壮,或使用更多的内存。
有关算法的描述,请参见线性规划算法。
quadprog
有三种算法:
“interior-point-convex”
(默认)
“trust-region-reflective”
“激活集”
使用优化选择
设置算法
选项。
建议书 |
---|
有关最小化失败的帮助,请参阅当解算器失败时或当求解器可能成功时。 看到与内部点算法的潜在不准确。 |
有关算法的描述,请参见二次规划算法。
优化算法是大规模当它使用不需要存储的线性代数时,也不是完整的矩阵。这可以通过存储稀疏矩阵,并通过使用稀疏线性代数进行稀疏线性代数,尽可能通过稀疏线性代数来完成。此外,内部算法保留稀疏性,例如稀疏尖孔的分解,或者不产生矩阵,例如共轭梯度方法。
相比之下,中等规模方法内部创建完整矩阵并使用密集的线性代数。如果问题是足够大的,则完整的矩阵占用大量的存储器,并且密集的线性代数可能需要很长时间才能执行。
不要让“大规模”这个名字误导你;你可以在一个小问题上使用大规模算法。此外,您不需要指定任何稀疏矩阵来使用大规模算法。选择中等规模的算法来访问额外的功能,比如额外的约束类型,或者可能获得更好的性能。
内部点算法粉刺
那quadprog
那Lsqlin.
,linprog
具有许多良好的特点,如低内存使用量和快速解决大问题的能力。但是,它们的解决方案可以比其他万博 尤文图斯算法的解决方案略微不精确。这种潜在不准确的原因是(内部计算的)屏障函数保持远离不等式约束边界。
对于大多数实用的目的,这种不准确性通常很小。
为了减少不准确,试着:
重新运行较小的求解器StepTolerance.
那最优法
,可能是约束特许
公差(但保持公差明智。)看公差和停止标准)。
运行一个不同的算法,从内部点的解决方案开始。这可能会失败,因为一些算法可能会使用过多的内存或时间,等等linprog
还有一些quadprog
算法不接受初始点。
例如,试着最小化函数X当下面界限为0时。使用粉刺
默认内点
算法:
选项= Optimoptions(@Fmincon,“算法”那“内点”那“显示”那“关闭”);x = fmincon (@ x (x), 1 ,[],[],[],[], 0[][]选项)
x = 2.0000E-08
使用粉刺
sqp
算法:
选项。算法=“sqp”;x2 = fmincon (@ x (x), 1 ,[],[],[],[], 0[][]选项)
x2 = 0
同样地,用linprog
interior-point-legacy
算法:
opts = Optimoptions(@Linprog,“显示”那“关闭”那“算法”那'内部点遗留');x = linprog (1 ,[],[],[],[], 0, 1,选择[])
x = 2.0833e-13
使用linprog
对偶单纯形
算法:
opts.algorithm =对偶单纯形的;x2 = linprog (1 ,[],[],[],[], 0, 1,选择[])
x2 = 0
在这些情况下,内部点算法不太准确,但答案非常接近正确的答案。