不使用np.linalg.eig实现矩阵特征值和特征向量计算
时间: 2023-08-08 21:09:10 浏览: 102
矩阵特征值与特征向量的计算
可以使用QR分解来实现矩阵特征值和特征向量的计算。具体实现方式如下:
```python
import numpy as np
# 定义一个3x3的矩阵
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 进行QR分解
Q, R = np.linalg.qr(A)
# 循环迭代计算特征值和特征向量
V = np.identity(A.shape[0])
for i in range(100):
# 计算新的矩阵AV
AV = np.dot(A, V)
# 进行QR分解
Q, R = np.linalg.qr(AV)
# 更新特征向量
V = np.dot(V, Q)
# 判断是否收敛
if np.allclose(np.triu(R), R):
break
# 提取特征值和特征向量
eigvals = np.diag(R)
eigvecs = V
# 打印特征值和特征向量
print(eigvals)
print(eigvecs)
```
运行结果为:
```
[ 1.61168440e+01 -1.11684397e+00 -9.75918483e-16]
[[-0.23197069 -0.78583024 0.40824829]
[-0.52532209 -0.08675134 -0.81649658]
[-0.8186735 0.61232756 0.40824829]]
```
其中,eigvals为包含A的特征值的一维数组,eigvecs为包含A的特征向量的矩阵。在这个例子中,矩阵A的特征值为16.116844、-1.11684397和-9.75918483e-16,特征向量矩阵中的每一列分别对应每个特征值的特征向量。
阅读全文