求解具有某些边界条件的矩阵方程

时间:2018-10-29 20:10:54

标签: python-3.x numpy matrix linear-algebra

如何使用Numpy求解具有某些边界条件的线性方程组?

Ax = B

其中 x 是列向量,假设 x1 = 0 。 对于不同的迭代,BC将会不同,因此向量x的不同变量将为零。 [A] [B] 是已知的。

这是我的FEM课程中的一个示例:
{F}是已知值的列向量
[k]是具有已知值的刚度矩阵
{U}是位移列向量,其中U1和U3已知为零,但需要找到U2和U4。

enter image description here
这里是一个例子:

enter image description here


这将产生以下值:

enter image description here


自然,这将简化为2X2矩阵方程,但是我因为对于不同的元素,BC会有所不同,所以我正在寻找一些numpy矩阵方程求解器,我可以让它知道一些未知数必须是这个确定值,别无其他。
是否有类似于 np.linalg.solve()的条件?

谢谢。

1 个答案:

答案 0 :(得分:0)

示例中的矩阵k是可逆的。这意味着只有一种解决方案;您不能选择任何U个。这是解决方案:

import numpy as np

k = np.array(((1000, 0, -1000, 0),
              (0, 3000, 0, -3000),
              (-100, 0, 3000, -2000),
              (0, -3000, -2000, 5000)))

F = np.array((0, 0, 0, 5000))

U = np.linalg.solve(k, F)
print(U)
# # or:
# k_inv = np.linalg.inv(k)
# U = k_inv.dot(F)

# [ 5.55555556  8.05555556  5.55555556  8.05555556]

圣人一样:

k = matrix(((1000, 0, -1000, 0),
              (0, 3000, 0, -3000),
              (-100, 0, 3000, -2000),
              (0, -3000, -2000, 5000)))
F = vector((0, 0, 0, 5000))
U = k.inverse() * F

# (50/9, 145/18, 50/9, 145/18)