プログラミング演習(Advanced-1):最小2乗法

  1. 実験データの解析などに使われる、最小2乗法による近似式を求めるプログラムの作成です。


    (実行結果)
    <入力データ>
    % cat input
    0.    0.215
    10.    0.220
    20.    0.230
    30.    0.247
    40.    0.250
    50.    0.258

    <実行>
    % a.out
     f(x)=0.213667 + 0.000920 *x

    <結果のプロット>
    gnuplot を使って、結果をプロットしなさい。

    % gnuplot
    gnuplot>plot "input"
    gnuplot> replot  0.213667 + 0.000920*x
    gnuplot>q

    下の図が得られます。


     

    gnuplot 超入門



    (課題P1−2)

    式(2)の偏差の2乗和の平均値 S/N および 平方根の平均値 (√S)/N を計算して出力するようにプログラムを変更せよ。どちらの値が誤差として妥当であるか吟味せよ。
    (課題P1−3)
    続いて最小2乗法について、直線の代わりに指数型関数

       f(x)=a exp(bx)

    で近似することを考えよう。上式の両辺のlog をとると

    log(f(x))=log(a)+bx

    となるから、A=log(a) とおけば、

    F(x)=log(f(x)) =A+bx

    という直線近似に変換できて、あとは課題1と同じ理論が使える。最小2乗法による指数型関数近似のプログラムを作成し ましょう。
    以下のデータ(1つ目のデータで確認する。もう1つのデータでも実行する)に適用しましょう。

    gnuplot でプロットしてみること。

    【1目のデータ】

            x            y
         100    0.0005
         150    0.0025
         200    0.022
         250    1.5
         300    10.0
         350    125.0
         400    1280.0
     

    gnuplot> plot "input2
    gnuplot> replot exp(-13.421768 + 0.052408 *x)

    gnuplot> set log y
    gnuplot> replot


     

【2つ目のデータ】

        x            y
     10    12.5
     15    10.3
     20    2.85
     25    1.13
     30    0.387
     35    0.194
     40    0.027


余裕のある人へ
(課題P1−4)
式 (3)と(3') を導出しなさい。また、前問で log を取った時の誤差の評価をどうすべきか考察しなさい。


Shimpei Endo, The University of Electro-Communications