【矩阵分解】

QR分解

QR分解将矩阵分解为正交矩阵与上三角矩阵的乘积,事实上,QR分解是格拉姆-施密特正交化的另一种表现形式。
对于任意一个 n 阶方阵AQR分解成一个n阶正交矩阵Q与一个n阶上三角矩阵R的乘积。

								A = QR

例如一个矩阵 A = [[0,1,1],[1,0,1],[1,1,0]],
其特征多项式为 |A-λI| = det[[-λ ,1,1],[1,-λ,1],[1,1,-λ]] = -(λ-2)(λ+1)^2, 可以解得特征值为2,-1,-1。
带入式子 (A-λI)x = 0,
解出:x1 = [1,1,1].T, x2 = [-1,1,0].T, x3 = [-1,-1,2].T

正交单位化后Q = [1/sqrt(3)**x1,**1/sqrt(2)x2,1/sqrt(6)x3],

使用python计算:

import numpy as np 
A0 = np.array([[0,1,1],[1,0,1],[1,1,0]])
#QR分解
Q,R = np.linalg.qr(A0)

Q = array([[ 0. , 0.81649658, -0.57735027],
[-0.70710678, -0.40824829, -0.57735027],
[-0.70710678, 0.40824829, 0.57735027]])

R = array([[-1.41421356, -0.70710678, -0.70710678],
[ 0. , 1.22474487, 0.40824829],
[ 0. , 0. , -1.15470054]])

特征值分解

对于n阶矩阵A,如果它有n各线性无关的特征向量,则可以分解如下3个矩阵的乘积:

							A = QʌQ^-1

为对角矩阵。
使用特征值分解,可以快速的解出矩阵A的特征值,

eigditgit,eigvector = np.linalg.eig(A0)

eigditgit = array([-1., 2., -1.])

eigvector = array([[-0.81649658, 0.57735027, 0.22645541],
[ 0.40824829, 0.57735027, -0.79259392],
[ 0.40824829, 0.57735027, 0.56613852]])

奇异值分解

特征值分解只适用于方阵,奇异值分解是对它的推广。其思路是对A * A.T和A.T * A进行特征值分解,对于一个m*n矩阵A有

	 						A =U∑V

其中U为m阶正交矩阵,其是矩阵A的左奇异向量,是A * A.T的特征向量,∑ = [ [∑n,0(m-n)*n] ]
∑n = diag(σ1…σn),σi是矩阵A的奇异值,是A * A.T的非负平方根。
V为n阶正交矩阵,其是矩阵A的右奇异向量,是A.T * A的非负平方根。

使用python计算:

A = np.array([[-1,3],[3,1],[1,1]])
U,sig,V = np.linalg.svd(A)

得到U :
array([[ 4.08248290e-01, -8.94427191e-01, -1.82574186e-01],
[ 8.16496581e-01, 4.47213595e-01, -3.65148372e-01],
[ 4.08248290e-01, -9.43689571e-16, 9.12870929e-01]])

sig:array([3.46410162, 3.16227766])

V:array([[ 0.70710678, 0.70710678],
[ 0.70710678, -0.70710678]])

特征值分解进行比较

B = np.dot(A,A.T)
np.linalg.eig(B)

可以得到:
(array([ 0., 10., 12.]),
array([[ 1.82574186e-01, -8.94427191e-01, -4.08248290e-01],
[ 3.65148372e-01, 4.47213595e-01, -8.16496581e-01],
[-9.12870929e-01, 9.27403771e-16, -4.08248290e-01]]))
特征值为0,10,12,那么非负平方根即为sqrt(10),sqrt(12).

对于对称矩阵,例如开头给出的矩阵A = [[0,1,1],[1,0,1],[1,1,0]],
进行奇异值分解,

np.linalg.svd(A)

结果为:
(array([[-5.77350269e-01, 2.77555756e-16, 8.16496581e-01],
[-5.77350269e-01, -7.07106781e-01, -4.08248290e-01],
[-5.77350269e-01, 7.07106781e-01, -4.08248290e-01]]),
array([2., 1., 1.]),
array([[-0.57735027, -0.57735027, -0.57735027],
[-0. , 0.70710678, -0.70710678],
[-0.81649658, 0.40824829, 0.40824829]]))

可以看到对称矩阵A的奇异值即是特征值的绝对值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值