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
相关产品推荐
相关产品推荐

