在 MATLAB 中创建动态矩阵

Creating Dynamic matrices in MATLAB

我在 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]

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

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

很简单。虽然为什么你问题中的 M2M3 相同我还没有弄清楚。

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 24, 3, 2 甚至 4;3;2.这里基本不可能出错!

其工作方式是:arrayfun 对向量 [1 2*ones(1,y-1) 3] 的每个元素执行一次运算。该操作是创建一个具有所需维度的零矩阵。 UniformOutput 是一个参数,如果输出不是标量,则必须设置为 false0

要访问和更改任何矩阵:

当您键入 M{x} 时,您可以将其视为等同于矩阵名称,即可以在 [=25= 之后直接使用 () 来索引矩阵].

所以,你可以这样做:

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

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