在Matlab中将矩阵的“标签”转换为矩阵

时间:2011-12-15 12:53:59

标签: matlab

我正在尝试编写一个简短的Matlab代码来执行某个数学函数。该代码生成一个向量H,其中包含1,2或3的条目(大小取决于其他因素)。 (在我看来),数字1,2和3对应于三个特定的矩阵。一旦我的程序计算了H,我希望它能够将其条目所代表的所有矩阵相乘。为了澄清,如果H = [1 2 3 2],我想要我的代码来计算A * B * C * B.这样做最简单的方法是什么?我想创建一个带有矩阵条目的向量,并使用一个函数来给出向量条目的乘积,但是我无法使它工作(并且不知道它是否可以工作 - 我是对Matlab来说很新鲜)。

理想情况下,我宁愿不重写我的其余代码 - 如果有办法让它与我迄今为止所做的工作一起工作,那就太棒了。我正在寻找功能而不是光滑的编码 - 只要它有效,它是否笨拙并不重要。

2 个答案:

答案 0 :(得分:2)

如果矩阵的大小不同,@ puloos答案可能会有问题 - 特别是如果行数不同的话。如果将矩阵放在单元格中,应该可以工作。

 matrices = {A,B,C,D};

 result = matrices{H(1)};
 for i=2:numel(H)
   result = result * matrices{H(i)};
 end

答案 1 :(得分:0)

将所有矩阵放在另一个matice中,然后您可以使用H的值作为选择正确矩阵的关键matices = [A, B, C, D]。然后,您将逐个进行H并将其与最后一次操作的结果相乘。你将从与其他矩阵具有相同维度的对角矩阵开始,并在循环的每一轮中将其与matrices核心中的矩阵相乘,其值为H

matrices = [A, B, C, D]
// d is dimension of your matrices (i guess they are square)
erg = diag(d)
for i=length(H):1
   // supposed your matices are 2d
   erg = matrices(H(i),:,:)*init
end

我不知道这里是否有意义从左侧乘以每一步(就像你在openGL中那样)但我认为这允许你分步操作(就像在openGL中完成的那样)