ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 常量、操作符和函数 ### 数字 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>&amp;</p></td><td valign="top"><p>a&amp;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>&amp;&amp;</p></td><td valign="top"><p>a&amp;&amp;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&gt;0, -1 if x&lt;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://box.kancloud.cn/2016-01-24_56a4234144c49.PNG) ![](https://box.kancloud.cn/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://box.kancloud.cn/2016-01-24_56a4234169f13.PNG) gnuplot 已定义的常数仅有 pi (pi = 3.14159)。