在MATLAB中创建动态矩阵

时间:2015-08-29 14:17:50

标签: matlab matrix create-table

我在MATLAB中定义一些矩阵时遇到问题。我得到三个数字xyz作为用户的输入,然后我想创建y-1个空矩阵。例如,考虑x = 3y = 4z = 2。所需的y-1矩阵M1M2M3为:

size(M1) = [3,4] ~ [x,y]

size(M2) = [4,4] ~ [y,y]

size(M3) = [4,2] ~ [y,z]

在运行程序之前,参数xy是未知的。如果y为5,则矩阵为:

size(M1) = [3,5] ~ [x,y]

size(M2) = [5,5] ~ [y,y]

size(M3) = [5,5] ~ [y,y]

size(M4) = [5,2] ~ [y,z]

实际上,主要问题是矩阵的数量是一个输入。 请指导我如何创建一个函数循环来定义这个矩阵。

3 个答案:

答案 0 :(得分:4)

X = input('Enter X please: '); 
Y = input('Enter Y please: '); 
Z = input('Enter Z please: '); 
Cells={}
Cells{1}=zeros(X,Y);
for i=2:Y-1
 Cells{i}=zeros(Y,Y);   
end;
Cells{Y-1}=zeros(Y,Z);

答案 1 :(得分:4)

可以在不使用单元格的情况下执行此操作,但我强烈建议您不要这样做,所以: 一种方法,每个矩阵都是一个单元格的一部分:

dims = str2num(input('Type in selected x,y,z: ', 's'));

M = arrayfun(@(n) zeros(dims(n), dims(2)), [1 2*ones(1,y-1) 3], 'UniformOutput', 0)

%% In the command window:
Type in selected x,y,z: 3 4 2

M = 
    [3x4 double]    [4x4 double]    [2x4 double]

请注意,使用str2num(input())方法,您可以同时输入:[4 3 2][4, 3, 2]4 3 24, 3, 24;3;2。这里基本上不可能犯错!​​

这种方式的工作方式是:arrayfun对向量[1 2*ones(1,y-1) 3]的每个元素执行操作。操作是创建具有所需尺寸的零矩阵。 UniformOutput是必须设置为false的参数,如果输出不是标量,则必须设置为0

访问并更改任何矩阵:

当您键入M{x}时,您可以将其视为矩阵名称的等价物,即在()之后直接使用{}索引矩阵。

所以,你可以这样做:

M{1}(3,3) = 2;

会将值2分配给矩阵(3,3)中的元素1

答案 2 :(得分:0)

M1 = zeros(x,y);
M2 = zeros(y,y);
M3 = zeors(z,y);

足够简单。虽然您问题中M2M3的原因是相同的,但我还没想到。