如何在 Matlab 中反转矩阵矩阵?

How to invert a matrix of matrices in Matlab?

问题如下:
我有一组 20 个方程式:

r1 = s1*h1_1 + s2*h1_2 + ... s20*h1_20

r2 = s1*h2_1 + ...

...

r20 = s1*h20_1 + ...

其中 r、s 和 h 是矩阵,* 表示 逐点乘积。 它可以改写为矩阵形式 R = H*S。我想求解 S 的这个方程 - 所以我需要计算 inv(H)*R。但是,如果 H 的每个元素都是矩阵,我该如何计算 inv(H) 呢?我不能简单地将这些 较小的矩阵 连接成一个更大的矩阵 H 然后将其反转 - 因为这会给出不同的结果,例如用符号值求逆矩阵 H,然后用 更小的矩阵 代替这些符号值(因为方程组中存在逐点乘积)。

到目前为止,我想出了 1 个解决方案。我将创建具有 20x20 符号值的矩阵 H,我将它求逆,然后我将使用 'subs' 计算得到的逆矩阵的每个单元格。

H = sym('A',[20 20]);
invmat = inv(H) ;
% here I load 400 smaller matrices with appropriate names
invmat_11 = subs(invmat(1,1));

但是这种矩阵的求逆在任何介质 class 计算机上计算起来都太复杂了,所以我从来没有设法 运行 这段代码。您知道计算矩阵 H 的求逆或直接求解 S 的任何其他方法吗?

有人问我一些简单的例子: 考虑等式 R = H*S(S 未知)。假设 H=[A B; C D],其中 A、B、C、D 是 2x2 矩阵,例如 A = [A11 A12; A21 A22]

并且R和S是2x1矩阵,例如

R = [R1;R2]

为了计算 S,我需要求解 inv(H)*R,象征性地 inv(H) =

[ -D/(B*C - A*D), B/(B*C - A*D)] [ C/(B*C - A*D), -A/(B*C - A*D)]

现在我可以用实数 2x2 矩阵替换 A、B、C 和 D 并计算 H 的求逆:

inv(H) = [H1 H2; H3 H4] 其中

H1 = -D/(B*C - A*D)

这样就构成了inv(H)的计算。 现在我需要将 inv(H) 与 R 相乘(求解 S):

S1 = H1*R1 + H2*R2 S2 = H3*R1 + H4*R2

但请注意,H1到H4和R1到R2都是矩阵,*表示逐点乘积。

我找到了求解这组方程的最佳解法。实际上,这非常简单:只需注意这些方程式可以重写为以下形式:

first_element_of_r1 = first_element_ofs1*first_element_of_h1_1 + ...

这是由于方程中存在分段积。现在 r1 到 r20 矩阵的每个元素都可以在循环(或并行循环)中独立求解。谢谢大家的帮助。