gnuplot iteration--最大可迭代值?

时间:2012-12-10 03:04:36

标签: iteration gnuplot

我可以在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,步骤= 10那么没有问题,所以我假设迭代的大小是问题。有什么方法可以解决这个问题,还是我做错了什么?

@ 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)

1 个答案:

答案 0 :(得分:1)

快速将其中的一部分放入python解释器中:

>>> tau = int(40000*365.25*24*3600)
>>> tau
1262304000000L
>>> step = int(10000*365.25*24*3600)
>>> step
315576000000L

注意整数末尾的L?这意味着这些数字溢出了系统的最大整数大小,即:

>>> import sys
>>> sys.maxint   #2**31 - 1
2147483647

我的系统。 Python通过使用自定义类型(long)来优雅地处理它,该类型允许整数占用无限数量的字节。 gnuplot处理这个的方式是溢出包裹...

gnuplot> tau = int(40000*365.25*24*3600)
gnuplot> print tau
-2147483648

现在你有正数的负数。

修改

似乎gnuplot使用4字节整数,无论​​python的sys.maxint是什么。在我的ubuntu x86_64机器上,python的sys.maxint比gnuplot的整数可以处理的要大得多(仍然限制在2**31-1)。