获取欠定系统的 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
以下是一些相关问题:
Solving under/overdetermined systems in R
根据你提供的第一个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}
)
我有一个具有无限解的欠定方程组 (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
以下是一些相关问题:
Solving under/overdetermined systems in R
根据你提供的第一个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}
)