机器学习(数据分析)数学基础——线性代数篇(七)QR分解的代码实现

矩阵的分解有很多种,例如LU分解、QR分解、EVD分解、SVD分解。

        首先我们来看QR分解的定义:如果实(复)非奇异矩阵A能够化成正交(酉)矩阵Q与实(复)非奇异上三角矩阵R的乘积,即A=QR,则称其为A的QR分解。

【注1】非奇异矩阵可以理解为行列式不为0的矩阵,也就是可逆矩阵。

【注2】Q是m*n实(复)矩阵,且满足Q^{T}Q=E;R是n阶实(复)非奇异上三角矩阵。

然而.... 关于实际问题的求解,书中的定理并没有强制要求A是一个方阵,也就是说只要A和Q是一个m*n就行,我们来看一下具体的代码。

# 用施密特正交化方法求解QR矩阵
M = np.array([[12,9,-4],
              [7,4,5],
              [6,-3,21],
              [6,15,8],
              ], dtype=float
             )
Q = np.zeros((4,3))
j = 0
for a in M.T:
    b = np.copy(a)
    for i in range(0,j):
        b = b-np.dot(np.dot(Q[:,i].T, a),Q[:,i])
    e = b / np.linalg.norm(b)
    Q[:,j] = e
    j += 1
R = np.dot(Q.T, M)
np.set_printoptions(precision=3, suppress=True)

上面的代码是求QR四大方法之一的施密特正交化方法

1.M是已知矩阵,我们要将它分解。Q是一个空的矩阵,定义和M格式相同就OK

2.把M中的列向量按照施密特正交化方法进行正交,Q[:,i]就是取矩阵的列向量,下面的代码行是正交化公式的具体体现:

b = b-np.dot(np.dot(Q[:,i].T, a),Q[:,i])

循环就是全部走完一边。之后的代码就是单位化公式的体现,norm是我们在上一篇所学到的范数随后将其转回给Q。

3.R就是根据公式左面同时乘上Q的转置

R = np.dot(Q.T, M)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物理系的计算机选手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值