2012-01-20 29 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