Я использую numpy для вычисления собственных значений и собственных векторов симметричного квадратного массива. Мой массив:Как вычисляются числовые значения собственных чисел и собственные векторы
L = [[ 2. -1. -1. 0. 0. 0.]
[-1. 3. 0. -1. 0. -1.]
[-1. 0. 2. -1. 0. 0.]
[ 0. -1. -1. 3. -1. 0.]
[ 0. 0. 0. -1. 2. -1.]
[ 0. -1. 0. 0. -1. 2.]]
Результаты при выполнении numpy.linalg.eig(L)
показаны ниже
собственные:
[ 5.00000000e+00,
3.96872205e-16,
1.00000000e+00,
2.00000000e+00,
3.00000000e+00,
3.00000000e+00 ]
собственные векторы:
[[ -2.88675135e-01 4.08248290e-01 -5.00000000e-01 4.08248290e-01 -4.36632863e-01 4.44614891e-01]
[ 5.77350269e-01 4.08248290e-01 -3.34129212e-16 4.08248290e-01 -1.08813217e-01 -5.41271705e-01]
[ 2.88675135e-01 4.08248290e-01 -5.00000000e-01 4.08248290e-01 5.45446080e-01 9.66568140e-02]
[ -5.77350269e-01 4.08248290e-01 1.06732810e-16 4.08248290e-01 -1.08813217e-01 -5.41271705e-01]
[ 2.88675135e-01 4.08248290e-01 5.00000000e-01 4.08248290e-01 -4.36632863e-01 4.44614891e-01]
[ -2.88675135e-01 4.08248290e-01 5.00000000e-01 -4.08248290e-01 5.45446080e-01 9.66568140e-02]]
Результаты близки (если нормированы) к те, которые вы получаете, когда вы analytically вычислите их, но некоторые ошибки кажутся мне вносят как в собственные значения, так и в собственные векторы. Есть ли способ обойти эти ошибки с помощью numpy?
Откуда берутся эти ошибки? Какой алгоритм использует numpy?
Это выглядит довольно точно для меня – Fabricator
второе собственное значение равно 3.96872205e-16 вместо 0. Также в 3-м собственном векторе должно быть два нуля, вместо этого есть -3.34129212e-16 и 1.06732810e-16. – igavriil
Это ошибки округления, которые почти равны нулю. Если 'x' - ваш результат, вы можете избавиться от всех этих ошибок округления с помощью' np.where (x <1e-15, 0, x) ' – mty