[Back to Useful Info] [Go to Top Page]

gnuplotを使用して実験データをフィッティングしてみよう!!


得られた実験データのプロットに、ある関数の曲線を合わせることをFitting(フィッティング)と呼びます。
まず、実験データを表す関数を定義します。そして定義した関数のフィッティングパラメータを調節して、関数の曲線を実験データに合わせていきます。両者の差が最小になるフィッティングパラメータを求める作業がフィッティングです。
関数を定義する必要があるので、関数を立てることができない実験データはフィッティングは行えません。

1.gnuplotを開く前に・・・

作業フォルダを作成する Dドライブのルートに「D:\temp」フォルダを作成しておく。フィッティングに使うファイルはすべてこのフォルダ内に保存する。
\temp」フォルダ内にさらにフォルダを作成する場合は、フォルダ名は半角英数にしておくこと。
実験データ(フィッティングさせるデータ)の保存方法 データの文字列の区切りをスペース区切りとし、拡張子をprnとして保存する。 (Terapad上で作成し、名前は半角英数とする)
スペース区切りでなかったらExcellを使用して変える。
使用する関数を保存しておく Terapadを用いて、例えばf(a,b,c,x)=a*x**2+b*x+cという式を入力する。
ファイル→名前をつけて保存→「ファイル名.fnc」とし「ファイルの種類をすべてのファイル」で保存
(ファイル名は半角英数とする)

2.gnuplotを開いて・・・

手順 命令 コマンド入力
(実行はENTERキー)
備考
1 参照フォルダの変更 cd"ドライブ名://フォルダ名" Dドライブにtempフォルダを作成し、そこで作業するのが良い
Dのtemp内のフォルダを参照する場合はD://temp//フォルダ名とする
2 関数の定義 f(a,b,c,x)=a*x**2+b*x+c f(x)=ax2+bx+cの定義式
f,a,b,cは任意の半角英数を使用。gnuplotでは、べき乗は**と表し、横軸がxであることに注意。
3 フォルダ内の実験データファイルをグラフとして表示 plot "ファイル名.prn" ファイルは参照しているフォルダ内(手順1)に入れておくこと。
4 定義した関数をグラフとして表示@ plot f(数値,数値,数値,x) 手順2で定義した関数を使用。数値は任意の数字。
5 定義した関数をグラフとして表示A a=数値(ENTERキー)
b=数値(ENTERキー)
c=数値(ENTERキー)
plot f(a,b,c,x)
@、Aのどちらでもよい
6 xの範囲を指定 plot [0:100]"ファイル名.prn" この場合はx=0~100を表示
7 xとyの範囲を指定 plot [0:100][1:200]"ファイル名.prn" この場合はx=0~100、y=1~200を表示
8 実験データと、定義した関数
の両方のグラフを表示
plot f(数値,数値,数値,x),"ファイル名.prn" 2つの間にカンマ(,)を打ち込む
9 定義した関数の曲線が、実験プロットになるべく近づくよう、各数値を変え、手順8を繰り返す。
2つのグラフがかけ離れていると上手くフィッティングできないので注意。
10 2つのグラフ(実験データと定義した関数)を
フィッティングさせる
a=数値(ENTERキー)
b=数値(ENTERキー)
c=数値(ENTERキー)
fit f(a,b,c,x) "ファイル名.prn" via a,b,c
数値は手順9で近似した値を入力。
11 fitコマンドにより、最適化された各フィッティングパラメータ(a,b,c)の値が、D:\temp\fit.logに保存される。fitコマンドを繰り返すと、最適化されたパラメータ値はD:\temp\fit.logに追記される。
別の方法として、gnuplotの「ファイル」→「保存」→「ファイル名.log」とし「ファイルの種類をすべてのファイル」にして保存すれば、どのデータのフィット結果なのか分かりやすい。
12 各パラメータ(a,b,c)の値の書き出し save variables "ファイル名.任意の拡張子" 上記fit.logに出力される、最適化後の各フィッティングパラメータ(a,b,c)の値は、表示桁数を少なくしてある。gnuplotの最大有効桁数で値を表示させたい場合はこの方法を用いる。桁落ちでフィット後の曲線がうまくグラフ化されない時に有効。



フィット後の結果をplot32に表示させよう!!


フィッティングにより得られた関数をplot32へ起こすには
@plot32に直接式を代入する方法
Amaximaを用いる方法

がある。
複雑な式の場合はmaximaを使用する。


@plot32に直接式を代入する方法



AMaximaを使用する方法

手順 命令 コマンド入力
(実行はSHIFT+ENTER)
備考
1 関数を定義する f(x):=a*x**2+b*x+c;
a:数値;
b:数値;
c:数値;

gnuplotの場合とは定義の方法が違うので注意。
各セミコロンの後に「ENTER」を押す(コマンドを見やすくするため)。
最後のセミコロンの後に「SHIFT+ENTER」。
maximaでは2乗の表示方法は「**2」でも「^2」でも良い。
2 関数をグラフとして表示 plot2d(f(x),[x,0,100]); 関数f(x)の表示。xの範囲を指定すること。ここではxの範囲を0~100としている。
3 グラフを文字列として出力
例:x=0~100まで、0.1刻みで出力し、 そのデータをD:\tempに作成。 ファイル名は半角英数。
x:0$
with_stdout("D:\\temp\\ファイル名.dat",
for i:0.1 step 0.1 thru 100.1 do(y:f(x),print(x,",",y),x:i)
);(SHIFT+ENTERキー)
3 手順3の補足:初期値、終了値、刻み値は場合に応じて適切な数字を入力する。ただし、データ量が多すぎるとデータ処理に時間がかかるので注意。
4 D:\tempに「ファイル名.dat」ファイルが作成される。
5 このコマンドによりtempフォルダに作成されたdatファイルは
「xの値」「意味のない文字列@」「yの値」「意味のない文字列A」「xの値」「意味のない文字列@」「yの値」「意味のない文字列A」・・・と並んでいる。

このときyの値がべき乗やマイナスの値をとるときは「意味のない文字列」の並びが複雑になっているので注意する

csvファイルで保存できるようにするために
「意味のない文字列@」を選択し、Terapadの上バーの「検索」→「置換」を選択し、「置換後の文字列」を「,」にし「すべて置換」をクリック
さらに
「意味のない文字列A」を選択し、「検索」→「置換」を選択し、「置換後の文字列」を「\n(改行)」にし「すべて置換」をクリック

カンマ区切りでcsvファイルにできる形になったら「名前をつけて保存」でcsvファイルで保存する
6 csvファイルをplot32で開き、グラフ化する。

Copyright (c)


Last Updated: date.

[Back to Useful Info] [Go to Top Page]