【发布时间】:2018-10-26 13:08:33
【问题描述】:
R 可以解决欠定线性系统:
A = matrix((1:12)^2,3,4,T)
B = 1:3
qr(A)$rank # 3
qr.solve(A, B) # solutions will have one zero, not necessarily the same one
# 0.1875 -0.5000 0.3125 0.0000
solve(qr(A, LAPACK = TRUE), B)
# 0.08333333 -0.18750000 0.00000000 0.10416667
(它给出了无数解中的一种解)。
但是,如果排名(此处为 2)低于行数(此处为 3),则不起作用:
A = matrix(c((1:8)^2,0,0,0,0),3,4,T)
B = c(1,2,0)
A
# [,1] [,2] [,3] [,4]
# [1,] 1 4 9 16
# [2,] 25 36 49 64
# [3,] 0 0 0 0
qr.solve(A, B) # Error in qr.solve(A, B) : singular matrix
solve(qr(A, LAPACK = TRUE), B) # Error in qr.coef(a, b) : error code 3
但是这个系统确实有解决方案!
我知道一般的解决方案是使用 SVD 或 A 的广义/伪逆(参见this question 及其答案),但是:
solve 或 qr.solve 是否存在自动将系统 AX=B 减少到仅具有 rank(A) 行的等效系统 CX=D 的方法,其中qr.solve(C, D)开箱即用?
例子:
C = matrix(c((1:8)^2),2,4,T)
D = c(1,2)
qr.solve(C, D)
# -0.437500 0.359375 0.000000 0.000000
【问题讨论】:
标签: r math linear-algebra numerical-methods