инвертировать особую матрицу на питоне - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно прочитать несколько данных из csv файлов, и когда я хочу инвертировать матрицу из csv данных, я получаю это:

numpy.linalg.linalg.LinAlgError: singular matrix

и процесс застревает в этом разделе:

J = np.mat([dtdx,dtdy,dtdz]).transpose()
dd = np.mat(ttcal-tt)
dm = (scipy.linalg.inv(J.transpose()*J))*((J.transpose())*(dd.transpose()))

и данные из "J", такие как:

[[-6.81477651e-03 -7.90320450e-03  6.50533437e-05]
 [-6.71080644e-03 -6.00135428e-03  6.50533437e-05]]

и данные из "dd", такие как:

[[0.00621772 0.00537531]]

Я проверил эти данные и нашел:

tes = J.transpose()*J

и такой результат:

[[ 9.14761019e-05  9.41324993e-05 -8.79884397e-07]
 [ 9.41324993e-05  9.84768945e-05 -9.04538042e-07]
 [-8.79884397e-07 -9.04538042e-07  8.46387506e-09]]

Мне нужно инвертировать эту матрицу, но эти данные являются единственной матрицей. Я должен примерить Matlab R2017B и работает хорошо.

Мне нужно решить эту проблему на python.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

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

Это может быть сделано в python, как это ..

mat = np.array([[ 9.14761019e-05,  9.41324993e-05, -8.79884397e-07],
 [ 9.41324993e-05,  9.84768945e-05, -9.04538042e-07],
 [-8.79884397e-07, -9.04538042e-07,  8.46387506e-09]])

p_inv = np.linalg.pinv(mat)

print(p_inv)

# output

array([[-1.00783988e+13,  5.50963966e+11, -9.88844703e+14],
       [ 5.50963966e+11, -3.01194390e+10,  5.40580308e+13],
       [-9.88844703e+14,  5.40580308e+13, -9.70207468e+16]])
0 голосов
/ 12 сентября 2018

Вы пытались использовать вместо этого псевдообратный numpy.linalg.pinv?Он должен иметь дело с этими ситуациями.

B = np.linalg.pinv(a)

Но я бы посоветовал проверить, что вы действительно правильно рассчитали свою матрицу и должна появиться особая матрица.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...