问题如下:
我有一组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,然后用较小的矩阵代替这些符号值(因为方程组中存在逐点积).
到目前为止,我想出了一个解决方案.我将创建具有20×20符号值的矩阵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是2×1矩阵,例如
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)]
现在我可以用实数2×2矩阵代替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都是矩阵,*表示逐点积.