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

4
我想知道如何按以下顺序创建一个大小为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个回答

5
另一种方法是生成点的网格meshgrid,然后进行计算:
(-1)^(x+y)  ,

其中xy是网格内的二维坐标位置。这种方法背后的主要思路是,当你将-1的奇数次幂时,结果为-1,如果是偶数次幂,则为+1。通过查看2D网格中的每个位置,当你将(x,y)坐标相加时,它们的奇偶性会在奇数和偶数之间交替出现...当然,假设这些坐标是整数。您可以利用这一点,通过将每个(x,y)位置的总和与以-1为底数的乘幂系数相结合,实现所需的交替矩阵。

我受到了矩阵行列式计算方法的启发。在此处查看Laplace公式计算行列式的方法: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
不错!很有趣。 - Divakar
@Divakar - 谢谢 :) 我得到这个想法是因为这是计算矩阵行列式的主要驱动力。偶数和奇数位置不断地翻转符号,所以我想...为什么不在这里使用它呢? - rayryeng
1
我正在抄袭这个想法! :) - Divakar
1
顺便说一句,感谢提供链接,我会保存的! - Divakar
1
非常聪明。与行列式的联系很好! - chappjc
显示剩余4条评论

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的解决方案中获取的一个技巧 -

>> n = 4;
>> (-1).^bsxfun(@plus,[1:n]',1:n)

1
两种好方法。我认为我最喜欢的是-1^方法。顺便说一下,借鉴别人的想法总是可以的。;) - chappjc

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提供给OP的链接归结为以下内容:

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

这也可以,对于大型的 n,速度更快。


哦,托普利茨!自从我上控制课以来就没见过了。做得好 :) - rayryeng

4
这个解决方案不涉及任何算术运算:
A = ones(n);
A(1:2:end, 2:2:end) = -1;
A(2:2:end, 1:2:end) = -1;

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

1
除了所有的解决方案,这里还有另外两个解决方案。
其中一个与向量乘法有关:
p = 1-2*mod(1:n,2);
A = p.'*p;

第二个问题涉及Kronecker乘积的运用,但是(遗憾的是),只有当输出大小为偶数时才能使用:
A = kron(ones(n/2), [1 -1;-1 1]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接