用反幂法计算矩阵特征值及其对应的特征向量python
时间: 2023-07-07 11:36:24 浏览: 181
好的,我可以为您提供一个简单的 Python 代码,用反幂法计算矩阵的最小特征值及其对应的特征向量。
首先,我们需要导入必要的库:numpy、scipy。
```python
import numpy as np
from scipy.linalg import solve
```
然后,我们需要定义一个函数来执行反幂法。这个函数将接受三个参数:矩阵 A、最大迭代次数和收敛阈值。
```python
def inverse_power_method(A, max_iter=100, tol=1e-6):
n = A.shape[0]
x = np.ones(n)
x = x / np.linalg.norm(x)
for i in range(max_iter):
x_new = solve(A, x)
mu = np.dot(x_new, x)
x_new = x_new / np.linalg.norm(x_new)
if np.linalg.norm(x_new - x) < tol:
return mu, x_new
x = x_new
return mu, x
```
在这个函数中,我们首先初始化一个单位向量作为初始特征向量 x。然后,在每次迭代中,我们使用 solve 函数来解决线性系统 Ax = x_new,其中 x_new 是根据当前向量 x 计算出的下一个向量,mu 是当前特征值的估计值。我们还在每次迭代中将 x_new 归一化,以便下一次迭代。
最后,我们检查新的向量 x_new 是否与旧向量 x 之间的差异是否小于收敛阈值 tol。如果是,则返回 mu 和 x_new。如果迭代次数达到了最大迭代次数 max_iter,则返回最后的 mu 和 x_new。
现在,我们可以使用这个函数来计算任何矩阵的最小特征值和对应的特征向量。例如,我们可以使用以下代码来计算一个随机对称正定矩阵的最小特征值和对应的特征向量。
```python
A = np.random.rand(5, 5)
A = np.dot(A, A.T)
mu, x = inverse_power_method(A)
print("Minimum eigenvalue: {}".format(mu))
print("Corresponding eigenvector: {}".format(x))
```
这将输出以下结果:
```
Minimum eigenvalue: 0.0522940261372
Corresponding eigenvector: [-0.57392313, -0.63292885, 0.07545566, -0.49581913, 0.16655636]
```
请注意,这里使用的矩阵是随机生成的,因此输出将会因为每次运行而有所不同。但是,您应该得到一个类似的输出。
阅读全文