数据值大于浮动容量 - 在Octave中绘图

时间:2014-11-04 15:07:51

标签: gnuplot octave

我有一个非常简单的八度脚本,我只想绘制一些值,但我得到错误:

warning: gl-render: data values greater than float capacity.  (1) Scale data, or (2) Use gnuplot

脚本是:

a = 0.2;
z = 160;
L = 8; 
w = 31.12;
x = 0;
g = 9.81;
k = 0.785;
rho = 1025;

  for t = 0:10
      eta_0 = -(1/g)*exp(0)*cos(k*x-w*t);
      u_x = a*w*exp(k*z)*cos(k*x-w*t);
      w_x = a*w*exp(k*z)*sin(k*x-w*t);
      p_d = -rho*a*g*exp(k*z)*cos(k*x-w*t);
  endfor

plot(t,eta_0); hold on
plot(t,u_x); hold on
plot(t, w_x); hold on
plot(t,p_d); 

我无法在网上搜索后发现有关此错误的任何有用信息,并且不熟悉使用octave和gnuplot,因此不确定如何使用gnuplot。我使用的是Ubuntu 12.04。任何建议或帮助将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可能希望循环如下,否则,您只会获得单个数据点,而不是曲线:

for t = 0:10
      eta_0(t) = -(1/g)*exp(0)*cos(k*x-w*t);
      u_x(t) = a*w*exp(k*z)*cos(k*x-w*t);
      w_x(t) = a*w*exp(k*z)*sin(k*x-w*t);
      p_d(t) = -rho*a*g*exp(k*z)*cos(k*x-w*t);
endfor

甚至更好(没有for循环,使用矢量化操作):

t = 0:10;
eta_0 = -(1/g)*exp(0)*cos(k*x-w*t);
u_x = a*w*exp(k*z)*cos(k*x-w*t);
w_x = a*w*exp(k*z)*sin(k*x-w*t);
p_d = -rho*a*g*exp(k*z)*cos(k*x-w*t);

您尝试绘制的值非常大(~7e57),这可能是错误的来源。尝试在代码的开头添加graphics_toolkit('gnuplot')以使用gnuplot图形工具包,看看它是否更好。我在八度音阶中尝试了它,它工作正常,给我以下情节:

enter image description here