Другой способ сделать это - создать матрицу перестановок для извлечения известных и неизвестных строк из ваших векторов.Этот метод немного сложнее, но гораздо более удобен для программистов:
Скажите, что вы.система:
K . T = Q
, где K
- 3x3
, а T
и Q
- 3x1
векторов.Вы можете создать матрицу перестановок Pf
таким образом, чтобы при умножении на T
результат был неизвестной частью матрицы T
(которая равна только T2), в вашем случае матрица перестановок будет иметь матрицу 1x3
:
Pf = [0 1 0]
|100|
Tf = Pf * T = [0 1 0]* |T2 | = [T2]
|0 |
другая матрица перестановок получит известную часть из матрицы T
, в вашем случае это будет матрица 2x3
:
| 1 0 0|
Ps = | 0 0 1|
Ts = Ps * T = | 1 0 0| |100| |100|
| 0 0 1| *| T2| = |0 |
|0 |
Теперь все готово,Вы можете предположить, что система выглядит следующим образом:
K . T = Q
K = |Kff Kfs|
|Kfs Kss|
Q = |Qf|
|Qs|
T = |Tf|
|Ts|
, где f
- это префикс для неизвестной правой стороны, а s
- для известной правой стороны.Вы можете найти Pf
, Ps
, Qf
, Qs
, Kff
, Kfs
, Ksf
и Kss
следующим образом:
Tf = Pf * T
Tq = Ps * T
Qf = Pf * Q
Qq = Ps * Q
Kff = pf * K * pf' (note: ' denotes the transpose)
Kfs = pf * K * ps' (note: ' denotes the transpose)
Ksf = ps * K * pf' (note: ' denotes the transpose)
Kss = ps * K * ps' (note: ' denotes the transpose)
теперь неизвестные векторы Tf
и Qs
необходимо найти:
K . T = Q
|Kff Kfs| |Tf| = |Qf|
|Kfs Kss| |Ts| |Qs|
означает, что:
Kff * Tf + Kfs * Ts = Qf
Kfs * Tf + Kss * Ts = Qs
от первого:
Tf = Kff^-1 * (Qf - Kfs * Ts)
с приведенным выше уравнением вы можетенайти Tf (обратите внимание, что все правые части являются известными матрицами и векторами, поэтому необходимо выполнять числовые операции)
и из второй:
Qs = Kfs * Tf + Kss * Ts
таким образом, Qs
и Tf
найдено.Найдя Tf
и Qs
, вы можете сделать это, чтобы сформировать оригинальную матрицу T
и Q
:
Q = Ps' * Qs + Pf' * Qf
T = Ps' * Ts + Pf' * Tf