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

时间:2015-07-23 08:57:35

标签: matlab matrix-inverse

问题如下:
我有一组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,然后用小矩阵代替这些符号值(因为方程组中存在逐点积)。

到目前为止,我想出了一个解决方案。我将创建具有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));

但是这种矩阵的反转在任何中型计算机上计算都很复杂,所以我从来没有设法运行这个代码。你知道任何其他计算矩阵H的反演的方法 - 或直接求解S?

我被问到一些简单的例子: 考虑等式R = H * S(S未知)。假设H = [A B; C D],其中A,B,C,D是2×2矩阵,例如, 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都是矩阵,*表示逐点积。

1 个答案:

答案 0 :(得分:1)

我找到了解决这组方程的最佳解决方案。实际上,这很简单:只需要​​注意这些方程可以用以下形式重写:

first_element_of_r1 = first_element_ofs1*first_element_of_h1_1 + ...

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