You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中qr(A)在矩阵列数大于秩时的异常结果原因咨询

Julia中qr函数对秩亏矩阵的行为解释

问题描述

处理秩为2的矩阵A_1时,qr(A_1)的结果符合预期;但处理秩为1的矩阵A_2时,得到的Q有2列、R有2行,这与预期中Q列数、R行数等于矩阵秩的情况不符,对此存在困惑。

复现代码及运行结果

环境与基础定义

using LinearAlgebra
e_1 = zeros(4)
e_1[1] = 1
e_2 = zeros(4)
e_2[2] = 1

秩为2的矩阵A_1

A_1 = [e_1 e_2]
Q, R = qr(A_1)
display(Matrix(Q))
display(R)

运行结果:

4×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
 0.0  0.0
 0.0  0.0
2×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0

秩为1的矩阵A_2

A_2 = [e_1 e_1]
Q, R = qr(A_2)
display(Matrix(Q))
display(R)

运行结果:

4×2 Matrix{Float64}:
 1.0  0.0
 0.0  1.0
 0.0  0.0
 0.0  0.0
2×2 Matrix{Float64}:
 1.0  1.0
 0.0  0.0

行为解释

Julia中qr函数默认执行的是完整QR分解,而非精简版分解:

  • 完整分解下,Q的列数与原矩阵的列数一致,R的行数也与原矩阵列数一致,无论矩阵的秩是多少。
  • 对于秩为1的A_2,R的第二行全为0,这正是矩阵秩亏的体现——R中非零行的数量等于原矩阵的秩(这里是1),Q的第二列是正交补空间的基,虽然对表示原矩阵的列空间没有作用,但保证了Q是正交矩阵(列向量两两正交且模长为1)。

如果需要得到列数等于矩阵秩的Q和行数等于秩的R,可以使用精简QR分解,通过传入Val(true)参数实现:

Q_reduced, R_reduced = qr(A_2, Val(true))
display(Matrix(Q_reduced))
display(R_reduced)

运行结果:

4×1 Matrix{Float64}:
 1.0
 0.0
 0.0
 0.0
1×2 Matrix{Float64}:
 1.0  1.0

这个结果就符合最初预期的“Q列数、R行数等于矩阵秩”的形式。

内容的提问来源于stack exchange,提问作者tchappy ha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 23:04:51