【问题标题】:Creating Dynamic matrices in MATLAB在 MATLAB 中创建动态矩阵
【发布时间】:2015-11-24 01:24:00
【问题描述】:

我在 MATLAB 中定义一些矩阵时遇到问题。我得到三个数字x,y,z 作为用户的输入,然后我想创建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]

参数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]

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

【问题讨论】:

  • MATLAB 中的空值是 A=[],零矩阵(例如 `A = zeros(3)')仍有一定大小。
  • @Jubobs,零或一,或任何其他初始值并不重要,因为这些值将在算法中进行修改。问题是矩阵的数量是一个输入。
  • 您肯定会希望在单元类中执行此操作。 bsxfuncellfun 但是无法处理 zeros。我会继续挖掘。
  • 如果变量的个数是输入,你必须使用cell array,它仍然有矩阵式索引的好处,或者structure,当你需要时很方便(或更喜欢)命名你的变量。

标签: matlab matrix create-table


【解决方案1】:

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

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 是必须设置为false 的参数,如果输出不是标量,则必须设置为0

访问和更改任何矩阵:

当您键入M{x} 时,您可以将其视为仅相当于一个矩阵名称,即可以直接在{} 之后使用() 来索引矩阵。

所以,你可以这样做:

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

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

【讨论】:

    【解决方案2】:
    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);
    

    【讨论】:

    • 我正要输入这个。赞
    • 可能是解决方案。根据逻辑,使用Cells{end+1}=.. 可能更简单,因此不需要记录索引。
    • 如何在其中一个矩阵中调用单元格 [i,j] 的值?
    • 您可以使用“Cells{prob}(i,j)”这个术语或使用与 tmp=Cells{prob} 相同的新矩阵;
    • 非常感谢您的解释。
    【解决方案3】:
    M1 = zeros(x,y);
    M2 = zeros(y,y);
    M3 = zeors(z,y);
    

    足够简单。虽然为什么你的问题中的M2M3 是一样的,但我还没有弄清楚。

    【讨论】:

    • 矩阵个数为输入!,
    • 那么为什么M2M3 完全一样呢?您希望 M1 和 M(end) 成为 (x,y)(z,y),而其他一切都成为 (y,y)?我仍然不明白那部分。
    • 是的,第一个和最后一个矩阵是 (x,y) 和 (z,y),其余的是 (y,y)。问题是有“y-3”矩阵,所以我不能简单地写零(y,y)。这些矩阵的数量本身就是一个输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多