Matlab利用已知方阵创建斜对角矩阵
A=[ 1 2 3 4 ;
7 8 9 10 ;
13 14 15 16 ;
19 20 21 22 ];
- 对于小矩阵,直接利用for循环解决
n = size(A,1) ;
B1 = zeros(n,n) ;
for i=1:n
for j=1:n
if i==j
B1(i,j)=A(i,n-i+1);
elseif j==n-i+1
B1(i,j)=A(i,i);
else
B1(i,j)=A(i,j);
end
end
end
B1
- 利用Matlab元素编号规则,调换对角线元素和斜对角线元素的序号
n = size(A,1);
% 原始元素编号
idx = 1:n^2;
% 调换序号
idx([1:(n+1):n^2, n^2-n+1:1-n:n] ) = [n^2-n+1:1-n:n, 1:(n+1):n^2];
% 重新生成矩阵
B2 = reshape(A(idx), n, n)
B1 =
4 2 3 1
7 9 8 10
13 15 14 16
22 20 21 19
B2 =
4 2 3 1
7 9 8 10
13 15 14 16
22 20 21 19
可以看出两种方法给出了相同的结果。对于规模很大的矩阵,第二种方法比第一种方法会快很多。