【问题标题】:Getting all possible Linear Combinations of a matrix R获取矩阵 R 的所有可能的线性组合
【发布时间】:2020-02-26 11:02:19
【问题描述】:

假设我有以下增广矩阵

100 100 0   100
325 0   500 500

用方程式表示:

c1(100) + c2(100) + c3(0) = 100
c1(325) + c2(0) + c3(500) = 500

我无法更改最后一列。 如何找到所有可能的线性组合? 显而易见的解决方案是 c2 = 1 和 c3 = 1。 但是我如何以系统的方式获得它?

我尝试在 pracma 包中使用 rref 但我得到了

1 0  1.538462   1.5384615
0 1 -1.538462  -0.5384615

我真的不能有任何分数。

有什么建议吗?

【问题讨论】:

  • 您有 2 个方程和 3 个变量 -> 无法解析求解。您必须使用数值方法,这可能会返回无值或无限值。如果你希望你的值也是整数......那就更糟了。
  • 数值方法是什么意思?
  • 数值近似算法,通常基于一些迭代过程返回近似答案。
  • 你暗示蛮力:( noooooooooooooooooooooooooooooooooooooooooooooooooooooooooousooooooooooousooooo我猜我的案例:限制所有c从0:2,然后尝试每个组合。(我不能有任何负面的组合。) span >

标签: r matrix


【解决方案1】:

这是一个欠定的线性方程组。您可以借助 A 的 Moore-Penrose 逆获得其所有解决方案。让Ainv 成为A 的 Moore-Penrose 倒数。那么A %*% x = b 的所有解都由Ainv %*% b + (I - Ainv %*% A) %*% w 给出,其中I 是单位矩阵,w 是任意向量。

A <- rbind(c(100,100,0), c(325,0,500))
b <- c(100,500)

Ainv <- MASS::ginv(A)

w <- c(1,2,3) # arbitrary
one_solution <- Ainv %*% b + (diag(3L) - Ainv %*% A) %*% w

A %*% one_solution
#      [,1]
# [1,]  100
# [2,]  500

【讨论】:

  • 什么是 v(任何向量)?最终输出是什么?
  • @user2974951 “最终输出”是什么意思?有无限多的解,每个向量都有一个解w
  • 如果我错了,请纠正我,但我仍然必须经历 w 的各种组合,直到 A %*% one_solution == b & one_solution 只包含整数?这似乎是更复杂的蛮力。
猜你喜欢
  • 2019-09-27
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多