在以下条件下通过向量创建矩阵

时间:2018-02-23 00:42:47

标签: matlab for-loop matrix

我试图在以下条件中通过向量在 MATLAB 中创建矩阵: 矢量是:

v=[a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5; a1; a2; a3; a4; a5] 

v是a1,a2,a3,a4,a5元素的向量,在该示例中重复6次。 现在我需要根据这个向量制作一个矩阵,以便:

matrix=
 a1     a2     a3
 a2     a1     a2
 a3     a2     a1
 a4     a3     a2
 a5     a4     a3

 a1     a2     a3
 a2     a1     a2
 a3     a2     a1
 a4     a3     a2
 a5     a4     a3 

我在矩阵的两个块之间留出间隙来显示概念。

矩阵的第一列是a1,a2,a3,a4,a5(重复两次)。

第二列以a2开头并减少到a1,然后再次增加到a4。所以a2,a1,a2,a3,a4也重复两次。

第三列以a3 ... a1 ... a3开头,并再次重复两​​次。

所以我需要一个for循环来通过矢量元素v。

来制作这个矩阵

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是一个相当特殊的排序,所以最好直接定义它。例如:

blockElements=[[1 2 3];[2 1 2];[3 2 1];[4 3 2];[5 4 3]];
matrixElements=[blockElements; blockElements];

然后你想要的矩阵就是:

matrix=v(matrixElements);

请注意,要使其工作,您不需要v重复6次a1 ... a5。如果v被定义为

,它也会起作用
v=[a1; a2; a3; a4; a5];

v=[a1, a2, a3, a4, a5];

答案 1 :(得分:0)

实际上,我没有看到使用单线函数产生该结果的直接方法;只要元素已经正确放置在向量中,重塑就是一个很好的解决方案......事实并非如此,因此向量中值的重复是有点无用的。最重要的是,当你可以使用straighe索引时,我没有看到使用for循环来实现这个结果。

v = 40:45; % if it's really mandatory you can use repmat(40:45,1,6)
m = [v(repmat(1:5,1,2)).' v(repmat([2 1 2 3 4],1,2)).' v(repmat([3 2 1 2 3],1,2)).'];

m =
    40    41    42
    41    40    41
    42    41    40
    43    42    41
    44    43    42
    40    41    42
    41    40    41
    42    41    40
    43    42    41
    44    43    42