k
Xk
最初の列データセットと 2 番目のYk
(サイズの) データセットを呼び出しましょうm x 1
。私があなたの質問を正しく理解していれば、各データセットk
{ Xk
, } に対して、2 つのスカラーなどをYk
探しています。 ak
bk
Yk == ak * Xk.^bk
すべての要素1..m
パラメーターよりも多くの方程式/制約があるため (パラメーターm
が 2 つしかない方程式)、最小二乗解を求めます。
log
方程式の両辺から取ると、
log Yk == log ak + bk * log Xk
新しい変数YYk <- log(Yk)
を定義すると、とXXk <- log(Xk)
の線形方程式が得られます。これは、または他の最適化ツールがなくても簡単に解くことができます。
実際、列ベクトルにすべて 1 の別の列 (つまり) を追加すると、システムを行列形式で記述できます。log ak
bk
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