在 MATLAB 中创建动态矩阵
Creating Dynamic matrices in MATLAB
我在 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]
确实主要问题是矩阵的数量是一个输入。
请指导我如何创建一个函数循环来定义这个矩阵。
M1 = zeros(x,y);
M2 = zeros(y,y);
M3 = zeors(z,y);
很简单。虽然为什么你问题中的 M2
和 M3
相同我还没有弄清楚。
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);
您可以不使用单元格来执行此操作,但我强烈建议您不要这样做,因此:
一种方法是将每个矩阵作为一个单元格的一部分:
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}
时,您可以将其视为等同于矩阵名称,即可以在 [=25= 之后直接使用 ()
来索引矩阵].
所以,你可以这样做:
M{1}(3,3) = 2;
会将值 2
赋给矩阵 1
中的元素 (3,3)
。
我在 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]
确实主要问题是矩阵的数量是一个输入。 请指导我如何创建一个函数循环来定义这个矩阵。
M1 = zeros(x,y);
M2 = zeros(y,y);
M3 = zeors(z,y);
很简单。虽然为什么你问题中的 M2
和 M3
相同我还没有弄清楚。
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);
您可以不使用单元格来执行此操作,但我强烈建议您不要这样做,因此: 一种方法是将每个矩阵作为一个单元格的一部分:
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}
时,您可以将其视为等同于矩阵名称,即可以在 [=25= 之后直接使用 ()
来索引矩阵].
所以,你可以这样做:
M{1}(3,3) = 2;
会将值 2
赋给矩阵 1
中的元素 (3,3)
。