gnuplot 入门教程 3
最后更新于:2022-04-01 07:31:46
# 常量、操作符和函数
### 数字
gnuplot 表示数字可分成整数、实数及复数三类:
整数:gnuplot 与 C 语言相同,采用 4 byte 储存整数。故能表示 -2147483647 至 +2147483647 之间的整数。
实数:能表示约 6 或 7 位的有效位数,指数部份为不大于 308 的数字。
复数:以 {<real>,<imag>} 表示复数。其中<real>为复数的实数部分,<imag>为虚数部分,此两部分均以实数型态表示。 如 3 + 2i 即以 {3,2} 表示。
gnuplot 储存数字的原则为,若能以整数方式储存则以整数储存数字,不然以实数方式储存,其次以复数方式储存。例如在 gnuplot 执行
~~~
print 1/3*3
print 1./3*3
~~~
分别得到 0 和 1.0 的结果。这是因前者使用整数计算,而后者采用实数计算的结果。执行
~~~
print 1234.567
print 12345 + 0.56789
print 1.23e300 * 2e6
print 1.23e300 * 2e8
~~~
分别得到 1234.57、12345.6、2.46e+304 和 undefined value 的结果。这些例子是受到实数的有效位数和所能表现最大数字的限制。这是我们要注意的。
### 操作符
gnuplot 的操作符与 C 语言基本相同。 所有的操作均可做用在整数、实数或复数上。
表格 1 Unary Operators
<table><tbody><tr><td valign="top"><p>Symbol</p></td><td valign="top"><p>Example</p></td><td valign="top"><p>Explanation</p></td></tr><tr><td valign="top"><p>-</p></td><td valign="top"><p>-a</p></td><td valign="top"><p>unary minus</p></td></tr><tr><td valign="top"><p>~</p></td><td valign="top"><p>~a</p></td><td valign="top"><p>one's complement</p></td></tr><tr><td valign="top"><p>!</p></td><td valign="top"><p>!a</p></td><td valign="top"><p>logical negation</p></td></tr><tr><td valign="top"><p>!</p></td><td valign="top"><p>a!</p></td><td valign="top"><p>factorial</p></td></tr></tbody></table>
表格 2 Binary Operators
<table><tbody><tr><td valign="top"><p>Symbol</p></td><td valign="top"><p>Example</p></td><td valign="top"><p>Explanation</p></td></tr><tr><td valign="top"><p>**</p></td><td valign="top"><p>a**b</p></td><td valign="top"><p>exponentiation</p></td></tr><tr><td valign="top"><p>*</p></td><td valign="top"><p>a*b</p></td><td valign="top"><p>multiplication</p></td></tr><tr><td valign="top"><p>/</p></td><td valign="top"><p>a/b</p></td><td valign="top"><p>division</p></td></tr><tr><td valign="top"><p>%</p></td><td valign="top"><p>a%b</p></td><td valign="top"><p>modulo</p></td></tr><tr><td valign="top"><p>+</p></td><td valign="top"><p>a+b</p></td><td valign="top"><p>addition</p></td></tr><tr><td valign="top"><p>-</p></td><td valign="top"><p>a-b</p></td><td valign="top"><p>subtraction</p></td></tr><tr><td valign="top"><p>==</p></td><td valign="top"><p>a==b</p></td><td valign="top"><p>equality</p></td></tr><tr><td valign="top"><p>!=</p></td><td valign="top"><p>a!=b</p></td><td valign="top"><p>inequality</p></td></tr><tr><td valign="top"><p>&</p></td><td valign="top"><p>a&b</p></td><td valign="top"><p>bitwise AND</p></td></tr><tr><td valign="top"><p>^</p></td><td valign="top"><p>a^b</p></td><td valign="top"><p>bitwise exclusive OR</p></td></tr><tr><td valign="top"><p>|</p></td><td valign="top"><p>a|b</p></td><td valign="top"><p>bitwise inclusive OR</p></td></tr><tr><td valign="top"><p>&&</p></td><td valign="top"><p>a&&b</p></td><td valign="top"><p>logical AND</p></td></tr><tr><td valign="top"><p>||</p></td><td valign="top"><p>a||b</p></td><td valign="top"><p>logical OR</p></td></tr><tr><td valign="top"><p>?:</p></td><td valign="top"><p>a?b:c</p></td><td valign="top"><p>ternary operation</p></td></tr></tbody></table>
### 函数
在 gnuplot 中函数的参数可以是整数,实数或是复数。表格 3是 gnuplot 所提供的函数。
表格 3 gnuplot functions
<table><tbody><tr><td valign="top"><p>Function</p></td><td valign="top"><p>Auguments</p></td><td valign="top"><p>Returns</p></td></tr><tr><td valign="top"><p>abs(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>absolute value of x, |x|; same type</p></td></tr><tr><td valign="top"><p>abs(x)</p></td><td valign="top"><p>complex</p></td><td valign="top"><p>length of x, sqrt( real(x)^2 + imag(x)^2 )</p></td></tr><tr><td valign="top"><p>acos(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>1/cos(x) (inverse cosine) in radians</p></td></tr><tr><td valign="top"><p>Acosh(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>cosh−1 x (inverse hyperbolic cosine) in radians</p></td></tr><tr><td valign="top"><p>arg(x)</p></td><td valign="top"><p>complex</p></td><td valign="top"><p>the phase of x in radians</p></td></tr><tr><td valign="top"><p>asin(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>1/sin(x) (inverse sin) in radians</p></td></tr><tr><td valign="top"><p>asinh(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>sinh−1 x (inverse hyperbolic sin) in radians</p></td></tr><tr><td valign="top"><p>atan(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>1/tan(x) (inverse tangent) in radians</p></td></tr><tr><td valign="top"><p>atan2(y,x)</p></td><td valign="top"><p>int or real</p></td><td valign="top"><p>tan−1(y/x) (inverse tangent)</p></td></tr><tr><td valign="top"><p>atanh(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>tanh−1 x (inverse hyperbolic tangent) in radians</p></td></tr><tr><td valign="top"><p>besj0(x)</p></td><td valign="top"><p>int or real</p></td><td valign="top"><p>J0 Bessel function of x</p></td></tr><tr><td valign="top"><p>besj1(x)</p></td><td valign="top"><p>int or real</p></td><td valign="top"><p>J1 Bessel function of x</p></td></tr><tr><td valign="top"><p>besy0(x)</p></td><td valign="top"><p>int or real</p></td><td valign="top"><p>Y0 Bessel function of x</p></td></tr><tr><td valign="top"><p>besy1(x)</p></td><td valign="top"><p>int or real</p></td><td valign="top"><p>Y1 Bessel function of x</p></td></tr><tr><td valign="top"><p>ceil(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>smallest integer not less than x (real part)</p></td></tr><tr><td valign="top"><p>cos(x)</p></td><td valign="top"><p>radians</p></td><td valign="top"><p>cos x, cosine of x</p></td></tr><tr><td valign="top"><p>cosh(x)</p></td><td valign="top"><p>radians</p></td><td valign="top"><p>cosh x, hyperbolic cosine of x</p></td></tr><tr><td valign="top"><p>erf(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>Erf(real(x)), error function of real(x)</p></td></tr><tr><td valign="top"><p>erfc(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>Erfc(real(x)), 1.0 - error function of real(x)</p></td></tr><tr><td valign="top"><p>exp(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>exponential function of x</p></td></tr><tr><td valign="top"><p>floor(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>largest integer not greater than x (real part)</p></td></tr><tr><td valign="top"><p>gamma(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>Gamma(real(x)), gamma function of real(x)</p></td></tr><tr><td valign="top"><p>ibeta(p,q,x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>Ibeta(real(p,q,x)), ibeta function of real(p,q,x)</p></td></tr><tr><td valign="top"><p>inverf(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>inverse error function of real(x)</p></td></tr><tr><td valign="top"><p>igamma(a,x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>Igamma(real(a,x)), igamma function of real(a,x)</p></td></tr><tr><td valign="top"><p>imag(x)</p></td><td valign="top"><p>complex</p></td><td valign="top"><p>imaginary part of x as a real number</p></td></tr><tr><td valign="top"><p>invnorm(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>inverse normal distribution function of real(x)</p></td></tr><tr><td valign="top"><p>int(x)</p></td><td valign="top"><p>real</p></td><td valign="top"><p>integer part of x, truncated toward zero</p></td></tr><tr><td valign="top"><p>lambertw(x)</p></td><td valign="top"><p>real</p></td><td valign="top"><p>Lambert W function</p></td></tr><tr><td valign="top"><p>lgamma(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>Lgamma(real(x)), lgamma function of real(x)</p></td></tr><tr><td valign="top"><p>log(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>ln(x), natural logarithm (base e) of x</p></td></tr><tr><td valign="top"><p>log10(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>log(x), logarithm (base 10) of x</p></td></tr><tr><td valign="top"><p>norm(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>normal distribution (Gaussian) function of real(x)</p></td></tr><tr><td valign="top"><p>rand(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>normal distribution (Gaussian) function of real(x)</p></td></tr><tr><td valign="top"><p>real(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>Rand(real(x)), pseudo random number generator</p></td></tr><tr><td valign="top"><p>sgn(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>real part of x</p></td></tr><tr><td valign="top"><p>sin(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>1 if x>0, -1 if x<0, 0 if x=0. imag(x) ignored</p></td></tr><tr><td valign="top"><p>sinh(x)</p></td><td valign="top"><p>radians</p></td><td valign="top"><p>sin(x), sine of x</p></td></tr><tr><td valign="top"><p>sqrt(x)</p></td><td valign="top"><p>radians</p></td><td valign="top"><p>sinh(x), hyperbolic sine x</p></td></tr><tr><td valign="top"><p>tan(x)</p></td><td valign="top"><p>any</p></td><td valign="top"><p>sqrt(x), square root of x</p></td></tr><tr><td valign="top"><p>tanh(x)</p></td><td valign="top"><p>complex</p></td><td valign="top"><p>tan(x), tangent of x</p></td></tr><tr><td valign="top"><p>column(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>column x during datafile manipulation.</p></td></tr><tr><td valign="top"><p>defined(X)</p></td><td valign="top"><p>variable name</p></td><td valign="top"><p>returns 1 if a variable X is defined, 0 otherwise.</p></td></tr><tr><td valign="top"><p>tm hour(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the hour</p></td></tr><tr><td valign="top"><p>tm mday(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the day of the month</p></td></tr><tr><td valign="top"><p>tm min(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the minute</p></td></tr><tr><td valign="top"><p>tm mon(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the month</p></td></tr><tr><td valign="top"><p>tm sec(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the second</p></td></tr><tr><td valign="top"><p>tm wday(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the day of the week</p></td></tr><tr><td valign="top"><p>tm yday(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the day of the year</p></td></tr><tr><td valign="top"><p>tm year(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>the year</p></td></tr><tr><td valign="top"><p>valid(x)</p></td><td valign="top"><p>int</p></td><td valign="top"><p>test validity of column(x) during datafile manip.</p></td></tr></tbody></table>
下面举一些例子:
~~~
plot [0.5:20] besj0(x), besj1(x), besy0(x), besy1(x)
plot [0:5] erf(x), erfc(x), inverf(x)
~~~
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-24_56a4234144c49.PNG)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-24_56a423415319e.PNG)
### 用户自定义函数和常量
在 gnuplot 中,用户可自定函数。函数可有 1 至 5 个自变量。 其定义函数的语法如下:
~~~
<function-name> ( <dummy1> {,<dummy2> {, ...}}) = <expression>
~~~
而用户定义常数的语法如下:
~~~
<variable-name> = <constant-expression>
~~~
下面举一些例子:
~~~
# 常数 w 为 2。
w = 2
# 常数 q 为小于但最接近 tan(pi/2 - 0.1) 的整数。
q = floor(tan(pi/2 - 0.1))
# 函数 f(x) 为 sin(w*x),其中 w 为常数。
f(x) = sin(w*x)
# 函数 sinc(x) 为 sin(pi*x)/(pi*x)。
sinc(x) = sin(pi*x)/(pi*x)
# 函数 delta(t) 为脉冲函数。
delta(t) = (t == 0)
# 函数 ramp(t) 当其小于零为零,当其大于零为斜率等于 1 的直线。
ramp(t) = (t > 0) ? t : 0
# 函数 min(a,b) 取两者中较小的数。
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)
~~~
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-24_56a4234169f13.PNG)
gnuplot 已定义的常数仅有 pi (pi = 3.14159)。