【发布时间】:2016-07-27 20:20:00
【问题描述】:
我正在尝试在 R 中求解方程 AX = B。
我有两个矩阵,A 和 B:
A = matrix(c(1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,
0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,
0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,
0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0), byrow = T, nrow = 10, ncol = 16)
B = matrix(c(1900,2799,3096,3297,3782,4272,7783,10881,7259,30551), nrow = 10, ncol = 1)
我的问题是,我怎样才能解决AX = B 并保证非负解决方案?我正在求解的值 (X1, X2,...X15, X16) 是人口数据,因此它们不能为负数。理想情况下,它们也是整数值,但一次只有一件事。
在 R 中有没有简单的方法来做到这一点?
我找到了一种方法来做到这一点here,但它并没有对所有X 产生积极的结果,这就是我所追求的。
【问题讨论】:
-
我不明白。如果代数给你一个负值,那就是负数。没有办法强迫它是积极的。
-
@Roland 在许多情况下,线性方程组有无数个解。因此,有些解决方案具有负值,有些具有所有正值(在我的情况下更可取)。
-
我找到了使用
nnls包的解决方案。解是 (1900, 0, 3297, 0, 0, 4272, 10881, 0, 3782, 0, 2799, 0, 109, 2987, 7783, 0)。但是,我知道粗略地说X1应该是~600 而X2应该是~1300。无论如何在R中包含这个逻辑? (通过可能对X1(假设它必须>500)和X2(假设它必须>1200)施加限制? -
@AhmedFasih 。不要在简历上交叉发帖。交叉发布强烈劝阻,并且是标记版主并在一个或两个站点上删除问题的理由。请参阅this link 进行讨论。
-
您对解决方案有什么更深入的了解吗?是否存在解决方案不太可能大于的最大值?
标签: r matrix linear-algebra