Решение линейной системы уравнений - PullRequest
0 голосов
/ 22 февраля 2019

Я работаю над использованием метода конечных элементов для расчета теплового потока через элементы.В настоящее время я застрял в решении системы уравнений, где есть переменные с обеих сторон равенства.Простым примером может быть что-то вроде этого

| 1  -1   0|   |100 |   |q1|   
|-1   2  -1| . | T2 | = |0 |   
| 0  -1   1|   | 0  |   |q3|

Метод, который я собираюсь использовать, уменьшит матрицу до 2x2, так как температура "T1" известна, и соответственно изменит правую часть.И продолжайте делать то же самое в ряду «Т3».Однако мой консультант советовал мне это еще раз.

Как бы вы решили решить такую ​​систему?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Другой способ сделать это - создать матрицу перестановок для извлечения известных и неизвестных строк из ваших векторов.Этот метод немного сложнее, но гораздо более удобен для программистов:

Скажите, что вы.система:

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
0 голосов
/ 22 февраля 2019

Я бы записал ваши линейные уравнения и изменил их так, чтобы у вас был только один вектор с неизвестными переменными.Например, ваша система уравнений сверху равна:

q1

q2

q3

, которую можно переписать:

q1

q2

q3

, что дает:

| -1  -1   0|   | T2 |   | 100 |   
|  2   0   0| . | q1 | = | 100 |   
| -1   0  -1|   | q3 |   |  0  |
...