特征向量很复杂,但仅适用于大型矩阵

问题描述 投票:3回答:1

我正在尝试计算此矩阵的特征向量和特征值

Tridiagonal Matrix Example

import numpy as np
la = 0.02
mi = 0.08
n = 500

d1 = np.full(n, -(la+mi), np.double)
d1[0] = -la
d1[-1] = -mi
d2 = np.full(n-1, la, np.double)
d3 = np.full(n-1, mi, np.double)

A = np.diagflat(d1) + np.diagflat(d2, -1) + np.diag(d3, 1)
e_values, e_vectors = np.linalg.eig(A)

如果将矩阵的尺寸设置为n <110,则输出很好。但是,如果将其设置为n> = 110,则特征值和特征向量分量都将变为具有重要虚部的复数。为什么会这样?它应该发生吗?这是非常奇怪的行为,老实说,我有点卡住。

python numpy linear-algebra eigenvalue eigenvector
1个回答
1
投票

您所看到的似乎是相当正常的舍入错误。不幸的是,以有限的精度存储浮点数。对于大问题,自然会变得相对更糟。这是特征值的实部和虚部的图:

enter image description here

您可以看到,虚数实际上是噪声。这并不是说它们并不重要。这是虚部与实部的关系图,显示在最坏的情况下,该比率可能高达0.06:

enter image description here

此比率相对于绝对和相对量lami发生变化。如果将两者都乘以10,则会得到

enter image description here

如果保留la = 0.02并设置为mi = 0.8,则会得到较小的虚部:

enter image description here

当您做相反的事情时,事情会变得很奇怪,将la增大10倍,保持mi不变:

enter image description here

鉴于虚部的幅度较小,您可以取结果的幅度或实部,因为您知道所有特征值都是真实的。

© www.soinside.com 2019 - 2024. All rights reserved.