MatLab curvefit具有动态约束

时间:2012-01-20 12:21:06

标签: matlab curve-fitting

我想使用lsqcurvefit函数拟合曲线。就像这个问题:

y = a1 * x + a2 * z
s.t
a1 > 0
a2 > 0
a1 + a2 <= some number

可以在matlab中使用这样的动态约束,还是应该使用其他包?

2 个答案:

答案 0 :(得分:1)

fmincon可能就是你想要的。约束是一个单独的函数,所以你可以在那里填充任何数量的约束,只要你可以将它们表示为方程式。

答案 1 :(得分:1)

lsqlin是您的问题的工具,只要约束是线性等式或不等式。您已经描述了线性情况,因此这是正确的解决方案。

如果您展示了一个非线性约束的示例,那么您将被迫使用fmincon(正如Marcin所建议的那样),但这对于一个完全线性的问题来说是过度的。当然,fmincon的效率也会大大降低,因为fmincon并不知道你的目标是受约束条件下的线性最小二乘法。

最后,为了使用fmincon,您需要将目标定义为残差的平方和。后一步对于lsqlin不是必需的,因为lsqlin被明确地设计用于解决您的问题类。