numpy linalg.solve, а не квадратная матрица - PullRequest
0 голосов
/ 06 января 2019

Так что в настоящее время я работаю с кодом, похожим на:

Q,R = np.linalg.qr(matrix)
Qb = np.dot(Q.T, new_mu[b][n])
x_qr = np.linalg.solve(R, Qb)
mu.append(x_qr)

Код работает нормально, пока у меня квадратная матрица, но, как только это не так, система не разрешима, и я получил ошибки. Если я правильно понял, я не могу использовать linalg.solve на матрицах с неполным рангом, но есть ли способ преодолеть это препятствие без использования решения lstsquare?

1 Ответ

0 голосов
/ 06 января 2019

Нет, это невозможно, так как указано в np.linalg.solve документах .

Проблема в том, что с учетом Ax = b, если A не является квадратным, то ваше уравнение либо переопределено, либо недоопределено, если предположить, что все строки в A линейно независимы. Это означает, что не существует ни единого x, который бы решал это уравнение.

Интуитивно понятно, что идея в том, что если у вас есть n (длина x) переменных, которые вы пытаетесь найти, то вам нужно ровно n уравнений, чтобы найти уникальное решение для x, предполагая, что эти уравнения не являются «избыточными». В этом случае «избыточный» означает линейно зависимый: одно уравнение равно линейной комбинации одного или нескольких других уравнений.

В этом сценарии одна, возможно, полезная вещь - найти x, который минимизирует norm(b - Ax)^2 (т. Е. линейное решение наименьших квадратов ):

x, _, _, _ = np.linalg.lsq(A, b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...