我在MATLAB中定义一些矩阵时遇到问题。我得到三个数字x
,y
,z
作为用户的输入,然后我想创建y-1
个空矩阵。例如,考虑x = 3
,y = 4
和z = 2
。所需的y-1
矩阵M1
,M2
和M3
为:
size(M1) = [3,4] ~ [x,y]
size(M2) = [4,4] ~ [y,y]
size(M3) = [4,2] ~ [y,z]
在运行程序之前,参数x
,y
是未知的。如果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]
实际上,主要问题是矩阵的数量是一个输入。 请指导我如何创建一个函数循环来定义这个矩阵。
答案 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 2
,4, 3, 2
或4;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);
足够简单。虽然您问题中M2
和M3
的原因是相同的,但我还没想到。