我可以在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)
答案 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
)。