Я хочу диагонализации матрицы с Python, вот мой сценарий:питона: проверить, если diagonalisable матрица
import scipy.linalg as lg
vp = lg.eig(A) # eigen values and vectors
D = N.diag(vp[0]) # diagonalisation of A from its eigen values
P=vp[1] # such as A = P.D.P(-1)
Pm1=lg.inv(P)
Однако я подозреваю, что в не diagonalisable, но это не мешает Python из расчета D, P и P (-1) без каких-либо проблем ... Более того, коэффициенты в D являются комплексными числами, нормальны ли они в A реальными? Нет ли способа проверить, является ли этот массив диагонализируемым или нет?
Большое спасибо заранее
Это нормально с целыми и рациональными записями матрицы, но обратите внимание, что в плавающей точке он имеет обычные проблемы с плавающей запятой (а алгоритмы, используемые в sympy, не являются оптимальными для этого случая, намного медленнее, чем np.linalg.eig). Рассмотрим 'sympy.Matrix ([[1, 1], [1e-100, 1]]). Is_diagonalizable() == False'. –
from sympy import Matrix as Mx if Mx (A) .is_diagonalizable() == False: print «A not diago» – Neko
жаль, что я отправил его, прежде чем закончил. Я добавил код чуть выше, чтобы попытаться получить ошибку: «Файл» /usr/lib/pymodules/python2.6/sympy/matrices/matrices.py », строка 1477, в __getattr__ поднять AttributeError()" из раздела " if "line ... – Neko