我是MATLAB的新手。我已经使用n
循环生成了3 x 1
个较小的数字矩阵,比如说FOR
。所有矩阵都具有如下随机值:
m1 = [3;2;1];
m2 = [5;1;6];
m3 = [0.2;0.8;7]
m4 = [8;3;0]
m5 = [3;7;6]
m6 = [8;2;1.3].
现在我想将所有值连接成一个更大的矩阵M
,以便M
可以像这样表示:
M = [m1 m2 m3; m4 m5 m6]
因此M
的输出应为:
M = [3 5 0.2;
2 1 0.8;
1 6 7;
8 3 8;
3 7 2;
0 6 1.3];
如何使用FOR
循环或其他任何内容对其进行初始化,以便每次增加计数器值即i
时,都会导致插入新矩阵({{ 1}},m1
& so on)在更大的矩阵内,即m2
?
请注意M
是一个非常大的矩阵(可能大约40 x 40),因此我有很多较小的矩阵。
答案 0 :(得分:0)
你真的需要个别变量吗?可能这样的解决方案更简单,仅使用一个mmatrix:
M=zeros(40,40)
for idx=1:size(M,1)
M(idx,:)=your_code_here()
end
如果您之前使用过M1
,现在使用M(1,:)
获取M
的第一行
答案 1 :(得分:0)
这似乎是将矩阵放在一起的非常低效的方式,但每个MatLab新手都应该在他的演变中经历这个阶段。 如果你使用for循环,你应该创建你的矩阵,使它们可以使用你的循环变量索引,否则没有必要使用循环。尝试单元格数组,例如:
m{1}=[3;2;1];
m{2}=[5;1;6];
m{3}=[.2;.8;7];
m{4}=[8;3;0];
m{5}=[3;7;6];
m{6}=[8;2;1.3];
现在您可以在for循环中合并它们:
M = [];
NBlocks = length(m) / 3;
for b=1:NBlocks
M = [M; [m{(b-1)*3+1} m{(b-1)*3+2} m{(b-1)*3+3}] ];
end
注意此代码效率极低,特别是对于大型矩阵,仅用于教育目的。考虑重新设计您的任务,以便为M
矩阵使用矩阵预分配。