Я пытаюсь диагонализовать n*100*100
3D-матрицу K
на numpy.linalg.eig
и получить собственные значения w
и собственные векторы v
. Матрица 100*100
, но я хочу сделать это с трансляцией, и это номер n
, который я установил. И матрица не эрмитова.
w,v=np.linalg.eig(K)
Сначала я попробовал n=1000
, я получил реальные собственные значения и собственные векторы, то есть xxxxxxxxxe+xx
, но когда я попробовал n=2000
, элементы w
и v
показывают xxxxxxxxxe+xx+0.j
. Из-за +0.j
он давал комплексные числа при использовании w
и v
для дальнейших вычислений.
- Я думал, что это из-за ошибки алгоритма расчета числа с плавающей запятой, но почему?
- Использует ли numpy.linalg LAPACK? Возможна ли ошибка от LAPACK?
- Как мне избавиться от
+0.j
?
100*100
матрицы всегда дает действительные собственные значения и векторы. Если я одновременно диагонализирую 2000100*100
матриц, он показывает+0.j
мнимую часть. - person kinder chen   schedule 09.02.2018output.real
? - person Ubdus Samad   schedule 09.02.2018+0.j
означает, что мнимая часть собственных значений равна 0? Или это просто означает, что это комплексные числа? - person kinder chen   schedule 09.02.20180.j
могла быть спрятана очень маленькая, не значимая мнимая часть. Вы можете избавиться от него, используяnumpy.real
. Чтобы убедиться, что отбрасывание сложной части не повреждает собственный вектор v и собственное значение w, вы можете вычислить норму невязки||w v - K.v||
и сравнить ее с нормой||v||
. - person francis   schedule 09.02.2018n
, она начинает показывать мнимую часть. Форма ошибки LAPACK? - person kinder chen   schedule 09.02.2018