gnuplotのデフォルトの描画範囲は,
-10 <= x <= 10, -1 <= y <= 1
です.このxとyの範囲を変更してプロットします.gnuplotを起動して,ターミナルから,以下のようにタイプします.
gnuplot> plot [-2*pi:2*pi] [-1.2:1.2] sin(x)
すると,以下のようなグラフが描かれます.続いて,以下のようにプロットします.
gnuplot> plot [-2*pi:2*pi] [-1.2:1.2] sin(x), cos(x), tan(x)
すると,3つの三角関数がプロットされ,以下のようなグラフが描かれます.
自分で定義した関数をプロットすることも可能です.
例として,二つの関数(f(x),g(x))を定義し,f(x),g(x),f(x) + g(x)をプロットします.
ターミナルから,以下のようにタイプします.
gnuplot> f(x) = x * sin(x**2) - x
gnuplot> g(x) = x**2 + 1
gnuplot> plot f(x), g(x), f(x) + g(x)
すると,以下のようなグラフが描かれます.
ターミナルから,以下のようにタイプします.
gnuplot> splot x**2 + y**2
すると,以下のようなグラフが描かれ,グリッドで三次元関数を表現できます.
三次元グラフでは,重なりの向こう側は表示しない(隠線処理)ので,そのためのコマンドとして,"setnhidden3d"が用意されています.また,グリッドの数は"set isosamples u方向の線の数, v方向の線の数"で制御します.
例として,ターミナルから,以下のようにタイプします.
gnuplot> set hidden3d
gnuplot> set isosamples 40, 40
gnuplot> splot sin(sqrt(x**2 + y**2))/(sqrt(x**2 + y**2))
すると,以下のようなグラフが描かれます.
このグラフでは,"set isosamples 40, 40"というコマンドで,面を (40-1) x (40-1)のメッシュに区切っています.
簡単なデータ処理
以下のような内容のデータファイル(data.txt)を準備します.
0 0.3
1 0.9
2 4.8
3 8.1
4 14.2
また,"pointtype","pointsize"を指定しています.
上記の例では,あくまで例ということで,対話形式でのグラフ作成を行っています.
見栄えの良いグラフを作成するには,"set"コマンドを用いて,細かく出力を調整する必要があるので,それを毎回,対話形式で行うのは大変です.
gnuplotには,上記の各コマンドを1つのファイル(コマンドファイル)にして,そのコマンドファイルを実行することで,プロットを描くことができます.
この方法に関しては,別の機会に....
簡単なデータ処理
以下のような内容のデータファイル(data.txt)を準備します.
0 0.3
1 0.9
2 4.8
3 8.1
4 14.2
データの区切りはTABで記述します.
まずは,ターミナルから
gnuplot> plot "data.txt" using 1:2
と入力すると,以下のようなグラフが描かれます.
このplotコマンドにおいて,最初のオプションは,データのファイル名("data.txt")です.続いて,"using"を用いて,ファイルの第一列がx軸,第二列がy軸であることを指定しています.
このグラフを,データ点を接続する折線グラフにするには,
gnuplot> plot 'data.txt' using 1:2 with lines
と入力します.
すると,以下のようなグラフが描かれます.
また,最小二乗法によって,任意の関数にフィッティングさせることも可能です.
上記のデータを2次関数でフィッティングする例を,以下に示します.
ターミナルから,
gnuplot> f(x)= a*x**2+b*x+c
gnuplot> fit f(x) "data.txt" using 1:2 via a, b, c
と入力すると,以下の計算結果がターミナル上に表示されます.
iter chisq delta/lim lambda a b c
0 7.9990000000e+01 0.00e+00 5.09e+00 1.000000e+00 1.000000e+00 1.000000e+00
1 3.2185677582e+00 -2.39e+06 5.09e-01 6.230554e-01 8.299346e-01 8.806786e-01
2 7.9861262705e-01 -3.03e+05 5.09e-02 7.411533e-01 5.098035e-01 2.273590e-01
3 7.8628577192e-01 -1.57e+03 5.09e-03 7.429007e-01 5.283501e-01 1.459378e-01
4 7.8628571429e-01 -7.33e-03 5.09e-04 7.428571e-01 5.285714e-01 1.457143e-01
iter chisq delta/lim lambda a b c
After 4 iterations the fit converged.
final sum of squares of residuals : 0.786286
rel. change during last iteration : -7.33037e-08
degrees of freedom (FIT_NDF) : 2
rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.627011
variance of residuals (reduced chisquare) = WSSR/ndf : 0.393143
Final set of parameters Asymptotic Standard Error
======================= ==========================
a = 0.742857 +/- 0.1676 (22.56%)
b = 0.528571 +/- 0.699 (132.2%)
c = 0.145714 +/- 0.5901 (405%)
correlation matrix of the fit parameters:
a b c
a 1.000
b -0.959 1.000
c 0.568 -0.735 1.000
さらに,
gnuplot> plot f(x) with lines, "data.txt" using 1:2 with points pointtype 7 pointsize 2
と入力すると,以下のようなグラフが描かれます.
この処理では,
gnuplot> f(x)= a*x**2+b*x+c
において,フィッティング関数 f(x) = ax^2 + bx + c を定義しています.
続いて,
gnuplot> fit f(x) "data.txt" using 1:2 via a, b, c
において,変数 (a, b, c)をフィッティングパラメータとして,最小二乗法の計算を行っています.
出力された,リストの"Final set of parameters"が最も誤差の小さいフッティングパラメーターの値です.
その上で,最後の処理
gnuplot> plot f(x) with lines, "data.txt" using 1:2 with points pointtype 7 pointsize 2
で,データと,フィッティングした2次関数の両方を一度に表示させています.また,"pointtype","pointsize"を指定しています.
上記の例では,あくまで例ということで,対話形式でのグラフ作成を行っています.
見栄えの良いグラフを作成するには,"set"コマンドを用いて,細かく出力を調整する必要があるので,それを毎回,対話形式で行うのは大変です.
gnuplotには,上記の各コマンドを1つのファイル(コマンドファイル)にして,そのコマンドファイルを実行することで,プロットを描くことができます.
この方法に関しては,別の機会に....
0 件のコメント :
コメントを投稿