特征值计算(大数据作业)
这节课老师讲的是用幂法来求特征值和特征向量,采用迭代的方法计算矩阵模最大的特征值和对于的特征向量
课上还有动画演示,可以说老师非常用心啦~
证明过程涉及到线性代数方面的知识,我只能说找时间复习,≧ ﹏ ≦
基于规范化的幂法求解主特征值及其对应的特征向量
def power_method(A,max_iter=100,tolerance=1e-9):n,_ = A.shapeu = np.random.rand(n)u = u / np.linalg.norm(u)la_old = 0for _ in range(max_iter):v = A @ uu = v / np.linalg.norm(v)la_new = u.T @ A @ uif abs(la_new - la_old) < tolerance:breakla_old = la_newreturn la_new,u
参数可以自己设置,A是一个实对称矩阵,max_iter是最大的迭代次数,tolerance 是用于设置迭代停止的条件之一 ,是精度要求
u 是随机设置的一个向量,通过迭代不断地更新lambda( 特征值 ) 以及u(对应的特征向量),对向量 u 不断地规范化是为了避免溢出现象的发生。
用 @ 或者是用 np.dot(a,b)来计算矩阵之间的乘法都是可以的
有什么问题欢迎指正批评!
另外,数学证明就不附上了