三阶矩阵+QR分解+HouseHolder+Python 代码计算实例

提示:三阶QR 分解计算实例————保姆级分解过程

文章目录

  • 前言
  • 一、QR分解理论推导
  • 二、案例解析
    • 1.对A= ( 1 1 1 2 − 1 − 1 2 − 4 5 ) \begin{pmatrix} 1& 1& 1\\ 2&-1&-1\\2& -4& 5\\\end{pmatrix} 122114115进行QR分解,求出QR。
    • 解:QR分解过程如下:
  • 三、总结
  • 四、笔算推导附录
  • 五、附录python代码


前言

QR分解法求解特征值应用范围广泛,是本世界十大算法之一,可以求解任意矩阵的特征值,也是研究生《数值分析》课程中重要的章节,考试重点(武汉大学)。
这里有详细的三阶矩阵的QR分解计算步骤,可供大家理解QR算法。(敲黑板考试重点)

提示:下面案例可供参考,并附有python代码(成功运行)

一、QR分解理论推导

这里有一个很详细的理论推导过程,参考下面的博客。
基于HouseHolder变换的QR分解理论推导过程

二、案例解析

1.对A= ( 1 1 1 2 − 1 − 1 2 − 4 5 ) \begin{pmatrix} 1& 1& 1\\ 2&-1&-1\\2& -4& 5\\\end{pmatrix} 122114115进行QR分解,求出QR。

解:QR分解过程如下:

step1:

S1 = ( 1 2 2 ) \begin{pmatrix} 1\\ 2\\2\\\end{pmatrix} 122e1 = ( 1 0 0 ) \begin{pmatrix} 1\\ 0\\0\\\end{pmatrix} 100
c1 = -sign(a11) S 1 T ∗ S 1 \sqrt {S1^T*S1} S1TS1
U1= S1-c1*e1
    = ( 4 2 2 ) \begin{pmatrix} 4\\ 2\\2\\\end{pmatrix} 422
H1= I - 2U1 *U1T/(U1T *U1 )
    = ( − 1 / 3 − 2 / 3 − 2 / 3 − 2 / 3 2 / 3 − 1 / 3 − 2 / 3 − 1 / 3 2 / 3 ) \begin{pmatrix} -1/3& -2/3& -2/3\\ -2/3&2/3&-1/3\\-2/3& -1/3& 2/3\\\end{pmatrix} 1/32/32/32/32/31/32/31/32/3
A1=H1A
    = ( − 3 3 − 3 0 0 − 3 0 − 3 3 ) \begin{pmatrix} -3& 3& -3\\ 0&0&-3\\0&-3& 3\\\end{pmatrix} 300303333


step2:

S2 = ( 0 0 − 3 ) \begin{pmatrix} 0\\ 0\\-3\\\end{pmatrix} 003 e2 = ( 0 1 0 ) \begin{pmatrix} 0\\ 1\\0\\\end{pmatrix} 010
c2 = -sign(a22) S 2 T ∗ S 2 \sqrt {S2^T*S2} S2TS2
U2= S2-c2*e2
    = ( 0 − 3 − 3 ) \begin{pmatrix} 0\\ -3\\-3\\\end{pmatrix} 033
H2= I - 2U2 *U2T/(U2T *U2 )
    = ( 1 0 0 0 0 − 1 0 − 1 0 ) \begin{pmatrix} 1& 0& 0\\0&0&-1\\0& -1& 0\\\end{pmatrix} 100001010
A2=H2A1
    = ( − 3 3 − 3 0 3 − 3 0 0 3 ) \begin{pmatrix} -3& 3& -3\\ 0&3&-3\\0&0& 3\\\end{pmatrix} 300330333

step3:

R = A2
    = ( − 3 3 − 3 0 3 − 3 0 0 3 ) \begin{pmatrix} -3& 3& -3\\ 0&3&-3\\0&0& 3\\\end{pmatrix} 300330333
Q = H1 H2
    = ( − 1 / 3 2 / 3 2 / 3 − 2 / 3 1 / 3 − 2 / 3 − 2 / 3 − 2 / 3 1 / 3 ) \begin{pmatrix} -1/3& 2/3& 2/3\\ -2/3&1/3&-2/3\\-2/3&-2/3& 1/3\\\end{pmatrix} 1/32/32/32/31/32/32/32/31/3
分解完毕,即可进行一次QR迭代

三、总结

1、提取Sn

2、计算cn

3、计算Hn

4、计算An+1 = Hn*An

一直迭代到A的所有的下三角区域均为0。

四、笔算推导附录

三阶矩阵+QR分解+HouseHolder+Python 代码计算实例_第1张图片

五、附录python代码

# -*- coding: utf-8 -*-
"""
Created on Mon Jan  4 21:42:08 2021

@author: Jin
"""
# =============================================================================
import numpy as np
import math
import copy

def CGS(A):
    w= A.shape[0]
    Q = np.zeros_like(A, dtype=np.float32)
    R = np.copy(Q)
    for i in range(w):
        a = A.T[i]
        q = np.copy(a)
        for j in range(0, i):
            r = np.dot(Q[:,j],a) 
            R[j,i] = r
            q -= np.dot(r,Q[:,j])
        q_norm = np.linalg.norm(q)
        R[i,i] = q_norm
        Q[:,i] = q/q_norm
    return Q, R 
def matrix_multi(mat1, mat2):
    res = []
    rows = len(mat1[0])
    cols = len(mat1)
    for i in range(rows):
        temp = [0 for i in range(cols)]
        res.append(temp) 
    for i in range(rows):
        for j in range(cols):
            sm = 0
            for k in range(cols):
                sm += (mat1[k][i] * mat2[j][k])
            res[j][i] = sm
    return res
def matrix_T(matrix):
    mat = copy.deepcopy(matrix)
    m = len(mat[0])
    n = len(mat)
    for i in range(m):
        for j in range(n):
            if i < j:
                temp = mat[i][j]
                mat[i][j] = mat[j][i]
                mat[j][i] = temp
    return mat
def eig(A) :
    if A is None :
        return
    val = []
    times = 20  # 迭代次数
    tmp_mat = copy.deepcopy(A)
    for i in range(0, times) :
        (Q,R)=CGS(tmp_mat)
        tmp_mat = matrix_multi(R, Q)
        tmp_mat = matrix_T(tmp_mat)

        row = len(tmp_mat)
        col = len(tmp_mat[0])
        for i in range(0, row) :
            for j in range(0, col) :
                if i == j:
                    val.append(tmp_mat[i][j])
        
        return val
val = eig( A)
print(val)

原创文章,引用注明链接!

文末点赞 ,你的《数值分析》可考95plus ,亲测有效哦!

你可能感兴趣的:(考试,线性代数,qr,householder变换,python,矩阵)