我正在尝试使用八度音程来做一个数据近似项目,但是我在测试一些基本的东西时遇到了一些麻烦。我对八度音阶不是很有经验,所以我希望有人能指出我正确的方向。
我正在尝试使用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序列是正确的,但我会将其包含在内进行验证。这是在缩放到-3
和3
之间的时候:
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
网格图:
Halton Graph N = 13
:
Halton Graph N = 300
:
现在,就我对这段代码的理解而言,Halton序列图应该看起来不像它,并且当我增加N
时,它应该更像meshgrid
图,但它保持相同的变形形状。我不确定自己哪里出错了,有人能指出我正确的方向吗?
注意:我现在正在使用这个代码与Octave,但我稍后也将它与Matlab一起使用,所以我将它标记为两者。
答案 0 :(得分:4)
快速查看X
和Y
会发现问题:
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
的绘图: