特征值计算(大数据作业)
这节课老师讲的是用幂法来求特征值和特征向量,采用迭代的方法计算矩阵模最大的特征值和对于的特征向量
课上还有动画演示,可以说老师非常用心啦~
证明过程涉及到线性代数方面的知识,我只能说找时间复习,≧ ﹏ ≦
基于规范化的幂法求解主特征值及其对应的特征向量
def power_method(A,max_iter=100,tolerance=1e-9):
n,_ = A.shape
u = np.random.rand(n)
u = u / np.linalg.norm(u)
la_old = 0
for _ in range(max_iter):
v = A @ u
u = v / np.linalg.norm(v)
la_new = u.T @ A @ u
if abs(la_new - la_old) < tolerance:
break
la_old = la_new
return la_new,u
参数可以自己设置,A是一个实对称矩阵,max_iter是最大的迭代次数,tolerance 是用于设置迭代停止的条件之一 ,是精度要求
u 是随机设置的一个向量,通过迭代不断地更新lambda( 特征值 ) 以及u(对应的特征向量),对向量 u 不断地规范化是为了避免溢出现象的发生。
用 @ 或者是用 np.dot(a,b)来计算矩阵之间的乘法都是可以的
有什么问题欢迎指正批评!
另外,数学证明就不附上了
原文地址:https://blog.csdn.net/C_K_Y/article/details/142895745
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!