Решение матричного уравнения A B = C. с B (n * 1) и C (n * 1)

Я пытаюсь решить матричное уравнение, например A.B = C. A - это неизвестная матрица, и я должен ее найти. У меня B(n*1) и C(n*1), поэтому A должно быть n*n.

Я использовал метод BT* A.T =C.T (numpy.linalg.solve(B.T, C.T)). Но выдает ошибку:

LinAlgError: последние 2 измерения массива должны быть квадратными.

Итак, проблема в том, что B не квадратный.


person Rabih Assaf    schedule 01.09.2016    source источник
comment
являются векторами A и B с одним столбцом? Если это так, то нет никакого возможного решения (вам нужно больше переменных, в частности, вам нужно, чтобы A была квадратной матрицей).   -  person Barranka    schedule 02.09.2016
comment
У вас есть два n-мерных вектора, и вы пытаетесь найти матрицу размером n на n? Если n не равен 1 или A не является нулевым вектором, он не указан и существует бесконечно много правильных ответов.   -  person Tanner Swett    schedule 02.09.2016
comment
Извините, я изменил вопрос на более правильный. @ Barranka @Tanner Swett   -  person Rabih Assaf    schedule 02.09.2016
comment
Проблема в том, что у вашего уравнения бесконечно много решений. Вам просто нужно произвольное решение или вам нужно хорошее решение? Чего вы пытаетесь достичь, решая это уравнение?   -  person Tanner Swett    schedule 02.09.2016


Ответы (2)


Вот вам небольшой пример:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])
x = np.linalg.solve(a, b)

print "A={0}".format(a)
print "B={0}".format(b)
print "x={0}".format(x)

Для получения дополнительной информации прочтите документы

person BPL    schedule 01.09.2016
comment
проблема в том, что это не квадрат - person Rabih Assaf; 02.09.2016
comment
Это решает для одного из векторов. OP спросил, как найти матрицу (что не кажется очень полезным, но это был вопрос). - person interjay; 02.09.2016
comment
@interjay OP отредактировал вопрос, изменив значение ... этот был хорошим несколько часов назад - person BPL; 02.09.2016
comment
OP изменил имена переменных, но вопрос по-прежнему указывал, что вход - это два вектора, а выход - матрица. - person interjay; 02.09.2016
comment
@interjay Понятно, тогда я неправильно понял вопрос - person BPL; 02.09.2016

Если вы решаете матрицу, существует бесконечное количество решений (при условии, что B не равно нулю). Вот одно из возможных решений:

Выберите ненулевой элемент B, Bi. Теперь создайте матрицу A так, чтобы i -й столбец был C / Bi, а остальные столбцы были равны нулю.

Легко проверить, что умножение этой матрицы на B дает C.

person interjay    schedule 02.09.2016