【问题标题】:Plotting Peaks function in Octave doesn't produce correct graph在 Octave 中绘制峰值函数不会产生正确的图形
【发布时间】:2016-05-28 12:55:55
【问题描述】:

我正在尝试使用 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

网格图:

哈尔顿图N = 13:

哈尔顿图N = 300:

现在,据我对这段代码的理解,Halton 序列图不应该像它那样,随着我增加N,它应该更类似于meshgrid 图,但它保持相同的变形形状。我不确定我要去哪里错了,有人可以指出我正确的方向吗?

注意:我现在将此代码与 Octave 一起使用,但我稍后也会将其与 Matlab 一起使用,因此我将其标记为两者。

【问题讨论】:

    标签: matlab plot octave


    【解决方案1】:

    快速查看您的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);
    

    结果如下:


    说明

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

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

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

    x1 的绘图:

    x2 的绘图:

    【讨论】:

    • 我没有意识到曲面图需要排序。谢谢你的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2015-02-17
    • 2016-10-23
    • 2021-02-22
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多