【数值分析】反幂法,matlab实现

反幂法20231226

一种求实矩阵 A {A} A按模最小的特征值,及其对应的特征向量 x i {x_i} xi 的方法,只能求一个
要保证矩阵最小特征值只有一个,有 n {n} n 个线性无关的特征向量,矩阵可逆
可以通过求矩阵 A − 1 {A^{-1}} A1 的按模最大特征值和对应特征向量来求矩阵 A {A} A 的按模最小特征值。
每次乘完之后要规范化,防止上溢或下溢。规范化可以用各种范数。
一般会使用结合原点平移的方法来求最靠近某个数的特征值和特征向量。
步骤:
1. 求 B 矩阵     B = A − p I 2. 求初始向量 u 0 模最大元素的编号 i d    ,    初始特征值 β 0 = u 0 ( i d )    ,    求归一化后的初始向量 y 0 3. 迭代    ,    k = 0 , 1 , ⋯ u k + 1 = B − 1 y k β k + 1 = u k + 1 ( i d k ) ⋅ sign ( y k ( i d k ) )     这里要乘模最大元素的符号 y k + 1 = u k + 1 ∣ ∣ u k + 1 ∣ ∣ ∞ i d k + 1 = u k + 1 模最大元素的编号 4. 判断是否满足     β k + 1 − β k < eps    ,    特征值 = p + 1 β k + 1 \begin{align*}1. & 求B矩阵 \,\,\, B=A-pI \\ \\ 2. &求初始向量u_0模最大元素的编号 id \,\,,\,\, 初始特征值 \beta_0=u_0(id) \,\,,\,\, 求归一化后的初始向量y_0 \\ \\ 3.& 迭代 \,\,,\,\, k=0,1, \cdots \\ \\ & u_{k+1}= B^{-1}y_k \\ \\ & \beta_{k+1}=u_{k+1}(id_k) \cdot \text{sign}(y_k(id_k)) \,\,\, 这里要乘模最大元素的符号 \\ \\ & y_{k+1}= \frac{u_{k+1}}{||u_{k+1}||_\infty}\\ \\ & id_{k+1}=u_{k+1}模最大元素的编号 \\ \\ 4.& 判断是否满足 \,\,\, \beta_{k+1}- \beta_k< \text{eps} \,\,,\,\, 特征值=p+ \frac{1}{\beta_{k+1}} \end{align*} 1.2.3.4.B矩阵B=ApI求初始向量u0模最大元素的编号id,初始特征值β0=u0(id),求归一化后的初始向量y0迭代,k=0,1,uk+1=B1ykβk+1=uk+1(idk)sign(yk(idk))这里要乘模最大元素的符号yk+1=∣∣uk+1uk+1idk+1=uk+1模最大元素的编号判断是否满足βk+1βk<eps,特征值=p+βk+11

[!example]-
A = [ 3 2 1 0 ]    ,    u 0 = [ 0.95 0.25 ] A = \begin{bmatrix} 3 & 2 \\ 1 & 0 \end{bmatrix} \,\,,\,\, u_0= \begin{bmatrix} 0.95\\0.25 \end{bmatrix} A=[3120],u0=[0.950.25]
求靠近 3.5 {3.5} 3.5 的特征值及特征向量,两次迭代。特征真值 ( 3 + 17 ) / 2 { (3+ \sqrt{17})/2} (3+17 )/2
解:
A − 3.5 I = [ − 0.5 2 1 − 3.5 ] A-3.5I= \begin{bmatrix} -0.5 & 2 \\ 1 & -3.5 \end{bmatrix} A3.5I=[0.5123.5]
y 0 = u 0 ∣ ∣ u 0 ∣ ∣ ∞ = [ 1.0000 0.2632 ] y_0= \frac{u_0}{||u_0||_\infty}= \begin{bmatrix} 1.0000\\0.2632 \end{bmatrix} y0=∣∣u0u0=[1.00000.2632]
( A − 3.5 I ) u 1 = y 0 → u 1 = [ 16.1053 4.5263 ] (A-3.5I)u_1= y_0 \to u_1= \begin{bmatrix} 16.1053\\ 4.5263 \end{bmatrix} (A3.5I)u1=y0u1=[16.10534.5263]
u 1 {u_1} u1 y 0 {y_0} y0 1 {1} 1 在上面, β 1 { \beta_1} β1 第一个值为 u 1 {u_1} u1 第一个值,符号与 y 0 {y_0} y0 中的 1 {1} 1 相同。
β 1 = 16.1053 \beta_1= 16.1053 β1=16.1053
y 1 = u 1 ∣ ∣ u 1 ∣ ∣ ∞ = [ 1.0000 0.2810 ] y_1= \frac{u_1}{||u_1||_\infty}= \begin{bmatrix} 1.0000\\0.2810 \end{bmatrix} y1=∣∣u1u1=[1.00000.2810]
( A − 3.5 I ) u 2 = y 1 → u 2 = [ 16.2484 4.5621 ] (A-3.5I)u_2=y_1\to u_2= \begin{bmatrix} 16.2484\\4.5621 \end{bmatrix} (A3.5I)u2=y1u2=[16.24844.5621]
β 2 = 16.2484 \beta_2=16.2484 β2=16.2484
y 2 = u 2 ∣ ∣ u 2 ∣ ∣ ∞ = [ 1.0000 0.2808 ] y_2= \frac{u_2}{||u_2||_\infty}= \begin{bmatrix} 1.0000\\0.2808 \end{bmatrix} y2=∣∣u2u2=[1.00000.2808]
特征值
λ = 3.5 + 1 β 2 = 3.5615447 \lambda=3.5 + \frac{1}{\beta_2}=3.5615447 λ=3.5+β21=3.5615447
对应的特征向量为 y 1 {y_1} y1 或者 y 2 {y_2} y2

反幂法matlab实现

%% 反幂法例子
A = [-12 3 3; 3 1 -2; 3 -2 7];
u0 = [1.0, 1.0, 1.0]';
% A = [3 2 ;1 0]; 
% u0 = [0.95 ; 0.25004];
% format long
[beta1, v, i] = inversePowerMethod(A, u0, -13, 1e-6, 100)

%% 反幂法求模最小特征值和特征向量
% 输入矩阵、初始迭代向量、某个特征值最靠近的数、精度、最大迭代次数
% 输出特征值、无穷范数归一化后的特征向量、迭代次数
function [lbd, y1, i] = inversePowerMethod(A, u0, p, eps, max_iter)
    B = A-p*eye(size(A)); % B矩阵
    [u0norm, id] = max(abs(u0)); % 取无穷范数和其所在行
    beta0 = u0(id);
    y0 = u0/ u0norm;
    for i = 1:max_iter
        u1 = B^(-1)*y0; % 反幂法逻辑
        beta1 = u1(id)*sign(y0(id)); % !!
        [u1norm, id] = max(abs(u1));
        y1 = u1/u1norm;
        if abs(beta1 - beta0)<eps
            lbd = p+1/beta1;
            break;
        end
        y0 = y1;
        beta0 = beta1;
    end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值