Проблема заключается в следующем:
У меня есть набор из 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. Но как мне вычислить inv(H), если каждый элемент H является матрицей? Я не могу просто объединить эти меньшие матрицы в большую матрицу H, а затем инвертировать ее, поскольку это даст другой результат, чем, например. инвертируя матрицу H с символическими значениями, а затем заменяя эти символьные значения меньшими матрицами (из-за поточечного произведения, присутствующего в системе уравнений).
До сих пор я придумал 1 решение. Я создам матрицу H с символьными значениями 20x20, инвертирую ее, а затем оценю каждую ячейку полученной инвертированной матрицы с помощью «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
- person bdecaf   schedule 23.07.2015ldivide
иrdivide
подойдут? - person bdecaf   schedule 23.07.2015kron
, чтобы получить соответствующую матрицу, которую можно решить численно. - person bdecaf   schedule 26.07.2015