2012-01-20 30 views
0

我想用lsqcurvefit函数拟合曲线。它是这样的问题:带动态约束的MatLab曲线拟合

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

是否有可能在MATLAB这样的动态约束或者我应该使用一些其他的包?

回答

1

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

如果您已经展示了一个带有非线性约束的示例,那么您将被迫使用fmincon(如Marcin所建议的),但这对于完全线性问题将是矫枉过正的。当然,fmincon的效率也会低得多,因为fmincon不知道你的目标是在约束条件下的线性最小二乘。

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

+1

是对的,我只是想告诉你,如果你有一些非常奇怪的限制,你可以用fmincon来做,这是以非完美方法的代价。 – Marcin

1

fmincon可能是你想要的。约束是一个单独的函数,所以你可以在里面塞入任何东西,任意数量的约束,只要你可以将它们表达为方程。

+1

正如我在我的回答中指出的那样,只有约束是非线性的,fmincon才是合适的。否则,lsqlin是最好的。 – 2012-01-20 18:49:06