0

私はプログラミングの初心者です。それぞれ2列の約100個のデータセットがあります。col1 データを col2 データの累乗関数として当てはめたい

variable(col1) = parameter1 x (variable(col2))^ parameter2

(say a (x^b)). 

ここで、最適化関数 fmincon を使用して、2 つのパラメーターの値を取得したいと思います。100 個のデータ セットすべてに対してこれを繰り返したいので、この fmincon を for ループ内に含めて、各データ セットから一度に 1 つずつデータを呼び出したいと考えています。私は最善を尽くしましたが、これを行う方法がわかりません。

助言がありますか?

4

1 に答える 1

0

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
于 2013-02-14T19:43:12.733 に答える