Решение матричных уравнений с некоторыми граничными условиями - PullRequest
0 голосов
/ 29 октября 2018

Как я могу решить систему линейных уравнений с некоторыми граничными условиями, используя Numpy?

Топор = B

Где x - вектор-столбец с, скажем, x1 = 0 . Для разных итераций БК будут разными, поэтому разные переменные вектора х будут равны нулю. [A] и [B] известны.

Вот пример из моего курса FEM:
{F} является вектором столбца известных значений
[k] - матрица жесткости с известными значениями
{U} - это вектор столбца смещения, где U1 и U3, как известно, равны нулю, но необходимо найти U2 и U4.

enter image description here
Вот пример:

enter image description here


Это приведет к следующим значениям:

enter image description here


Естественно, это сводится к матричному уравнению 2X2, но я, потому что для разных элементов БК будет разным, я ищу какой-нибудь решатель с матричным уравнением, где я могу дать понять, что некоторые из неизвестных должны будь эта определенная ценность и ничего больше.
Есть ли что-то похожее на np.linalg.solve () с условиями к нему?

Спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

матрица k в вашем примере обратима. это означает, что есть одно и только одно решение; Вы не можете выбрать любой из U s. это решение:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...