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