可以調用第一列數據集k
Xk
和第二個Yk
(大小m x 1
)。如果我沒有理解你的問題,然後爲每個數據集k
{Xk
,Yk
}你正在尋找兩個標量ak
和bk
這樣
Yk == ak * Xk.^bk
所有元素1..m
由於有多個方程/約束比參數(僅有兩個參數的m
方程)我們尋求最小二乘解。
從公式產量
log Yk == log ak + bk * log Xk
定義新的變量YYk <- log(Yk)
和XXk <- log(Xk)
我們雙方以log
有線性方程log ak
和bk
- 這can be solved easily沒有fmincon
或其他優化工具。
事實上,如果我們追加列向量XXk
全部爲一(即XXk(:,2)=1
)的另一列,我們可以以矩陣形式寫我們的系統現在
XXk * [ b ; log(ak)] == YYk
一些Matlab代碼:
N = 100; % number of data sets
a = zeros(1, N); % pre allocate room for all ak
b = zeros(1, N); % pre allocate room for all bk
for k = 1 : N
% get the data here: Xk = ???, Yk = ???
XXk = log(Xk);
XXk(:,2) = 1; % add all ones column
YYk = log(Yk);
tmp = XXk \ YYk
a(k) = exp(tmp(2));
b(k) = tmp(1);
end
從下面的評論到回答,似乎這個問題與數據集和'for'循環無關。這是關於如何使用fmincon的問題。因此,它措辭不佳,我建議它關閉或根本編輯。 – Shai 2013-02-14 20:27:35