选择算法
fmincon算法
fmincon
算法有五个选项:
“内点”
(默认)“trust-region-reflective”
“sqp”
“sqp-legacy”
“激活集”
使用optimoptions
设置算法
在命令行选项。
建议 |
---|
看到潜在的错误和内点算法。 |
建议背后的推理
“内点”
处理大型、稀疏问题,以及小密度问题。迭代算法满足边界,并且可以恢复南
或正
结果。这是一个大规模的算法;看到大型和中型的算法。该算法可以使用特殊的技术对大规模问题。有关详细信息,请参见内点算法在fmincon
选项
。“sqp”
满足迭代边界。该算法可以恢复南
或正
结果。它不是一个大规模算法;看到大型和中型的算法。“sqp-legacy”
类似于“sqp”
,但通常是慢,使用更多的内存。“激活集”
可以采取大步骤,这增加了速度。该算法是有效的在一些非光滑约束的问题。它不是一个大规模算法;看到大型和中型的算法。“trust-region-reflective”
需要你提供一个梯度,并且只允许范围或线性等式约束,而不是两个。在这些限制,该算法处理两大稀疏问题和小密度问题有效。这是一个大规模的算法;看到大型和中型的算法。该算法可以使用特殊的技巧来节省内存使用,比如黑森乘法函数。有关详细信息,请参见Trust-Region-Reflective算法在fmincon
选项
。
对算法的描述,请参阅约束非线性优化算法。
fsolve算法
fsolve
有三种算法:
“trust-region-dogleg”
(默认)“信赖域”
“levenberg-marquardt”
使用optimoptions
设置算法
在命令行选项。
建议 |
---|
|
建议背后的推理
“trust-region-dogleg”
是唯一专门设计来解决非线性方程组的算法。其他人试图最小化函数的平方和。的
“信赖域”
稀疏问题的算法是有效的。它可以使用特殊的技术,如雅可比矩阵乘法函数对大规模问题。
对算法的描述,请参阅方程求解算法。
fminunc算法
fminunc
有两个算法:
“拟牛顿”
(默认)“信赖域”
使用optimoptions
设置算法
在命令行选项。
建议 |
---|
寻求帮助如果最小化失败,明白了在解算器失败时或当解算器可能已经成功了。 |
对算法的描述,请参阅无约束非线性优化算法。
最小二乘算法
lsqlin
lsqlin
有三种算法:
“内点”
,默认的“trust-region-reflective”
“激活集”
使用optimoptions
设置算法
在命令行选项。
建议 |
---|
寻求帮助如果最小化失败,明白了在解算器失败时或当解算器可能已经成功了。 看到潜在的错误和内点算法。 |
对算法的描述,请参阅最小二乘(模型拟合)算法。
lsqcurvefit和lsqnonlin
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
设置算法
在命令行选项。
建议 |
---|
寻求帮助如果最小化失败,明白了在解算器失败时或当解算器可能已经成功了。 看到潜在的错误和内点算法。 |
对算法的描述,请参阅二次规划算法。
大型和中型的算法
一种优化算法大规模的当它使用线性代数不需要存储,也没有操作,完整的矩阵。这可能是做内部通过存储稀疏矩阵,并尽可能利用稀疏线性代数计算。此外,内部算法要么保持稀疏,如稀疏的柯列斯基分解,或不产生矩阵,如共轭梯度法。
相比之下,中等规模的方法在内部创建完整的矩阵,并使用稠密线性代数。如果一个问题是足够大,全矩阵占用大量的内存,和密集的线性代数可能需要很长时间来执行。
不要让这个名字“大规模”误导你;您可以使用一个大规模算法在一个小问题。此外,您不需要指定任何使用大规模稀疏矩阵算法。选择一个中等规模的算法来获得额外的功能,如额外的约束类型,或可能获得更好的性能。
潜在的错误和内点算法
内点算法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
在这些情况下,内点算法不太准确,但答案非常接近正确的答案。