首页 > 解决方案 > 如何在 MATLAB 中制作特定的矩阵?

问题描述

我正在尝试制作一个长度为 N 的方阵,其中最后一行中的数字从下一行开始,并且在达到 N 后数字重复。我希望它处于 for 循环中。

示例 1:

[1 2 3 4;
 4 1 2 3;
 3 4 1 2;
 2 3 4 1]

示例 2:

[1 2 3 4 5;
 5 1 2 3 4;
 4 5 1 2 3;
 3 4 5 1 2;
 2 3 4 5 1]

有什么建议么?

这是我得到的最接近的:

q =1;
N=4;
for n = 0:N-1
    for m = 0:N-1
        if q < N
           C(n+1,m+1) = q;
           q = q + 1;
        elseif q == N
           C(n+1,m+1) = q;
           q = q + 1;
        elseif q > N
           C(n+1,m+1) = q-1;
           q = 1;
        end
    end
end

结果:

[1 2 3 4
 4 1 2 3
 4 4 1 2
 3 4 4 1]

从第 2 排到第 3 排有些东西搞砸了,我不知道该去哪里。

标签: matlab

解决方案


一种使用模数的解决方案:

n = 5;
A = [n:(2*n-1)]-[0:(n-1)].';
R = mod(A,n)+1

% R = 
%   [1 2 3 4
%    4 1 2 3
%    3 4 1 2
%    2 3 4 1]

推荐阅读