1
我想估計三個參數,同時用MATLAB中的函數fmincon最小二乘方誤差最小。我的目標函數看起來像:MATLAB:fmincon與三維數據
f = @(a,b,c) sum(sum(sum((M - a - b - c).^2)));
M
哪裏是一個三維陣列,其尺寸20x7x16和所估計的參數a, b, c
分別是與尺寸20X1,7X1和16X1載體。爲了估計它,我通過將向量a
重複到數組20x7x16中來「製作」它們3D,並且我也爲b
和c
做了同樣的處理。我需要矢量a
和b
中元素的總和爲1作爲線性約束。我的問題有兩個:
- 當Aeq是一個二維矩陣並且beq是一個向量時,我應該如何指定線性約束?
- 如何設置
a,b,c
的出發點,以便MATLAB知道它們的估計值是在此3D數組中重複的向量?
我想展開3D陣列M
成2D矩陣和調整參數a,b,c
但起始點的問題仍然存在,因爲我必須將它們定義爲一個矢量,而不是作爲一個矩陣。
我非常感謝您的意見和建議。也許我想複雜,還有另一種方式如何去做。
預先感謝您。
非常感謝您的回答!這個功能真的是我需要的。我只是不明白你爲什麼排列數組M(我猜,因爲c是一個16x1向量)。 – user2655769
@ user2655769我不排列'M',因爲我需要它的非singelton維度與'M'的第三維共同引入,所以我只排列'c'。在命令行中嘗試使用此命令以查看其效果。 – Shai
好吧,我現在明白了。爲了減去最後一個參數'c',我們必須重新排列3D陣列'M'的剩餘部分。並且爲了在你將它重新整合成一個大的矢量之後使用'sum'。我把它改成了f = @(a,b,c)sum(reshape(bsxfun(@minus,permute(bsxfun(@minus,bsxfun(@minus,M,a),b'),[2 3 1] ),c),[],1)。^ 2)' – user2655769