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