我想使用 lsqcurvefit 函数拟合曲线。这是这样的问题:
y = a1 * x + a2 * z
s.t
a1 > 0
a2 > 0
a1 + a2 <= some number
是否有可能在 matlab 中有这样的动态约束,或者我应该使用其他一些包?
我想使用 lsqcurvefit 函数拟合曲线。这是这样的问题:
y = a1 * x + a2 * z
s.t
a1 > 0
a2 > 0
a1 + a2 <= some number
是否有可能在 matlab 中有这样的动态约束,或者我应该使用其他一些包?
lsqlin 是解决您问题的工具,只要约束是线性等式或不等式。您已经描述了线性情况,所以这是正确的解决方案。
如果您展示了一个带有非线性约束的示例,那么您将被迫使用 fmincon(如 Marcin 所建议的那样),但这对于完全线性的问题来说太过分了。当然, fmincon 的效率也会大大降低,因为 fmincon 不知道您的目标是约束下的线性最小二乘。
最后,为了使用 fmincon,您需要将目标定义为残差的平方和。后一步骤对于 lsqlin 不是必需的,因为 lsqlin 被明确设计为解决您的问题类别。
fmincon可能是您想要的。约束是一个单独的函数,因此您可以在其中塞入任何东西,任意数量的约束,只要您可以将它们表示为 equations 。