定数を使う

方形波の3次のフーリエ級数は,振幅A,周波数f,時間tとして次式で表されます。

(4A/pi) { sin(2*pi*ft) + (1/3)sin(3*2*pi*ft) + (1/5)sin(5*2*pi*ft) }

この関数のグラフを描く場合,毎回 (2*pi*f) を入力するのは面倒ですし,間違いの元となります。 そこで定数をラベル付けし,それを利用するようにします。 A = 1.0,f = 300 [kHz]とすると,

gnuplot> a = 4 * 1.0 / pi
gnuplot> b = 2 * pi * 300 * (10**3)

と定義しておきます。 定数piはあらかじめ定義されているようです。

gnuplot> print pi
3.14159265358979

printは与えられた式の値を(計算して)表示するコマンドです。 a, bを用いると,

# 結果

gnuplot> plot a * ( sin(b*x) + (1.0/3.0)*sin(3*b*x) + (1.0/5.0)*sin(5*b*x) )

でグラフを描くことができます(割り算を1/3と入力すると,整数の除算で結果も整数になり1/3が0になってしまうので注意)。

ここでは紛らわしいので「定数 (constant)」として説明しましたが,gnuplotのヘルプなどでは「変数 (variable)」と書かれています。 実際,これらの「変数」の一覧を表示するには次のようにします。

gnuplot> show variables

関数を定義する

さらに手間を省くために(抽象化するとも言えます),関数を定義します。

gnuplot> k(n) = 1.0 / n
gnuplot> f(n,x) = k(n) * sin(b*n*x)

k(n) は特にわざわざ独立に定義する必要はありませんが,一応定義しておきました。 さて,plotしてみます。

gnuplot> set xrange [0:10]
gnuplot> plot a * ( f(1,x) + f(3,x) + f(5,x) )                    # 結果
gnuplot> plot a * ( f(1,x) + f(3,x) + f(5,x) + f(7,x) + f(9,x) )  # 結果
gnuplot> plot a * ( f(1,x) + f(3,x) + f(5,x) + f(7,x) + \
> f(9,x) + f(11,x) + f(13,x) )                                    # 結果

次数を増やすと近似の精度が高くなることが確認できます。 なお,行末の\はコマンドが次の行まで継続することを指示します。

$Id: constants.shtml 1289 2007-02-04 13:22:39Z SYSTEM $