我有一组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 是 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)]
现在我可以将 A、B、C 和 D 替换为真实的 2x2 矩阵并计算出 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 都是矩阵,“*”表示点乘。
inv(H)* R
不是高效的方法(如果 H 是秩缺失,甚至会失败)。通常的解决方案是解方程 - 例如使用 mldivide - 这通常写作H\R
。 - bdecaf