gnuplotを用いたデータの微分(1)

データファイルが以下の条件を満たしている場合、gnuplot4.3以降を使うことで比較的容易にデータの微分をプロットすることができます。

  1. データのx成分が昇順(または降順)になっていること。
  2. データにノイズ成分が少ないこと

以下に例を示します。この例で用いているdiff_data1.datは1列目にx、2列目にsin(x)の値の入ったデータです(実行例の赤いポイント)。微分を実行する際にはgnuplot4.3で新しく取り入れられた累次評価演算子(,)が使われています(help iteration参照)。この演算子を用いて、lastxlastyという変数にそれぞれ現在の一つ前のデータ行のxとyの値を保存しておき、微分値 ≒(現在行のyデータ - 一つ前の行のyデータ)/ (現在行のxデータ - 一つ前の行のxデータ)をプロットしています。

lastx=0.0
lasty=0.0
plot "diff_data1.dat" using 1:2 title "data", \
     "" using (dy=$2-lasty, dx=$1-lastx, lasty=$2, lastx=$1, $1-dx*0.5)\
     :($0==0 ? 1/0 : dy/dx) title "dy/dx"

実行例は以下のとおりです。きちんとデータが微分されてcos(x)になっていることがわかると思います。