一、实验目的
1.求矩阵的部分特征值问题具有十分重要的理论意义和应用价值;
2.掌握幂法、反幂法求矩阵的特征值和特征向量以及相应的程序设计;
3.掌握矩阵QR分解
二、实验原理
幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法, 特别是用于大型稀疏矩阵。设实矩阵A=[aij]n×n有一个完全的特征向量组,其特征值为λ1 ,λ2 ,…,λn,相应的特征向量为x1 ,x2 ,…,xn.已知A的主特征值是实根,且满足条件
|λ1 |>|λ2 |≥|λ3 |≥…≥|λn |
现讨论求λ1 的方法。
幂法的基本思想是任取一个非零的初始向量ν0,由矩阵A构造一向量序列,称为迭代向量。由假设,ν0 可表示为
ν0 =α1 x1 +α2 x2 + … +αn xn (α≠0 ),
于是得到序列vk=Avk-1,序列νk /λ1k 越来越接近A的对应于λ1 的特征向量
三、实验内容
选取五级矩阵如下:
四、实验要求
利用幂法、反幂法求某个5阶矩阵的主特征值和特征向量,利用QR分解求一个5阶矩阵的所有特征值和特征向量
五、实验代码
幂法(Python)
#-*- coding:utf-8 -*-
importnumpy as np
defSolve(mat, max_itrs, min_delta): """
mat 表示矩阵 max_itrs 表示最大迭代次数 min_delta 表示停止迭代阈值 """
itrs_num = delta = float('inf') N =np.shape(mat)[0] #所有分量都为1的列向量
x = np.ones(shape=(N, 1)) #x = np.array([[0],[0],[1]])
while itrs_num < max_itrs and delta >min_delta: itrs_num += 1
y =np.dot(mat, x) #print(y)
m =y.max() #print("m={0}".format(m))
x = y /m print("***********第{}次迭代*************".format(itrs_num)) print("y =",y) print("m={0}".format(m)) print("x^T为