multi_reg



機能:
多重回帰近似

書式:
multi_reg([ix初組],[iy],x組数,[係数])

解説:
まず、オリジナル数値点列[x0],[y0]を用いて次の回帰式を満足する数値組[iy],[ix],[ix+1]...を作っておきます。
Y = C1*X1 + C2*X2 +・・・・・・+ Cm*Xm
Y = Y(x0, y0); 数値組[iy]
X1 = X1(x0, y0); 数値組[ix]
X2 = X2(x0, y0); 数値組[ix+1]
・・・・・・・
Xm = Xm(x0, y0); 数値組[ix+x組数-1]
次に、本多重回帰近似関数を使って回帰係数C1,C2,C3...を求め、上記回帰式に代入すれば、任意xに対する近似値yが計算できます。

     [ix初組] ・・・・・・・・・・・・・・・ X1,X2,...を表す番号連続数値組の先頭数値組番号

     [iy] ・・・・・・・・・・・・・・・ Yの入力数値組

     x組数 ・・・・・・・・・・・・・・・ Xの数値組の数mの指定

     [係数] ・・・・・・・・・・・・・・・ 係数(C1,C2,...)の出力数値組

例:オリジナル数値点列[x0]と[y0]が式y=A*x^B*ln(x)で、多重回帰近似の場合の手順を示します。
@両側の対数を取り、式を整理します。
y/ ln(x) = A*x^B
ln(y/ ln(x)) = ln(A)+B*ln(x)
従って、 Y=ln(y/ ln(x))、 C1=ln(A)、 X1=1、 C2=B、 X2=ln(x) とすれば、 Y = C1*X1 + C2*X2 が得られます。
注意:ln(y) - ln(ln(x)) = ln(A)+B*ln(x) にも変換できますが、(x>1)の条件があり、上式の(x > 0 且つ x != 1)条件より範囲が狭くなります。
A回帰計算に必要な数値組[iy]、[ix]、[ix+1]を作ります。
[iy] = Y = ln([y0]/ ln([x0]));
[ix] = X1 = 1; ← 数値セルが全部1の数値組
[ix+1] = X2 = ln([x0]);
Bmulti_reg([ix],[iy],2,[oc]); でさらに係数C1、C2を得てからA、Bを求めます。
[iy] = C1*[ix] + C2*[ix+1]
A = e^C1 = e^[oc][1]
B = C2 = [oc][2]
具体計算例: 
val_fx(2*x^0.9*ln(x), [1],[2],0.1,3,-20); "オリジナル数値点列作成"
[10]- = ln([2]/ln([1]));   "[iy]"
for(1,20,1) { [11][@] = 1 }    "[ix]"
[12] = ln([1]);   "[ix+1]"
multi_reg([11],[10],2,[20]);   "[iy] = c1*[ix] + c2*[ix+1]"
exp([20][1]);   "A = 2.00000000"
[20][2];   "B = 0.90000000"


return