• ベストアンサー

最小二乗法を用いたデータ解析(三角関数を含む)

データ解析に関して f(x)=(a1cosk1x+a2cosk2x-(b1sink1x+b2sink2x))/√x g(x)=-(a1sink1x+a2sink2x+b1cosk1x+b2cosk2x)/√x を最小二乗法でフィッティングするにはどうしたらよいのでしょうか? k1,k2は既知ですが整数ではありません。データの数は多数あります。 a1,a2,b1,b2の値を求めたいのですが、方法がわかりません。 プログラム等ご存じでしたら、重ねてお願いいたします。 どうか助言を頂きたく投稿しました。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • age_momo
  • ベストアンサー率52% (327/622)
回答No.1

k1,k2が決まっていてx,f(x)のデータがあるなら X1=(1/√x)*cos(k1*x) X2=(1/√x)*cos(k2*x) X3=(1/√x)*sin(k1*x) X4=(1/√x)*sin(k2*x) を計算しておいて、 f(x)=a1X1+a2X2-b1X3-b2X4 に重回帰するだけだと思います。g(x)も同様ですね。 プログラムや方法は多数ありますよ。例えばExcelなら (1)アドイン『分析ツール』で重回帰を行う。 (2)行列計算する。 ΣX1^2 ΣX1X2 ΣX1X3 ΣX1X4 ΣX1X2 ΣX2^2 ΣX2X3 ΣX2X4 ΣX1X3 ΣX2X3 ΣX3^2 ΣX3X4 ΣX1X4 ΣX2X4 ΣX3X4 ΣX4^2 の逆行列に行列 Σf(x)X1 Σf(x)X2 Σf(x)X3 Σf(x)X4 をかければa1,a2,b1,b2が出てきます。 (3)アドイン『ソルバー』を使う。つまり、 どこかのセル4つに適当な数字を入れておいて(例えばG1-G4に入っているとすると) G5に  Σ{f(x)-G1*X1-G2*X2+G3*X3+G4*X4}^2 の計算式をつくり、ソルバーで 目的セル G5 目標値 最小にチェック 変化させるセル G1:G4 として実行すれば最小になるようにExcelが自動で探してくれます。

kuro5884d
質問者

お礼

丁寧なご解説誠に感謝いたします。 早速試してみたところ良い結果が得られました。 重回帰を検討していなかったため、質問して本当に良かったと思います。 ありがとうございました。

関連するQ&A