解决线性方程组

2024-09-27 18:11:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究用有限元法来计算通过单元的热流。 我现在只想解一个等式系统,等式两边都有变量。一个简单的例子可以是这样的

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

我考虑使用的方法是,当温度“T1”已知时,将矩阵减少到2x2,并相应地改变右侧。并在“T3”行中继续执行相同的操作。 但是我的顾问一直建议我不要这样做。你知道吗

你将如何着手解决这样一个系统?你知道吗


Tags: 方法系统矩阵温度例子单元t1t3
2条回答

我会写下你的线性方程组,然后重新塑造它,这样你就只有一个未知变量的向量。例如,上面的方程组等于:

q1

q2

q3

可以重写:

q1

q2

q3

由此产生:

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

另一种方法是创建置换矩阵,从向量中提取已知行和未知行。 此方法稍微复杂一点,但对程序员更友好:

假设你的情商系统是:

K . T = Q

其中K3x3TQ3x1向量。您可以创建一个置换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前缀是已知右侧的前缀。你可以找到PfPsQfQsKffKfsKsfKss如下:

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)

现在需要找到未知向量TfQs

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 

这样就可以同时找到QsTf。一旦找到TfQs,就可以这样做来形成原始的TQ矩阵:

Q = Ps' * Qs + Pf' * Qf
T = Ps' * Ts + Pf' * Tf

相关问题 更多 >

    热门问题