美文网首页
数值计算day5-特征值与特征向量

数值计算day5-特征值与特征向量

作者: xkzhai | 来源:发表于2019-07-31 16:26 被阅读0次

    上节课主要介绍了线性方程组的两种迭代求解算法,一个是Jacobi迭代(同步更新),一个是高斯塞德尔迭代(异步更新)。对于特殊的三对角系统,一种更简单快捷的Thomas算法也可以用来求解。之后介绍了向量范数与矩阵范数的概念,线性系统数值解的相对误差可以通过条件数来判定。本节课主要介绍矩阵的特征值,特征向量,以及其中涉及到的几种数值算法。

    1. 特征值与特征向量

    给定n \times n维矩阵A,满足下式的数\lambda称作矩阵A的一个特征值:Au=\lambda u 而对应的向量u称作对应特征值\lambda的一个特征向量。上述运算可以推广到更一般的形式,而不仅仅是针对矩阵运算。假设u=f(x)是一个关于x的连续函数,A=\frac{d}{dx}表示微分运算,则\frac{d^2u}{dx^2}=k^2u 就可以表示为:A^2u = k^2u 这是特征值问题的一种更广泛的表现形式。
    特征值与特征向量在工程与科学中有着非常重要的作用。例如,在振动研究中,特征值表示系统或组件的固有频率,而特征向量表示这些振动的模式。
    为了求解一个矩阵的特征值与特征向量,根据定义,可以得到:(A-\lambda I)u=0 假设A-\lambda I是非奇异矩阵,则上式只有零解,不满足求解要求,因此,想要求解特征值,需要det(A-\lambda I) = 0, 该式称作特征方程,特征方程的根即为矩阵A的特征值。
    例: A=\begin{bmatrix}1 & 2\\3 & 2\end{bmatrix}
    其特征方程为det(A-\lambda I) = det\begin{bmatrix}1-\lambda & 2\\ 3 & 2-\lambda\end{bmatrix}=(1-\lambda)(2-\lambda)-6=0 求解可得特征值为\lambda_1=4,\lambda_2=-1 然而,对于阶数比较高的矩阵,特征值的求解不会这么简单,需要使用数值求解方法。

    2. 幂法与反幂法

    2.1 幂法

    这节主要介绍如何使用幂法和反幂法分别求解一个矩阵所有特征值中模最大和模最小的值。给定矩阵A,假设其有n个实特征值|\lambda_1|>|\lambda_2|>\cdots>|\lambda_n| 其对应的特征向量为u_1,u_2,...,u_n。幂法是通过迭代法来计算最大特征值\lambda_1,首先随机选取初始向量x_1x_1=c_1u_1+c_2u_2+...+c_nu_n 迭代计算x_2Ax_1=c_1Au_1+c_2Au_2+...+c_nAu_n=\lambda_1c_1x_2 x_2=u_1+\frac{c_2}{c_1}\frac{\lambda_2}{\lambda_1}u_2+...+\frac{c_n}{c_1}\frac{\lambda_n}{\lambda_1}u_n 进一步计算x_3, Ax_2=\lambda_1u_1+\frac{c_2}{c_1}\frac{\lambda^2_2}{\lambda_1}u_2+...+\frac{c_n}{c_1}\frac{\lambda^2_n}{\lambda_1}u_n=\lambda_1x_3 x_3=u_1+\frac{c_2}{c_1}\frac{\lambda^2_2}{\lambda^2_1}u_2+...+\frac{c_n}{c_1}\frac{\lambda^2_n}{\lambda^2_1}u_n 可以看到,其迭代公式为: x_{k+1}=u_1+\frac{c_2}{c_1}\frac{\lambda^k_2}{\lambda^k_1}u_2+...+\frac{c_n}{c_1}\frac{\lambda^k_n}{\lambda^k_1}u_n 注意到\lambda_1是最大的特征值,因此\frac{\lambda_i}{\lambda_i}<1,当k充分大时,有Ax_{k+1}=\lambda_1 u_1,x_{k+1}=u_1。具体实现时,并没有\lambda_1u_1的值,因此,迭代计算x_{k+1}=Ax_k后,规范化x_{k+1} 即可(有待进一步验证,采用向量范数并不合理)。注意:最大特征值是指模最大的那个特征值
    MATLAB实现:

    A=[4 2 -2; -2 8 1 ; 2 4 -4]
    x=[1 1 1]'
    for i=1:16
    x=A*x; x=x/norm(x,Inf);
    end
    A*x./x
    %%%%%%%%%%%%%%%%
    A =
    
         4     2    -2
        -2     8     1
         2     4    -4
    
    ans =
    
        7.7502
        7.7503
        7.7502
    
    >> eig(A)
    
    ans =
    
       -3.6102
        3.8599
        7.7504
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function e = MaxEig(A)
        x = ones(size(A));
        for i=1:40
            x=A*x; 
            [mx,id] = max(abs(x));
            x=x/x(id);
        end
        e = A*x./x; 
        [mx,id] = max(abs(e));
        e = e(id);
    end
    
    2.2 反幂法

    给定矩阵A,假设其有n个实特征值|\lambda_1|>|\lambda_2|>\cdots>|\lambda_n| 其对应的特征向量为u_1,u_2,...,u_n\lambda_n是最小特征值,首先注意到如果Au=\lambda u,则A^{-1}Au=A^{-1}\lambda u, 即 u=A^{-1}\lambda u,因此有 A^{-1}u=\frac{1}{\lambda}u。可以看到,当\lambda_n为矩阵A的最小特征值时,\frac{1}{\lambda_n}将是A^{-1}的最大特征值,此时运用幂法求解A^{-1}的最大特征值,取倒数,即为A的最小特征值。反幂法中,需要注意的是,当最小特征值为0时,其倒数是没有定义的,反幂法求解的是第二小的特征值,且需要采用移位反幂法。
    MATLAB实现

    function e = MinEig(A)
        invA = inv(A);
        x = ones(size(A));
        for i=1:40
            x=invA*x; 
            [mx,id] = max(abs(x));
            x=x/x(id);
        end
        e = invA*x./x; 
        [mx,id] = max(abs(e));
        e = 1/e(id);
    end
    %%%%%%%%%%%%%%%%%%%%
    >> A = [4 0 0;0 -1 0;0 0 -9]
    
    A =
    
         4     0     0
         0    -1     0
         0     0    -9
    
    >> MinEig(A)
    
    ans =
    
        -1
    
    >> eig(A)
    
    ans =
    
        -9
        -1
         4
    >> MaxEig(A)
    
    ans =
    
        -9
    

    3. QR分解法

    幂法与反幂法是用来求解矩阵的最大特征值与最小特征值,想要求解矩阵所有特征值,可以使用QR分解法。假设A是一个n\times n的矩阵,有n个互不相同的实特征值。QR分解的理论保证是,如果对矩阵A做如下相似变换:B=C^{-1}AC,则特征值保持不变。这是因为如果Au=\lambda u,则取v=C^{-1}u,就有ACv = Au = \lambda Cv,进一步有 C^{-1}ACv=\lambda v,因此\lambda也是C^{-1}AC的特征值。对A进行QR分解的算法流程:

    • A_1=A,对A_1做QR分解A_1=Q_1R_1其中Q_1是一个正交矩阵(Q_1Q^T_1=I),R_1是一个上三角矩阵
    • A_2=R_1Q_1,即A_2=Q^{-1}_1A_1Q_1,特征值与A是一致的。进一步对A_2做QR分解:A_2=Q_2R_2
    • A_3=R_2Q_2=Q^{-1}_2A_2Q_2=Q^{-1}_2Q^{-1}_1A_1Q_1Q_2
    • 重复上述过程,直到A_n成为一个上三角矩阵,其特征值即为对角线上的元素。

    MATLAB实现

    A=[ 6 -7 2 ; 4 -5 2; 1 -1 1]
    A0=A;
    for i=1:40
        [Q R]=qr(A);
        A=R*Q;
    end
    A
    ev=diag(A)
    eig(A0)
    %%%%%%%%%%%%%%%%
    >> QRiteration
    
    A =
    
         6    -7     2
         4    -5     2
         1    -1     1
    
    A =
    
        2.0000   -8.6603   -7.4066
        0.0000   -1.0000   -1.0690
        0.0000   -0.0000    1.0000
    
    ev =
    
        2.0000
       -1.0000
        1.0000
    
    ans =
    
       -1.0000
        2.0000
        1.0000
    

    在每次迭代中,对矩阵进行QR分解的操作是通过使用一种特殊的矩阵Householder矩阵来实现的,其形式为H=I-2\frac{vv^T}{v^Tv} 其中v=c+ \|c\|_2ece为列向量,\|c\|_2为向量的2范数。H矩阵是对称的,是正交的。 这就意味着HAHA是相似的。下面详细说明,如何通过H矩阵将A分解为一个正交阵和一个上三角阵的乘积。

    • c_1为矩阵A的第一列元素:c_1=\begin{bmatrix}a_{11}\\a_{21}\\\vdots\\a_{n1}\end{bmatrix},e_1=\begin{bmatrix}\pm1\\0\\\vdots\\0\end{bmatrix} e_1的第一位元素的符号与c_1的第一个元素的符号保持一致, v_1=c_1+\|c_1\|_2e
    • H_1=I-2\frac{v_1v_1^T}{v_1^Tv_1}, Q_1=H_1,R_1=H_1A,则Q_1是对称正交矩阵(HouseHolder,A=Q_1R_1),注意 v_1^T v_1=(c_1+\|c_1\|_2e_1)^T (c_1+\|c_1\|_2 e_1)=2\|c_1\|^2_2+2a_{11}\|c_1\|_2 R_1=H_1A=\begin{bmatrix}H_1c_1 & H_1 a_2 & \cdots & H_1a_n\end{bmatrix} H_1c_1=c_1-2\frac{v_1v_1^Tc_1}{v_1^Tv_1}=c_1-\frac{(\|c_1\|_2^2+a_{11}\|c_1\|_2)v_1}{\|c_1\|^2_2+a_{11}\|c_1\|_2}=-\|c_1\|_2e_1 因此R_1=H_1A的第一列除了第一个元素,其他均为0 R_1=\begin{bmatrix}a'_{11} & a'_{12} & \cdots & a'_{1n}\\ 0 & a'_{22} & \cdots & a'_{2n} \\ \vdots & \vdots & \ddots & \vdots\\0 & a'_{n2} & \cdots & a'_{nn}\end{bmatrix}
    • c_2为矩阵第二列:c_2=\begin{bmatrix}0\\a'_{21}\\\vdots\\a'_{n1}\end{bmatrix},e_2=\begin{bmatrix}0\\\pm1\\\vdots\\0\end{bmatrix} e_2的第二位元素的符号与c_2的第二个元素的符号保持一致, v_2=c_2+\|c_2\|_2e_2
    • H_2=I-2\frac{v_2v_2^T}{v_2^Tv_2}Q_2=Q_1H_2=H_1H_2, R_2=H_2R_1=H_2H_1A, H_2也为对称正交矩阵(A=H^T_1H^T_2R_2=Q_2R_2),类似地,R_2=H_2R_1的第二列第二个元素一下均为0 R_2=\begin{bmatrix}a''_{11} & a''_{12} & \cdots & a''_{1n}\\ 0 & a''_{22} & \cdots & a''_{2n} \\ \vdots & \vdots & \ddots & \vdots\\0 & 0 & \cdots & a''_{nn}\end{bmatrix}
    • 重复上述过程,直到R_{n-1}成为一个上三角矩阵,矩阵A分解为正交矩阵Q_{n-1}和上三角矩阵R_{n-1}的乘积。

    MATLAB实现:

    function [Q R] = QRFactorization(R)
    % The function factors a matrix [A] into an orthogonal matrix [Q]
    % and an upper-triangular matrix [R].
    % Input variables:
    % A  The (square) matrix to be factored.
    % Output variables:
    % Q  Orthogonal matrix.
    % R  Upper-triangular matrix.
    
    nmatrix = size(R);
    n = nmatrix(1);
    I = eye(n);
    Q = I;
    for j = 1:n-1
        c = R(:,j);
        c(1:j-1) = 0;
        e(1:n,1)=0;
        if c(j) > 0
            e(j) = 1;
        else
            e(j) = -1;
        end
        clength = sqrt(c'*c);
        v = c + clength*e;
        H = I - 2/(v'*v)*v*v';
        Q = Q*H;
        R = H*R;
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    >> A=[ 6 -7 2 ; 4 -5 2; 1 -1 1]
    
    A =
    
         6    -7     2
         4    -5     2
         1    -1     1
    
    >> [Q R] = qr(A)
    
    Q =
    
       -0.8242    0.3925   -0.4082
       -0.5494   -0.7290    0.4082
       -0.1374    0.5608    0.8165
    
    R =
    
       -7.2801    8.6537   -2.8846
             0    0.3365   -0.1122
             0         0    0.8165
    
    >> [Q1 R1] = QRFactorization(A)
    
    Q1 =
    
       -0.8242    0.3925   -0.4082
       -0.5494   -0.7290    0.4082
       -0.1374    0.5608    0.8165
    
    R1 =
    
       -7.2801    8.6537   -2.8846
        0.0000    0.3365   -0.1122
       -0.0000    0.0000    0.8165
    

    4. 总结

    这节课主要介绍了矩阵特征值与特征向量的概念,对于低阶矩阵,可以通过特征方程求解出矩阵特征值;对于高阶矩阵,可以使用幂法与反幂法求解出矩阵的最大特征值与最小特征值,要求出矩阵的所有特征值,则可以对矩阵进行QR分解,将矩阵A相似化为一个上三角矩阵,上三角矩阵的对角线元素即为矩阵A的特征值。

    相关文章

      网友评论

          本文标题:数值计算day5-特征值与特征向量

          本文链接:https://www.haomeiwen.com/subject/utaarctx.html