Matlab幂法实现结果不一致问题求助
幂法实现问题排查
首先明确矩阵A1=[13 6;-12 -5]的特征值与特征向量:
- 特征值为7(主特征值,绝对值最大)和1
- 对应主特征值7的特征向量是
k*(-1;1),其中k为任意非零常数,(1;-1)是同一特征空间的向量(仅方向相反),本质上是正确的特征向量
你代码的核心问题是递归函数的返回值处理错误:
在powerMethod函数的if n>0分支中,你调用了递归的powerMethod(A,y1,n-1),但未将调用结果赋值给yn。这会导致当n>0时,函数没有返回值,递归到n=0时生成的结果无法传递回上层调用,最终函数返回的结果未定义(Matlab中会返回空或错误默认值)。
修正后的代码需接收递归调用的结果:
A1=[13 6;-12 -5] x=[1;1] y=(1/norm(x))*x result = powerMethod(A1,y,4) disp(result) function yn=powerMethod(A,y0,n) if n>0 x1=A*y0 y1=(1/norm(x1))*x1 yn = powerMethod(A,y1,n-1); % 接收递归返回的结果 else yn=y0 end end
补充验证:你得到的[0.7072;-0.7070]是正确的主特征向量,因为特征向量的非零常数倍(包括负号)都属于同一特征空间,满足A*v = λ*v。计算A1*[0.7072;-0.7070]会发现结果约等于7*[0.7072;-0.7070],符合特征向量的定义。
内容的提问来源于stack exchange,提问作者eric
相关产品推荐
相关产品推荐

