我可以在 gnuplot 4.4 中绘制一个变量值与我需要的一样大的函数:
gnuplot> t = 10000*365.25*24*3600
gnuplot> f(x) = alpha*delta*exp(-alpha*x)*(sin(omega*t-alpha*x)-cos(omega*t-alpha*x))
gnuplot> plot f(x)
但是,如果我想使用与上面类似的值来迭代 t,通过使用“plot for”命令,我会得到段错误或者它似乎没有结束(我等了很长时间,但仍然没有响应):
tau = int(40000*365.25*24*3600)
step = int(10000*365.25*24*3600)
f(x,t) = alpha*delta*exp(-alpha*x)*(sin(omega*t-alpha*x)-cos(omega*t-alpha*x))
plot for [t=0:tau:step] f(x,t)
如果我有 tau = 1000,并且 step = 10 那么就没有问题,所以我假设 iterables 的大小是问题所在。有什么办法可以解决这个问题还是我做错了什么?
@mgilson 的回答之后的一些更多信息:我的系统是 64 位的,python 可以处理一些非常大的整数:
>>> import sys
>>> sys.maxint
9223372036854775807
>>> tau = int(40000*365.25*24*3600)
>>> print tau
1262304000000
虽然 gnuplot 不能:
gnuplot> tau = int(40000*365.25*24*3600)
gnuplot> print tau
-2147483648
如果您想尝试,这是绘图文件:
tau = int(40000*365.25*24*3600)
delta = 10
kappa = 1e-6
omega = 2*pi/tau # angular frequency
alpha = sqrt(omega/(2*kappa)) # a simplifying factor
# set the range of x and time, t
set xrange[0:3000]
step = int(10000*365.25*24*3600)
f(x,t) = alpha*delta*exp(-alpha*x)*(sin(omega*t-alpha*x)-cos(omega*t-alpha*x))
plot for [t=0:tau:step] f(x,t)