获取欠定系统的 n 个解的样本

Get a sample of n solutions of an under-determined system

我有一个具有无限解的欠定方程组 (Ax = b)。 我的目标是为该系统获得 n 个随机解 (i.e n 个向量 x)。 是否可以用 R 来做(如果可能的话用基本的 R 函数)?

使用 base::qr.solve() 你可以获得 1 个解决方案,但它总是相同的。

这是一个可重现的示例:

# Ex data illustrating this situation: Ax = b
A = matrix(
c(rep(1,11), 0.1803, 0.0071, 0.0063, 0.0201, 0.3333, 0.0043, 0.1573, 0.0007, 0.2439, 0.0072, 0.0011),
nrow = 2,
ncol = 11,
byrow = TRUE
)

b = as.matrix(c(1,0.1))

# currently not random x solutions
x = qr.solve(A, b)

当前结果:

print(x)
           [,1]
 [1,] 0.5363741
 [2,] 0.4636259
 [3,] 0.0000000
 [4,] 0.0000000
 [5,] 0.0000000
 [6,] 0.0000000
 [7,] 0.0000000
 [8,] 0.0000000
 [9,] 0.0000000
[10,] 0.0000000
[11,] 0.0000000

以下是一些相关问题:

根据你提供的第一个link可以得到通用的解决方案(使用MASS):

library(MASS)

Ag <- ginv(A)
Ag
xb <- Ag %*% b
xb
Aw <- diag(nrow=nrow(Ag)) - Ag %*% A
Aw

因此您可以创建以下形式的 n 个解决方案:

w <- runif(11)
z <- xb + Aw %*% w

像这样(100 个解决方案的示例矩阵):

sapply(1:100, function(i) {
  w <- runif(11)
  z <- xb + Aw %*% w}
)