Octave中的Plotting Peaks函数无法生成正确的图形

时间:2016-02-17 01:20:06

标签: matlab plot octave

我正在尝试使用八度音程来做一个数据近似项目,但是我在测试一些基本的东西时遇到了一些麻烦。我对八度音阶不是很有经验,所以我希望有人能指出我正确的方向。

我正在尝试使用Halton序列生成x,y点列表。我想将这些x,y点插入peaks函数,以获取这些坐标的z峰值。接下来,我想绘制那些x,y,z点,以确保我的情节类似于峰值情节,但我的情节看起来不对。

以下是代码:

%13 for this example to compare to meshgrid
N = 13;

%creates a halton sequence for N and scales it between -3 to 3
seq = haltonseq(N, 2) * 6 – 3;

%save the x,y coordinate from the halton sequence
X = seq(:,1);
Y = seq(:,2);

%convert the x,y vector in matrixes
X = repmat(X, 1, N)';
Y = repmat(Y,1,N);

%get the z values for x,y
Z = peaks(X, Y);

%plot my x,y,z values
surf(X,Y,Z);

%plot meshgrid to compare to
[mX mY] = meshgrid(-3:0.5:3);
mZ = peaks(mX, mY);
surf(mX, mY, mZ);

Halton序列是正确的,但我会将其包含在内进行验证。这是在缩放到-33之间的时候:

seq =

   0.00000  -1.00000
  -1.50000   1.00000
   1.50000  -2.33333
  -2.25000  -0.33333
   0.75000   1.66667
  -0.75000  -1.66667
   2.25000   0.33333
  -2.62500   2.33333
   0.37500  -2.77778
  -1.12500  -0.77778
   1.87500   1.22222
  -1.87500  -2.11111
   1.12500  -0.11111

网格图:

Mesh Graph

Halton Graph N = 13

enter image description here

Halton Graph N = 300

enter image description here

现在,就我对这段代码的理解而言,Halton序列图应该看起来不像它,并且当我增加N时,它应该更像meshgrid图,但它保持相同的变形形状。我不确定自己哪里出错了,有人能指出我正确的方向吗?

注意:我现在正在使用这个代码与Octave,但我稍后也将它与Matlab一起使用,所以我将它标记为两者。

1 个答案:

答案 0 :(得分:4)

快速查看XY会发现问题:

octave:33> X
X =

   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500
   0.00000  -1.50000   1.50000  -2.25000   0.75000  -0.75000   2.25000  -2.62500   0.37500  -1.12500   1.87500  -1.87500   1.12500

octave:34> Y
Y =

  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000  -1.00000
   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000   1.00000
  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333  -2.33333
  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333  -0.33333
   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667   1.66667
  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667  -1.66667
   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333   0.33333
   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333   2.33333
  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778  -2.77778
  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778  -0.77778
   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222   1.22222
  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111  -2.11111
  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111  -0.11111

如您所见,它们未正确分类。 在绘图时,订购(通常)很重要;见下面的解释。 在repmat修复后添加以下两行:

X = sort(X,2);
Y = sort(Y,1);

结果如下:

enter image description here

<强>解释

问题在于,在绘制必须在点之间绘制线条的图形时,排序很重要。 为了说明,请考虑这个小例子:

x1 = [1 2 3 4];
x2 = [3 1 4 2];
plot(x1,x1.^2);
plot(x2,x2.^2);

这两个将绘制完全相同的点,但顺序不同。 因此,加入它们的线条看起来会有所不同:

x1的绘图:

enter image description here

x2的绘图:

enter image description here