16.7 ユーザ定義の変数と関数 (User-defined)

新たなユーザ定義変数と 1 個から 12 個までの引数を持つユーザ定義関数を、 任意の場所で定義したり使ったりすることができます。それは plot コマン ド上でも可能です。

ユーザ定義関数書式:

     <func-name>( <dummy1> {,<dummy2>} ... {,<dummy12>} ) = <expression>

ここで <expression> は仮変数 <dummy1> から <dummy12> で表される数式です。

ユーザ定義変数書式:

     <variable-name> = <constant-expression>

例:

     w = 2
     q = floor(tan(pi/2 - 0.1))
     f(x) = sin(w*x)
     sinc(x) = sin(pi*x)/(pi*x)
     delta(t) = (t == 0)
     ramp(t) = (t > 0) ? t : 0
     min(a,b) = (a < b) ? a : b
     comb(n,k) = n!/(k!*(n-k)!)
     len3d(x,y,z) = sqrt(x*x+y*y+z*z)
     plot f(x) = sin(x*a), a = 0.2, f(x), a = 0.4, f(x)


     file = "mydata.inp"
     file(n) = sprintf("run_%d.dat",n)

最後の 2 行の例は、ユーザ定義文字列変数と、ユーザ定義文字列関数を意味 しています。

変数 pi (3.14159...) と NaN (IEEE 非数 ("Not a Number")) はあらか じめ定義されています。これらが必要なければ、他のものに再定義することも 可能ですし、以下のようにして元の値に復帰することもできます:


     NaN = GPVAL_NaN
     pi  = GPVAL_pi

他にもいくつかの変数が、例えば対話型入出力形式でのマウス操作や当てはめ (fit) などの gnuplot の動作状態に応じて定義されます。詳細は 以下参照: gnuplot-defined variables (16.6)

ある変数 V が既に定義されているかどうかは、式 exists("V") でチェックで きます。例:

     a = 10
     if (exists("a")) print "a is defined"
     if (!exists("b")) print "b is not defined"

変数名や関数名の命名規則は、大抵のプログラミング言語と同じで、先頭はア ルファベットで、その後の文字はアルファベット、数字、"_" が使えます。

各関数の定義式は、'GPFUN_' という接頭辞を持つ特別な文字列値変数として 利用できます。

例:

     set label GPFUN_sinc at graph .05,.95

以下参照: show functions (95.29), functions (84.6), gnuplot-defined variables (16.6),macros (28.2), value (16.3.3)

竹野茂治@新潟工科大学
2019-01-08