交替1和-1元素的矩阵 - MATLAB

时间:2014-11-07 21:08:14

标签: matlab matrix

我想知道如何按以下顺序创建矩阵n x n,例如

n=3;

 1 -1  1     
-1  1 -1
 1 -1  1

n=4;

 1 -1  1 -1
-1  1 -1  1
 1 -1  1 -1
-1  1 -1  1

表示每个号码n

6 个答案:

答案 0 :(得分:5)

另一种方法是产生meshgrid个点,然后计算:

(-1)^(x+y)  ,

其中xy是网格内的2D坐标位置。这种方法背后的主要直觉是当你取-1并将其加到奇数时,你返回-1,如果它是偶数,它就是+1。通过查看2D网格中的每个位置,当您将(x,y)坐标加在一起时奇偶校验(奇数/偶数)在奇数和偶数之间交替...当然假设整数坐标。您可以通过获取每个(x,y)位置的总和,并将其应用于功率系数,以-1为基础来实现我们想要的交替矩阵,从而利用这一点。

通过考虑如何计算矩阵的行列式,我对这种方法有所启发。查看拉普拉斯关于计算行列式的公式:http://en.wikipedia.org/wiki/Determinant#Laplace.27s_formula_and_the_adjugate_matrix

因此:

n = 3; %// Define n here
[X,Y] = meshgrid(1:n, 1:n);
A = (-1).^(X+Y)

A =

     1    -1     1
    -1     1    -1
     1    -1     1

如果您想为n = 4显示此内容:

A =

     1    -1     1    -1
    -1     1    -1     1
     1    -1     1    -1
    -1     1    -1     1

答案 1 :(得分:4)

方法#1

>> n = 4;
>> 1-2*mod(bsxfun(@plus,[1:n]',1:n),2)
ans =
     1    -1     1    -1
    -1     1    -1     1
     1    -1     1    -1
    -1     1    -1     1

方法#2

这是来自Ray's solution -

的黑客攻击
>> n = 4;
>> (-1).^bsxfun(@plus,[1:n]',1:n)

答案 2 :(得分:4)

toeplitz适用于此:

>> n=3;
>> hrow = ones(1,n); hrow(2:2:end)=-1;
>> A = toeplitz(hrow)
A =
     1    -1     1
    -1     1    -1
     1    -1     1

>> n=4; hrow = ones(1,n); hrow(2:2:end)=-1;
>> A = toeplitz(hrow)
A =
     1    -1     1    -1
    -1     1    -1     1
     1    -1     1    -1
    -1     1    -1     1
Nemesis在The link向OP提出的his comment归结为:

p = mod(1:n, 2);
A = 1-2*bsxfun(@xor, p.', p)

那也很好,对于大n来说要快得多。

答案 3 :(得分:4)

此解决方案不涉及算术运算:

A = ones(n);
A(1:2:end, 2:2:end) = -1;
A(2:2:end, 1:2:end) = -1;

答案 4 :(得分:3)

cos((0:n-1)*pi)'*cos((0:n-1)*pi)

答案 5 :(得分:1)

除了所有解决方案,还有两个解决方案。

一个与向量乘法有关:

p = 1-2*mod(1:n,2);
A = p.'*p;

第二个是使用Kronecker产品,但是(唉)只有在输出大小均匀的情况下:

A = kron(ones(n/2), [1 -1;-1 1]);