3

我有一个困难的R计算要做,我可以选择两台计算机,称为 V 和 L,来运行代码。V应该比L快,但我没有经历过。所以我决定测试一下。

作为一个简单的测试,我决定让他们将一个 3000*3000 的矩阵反转 500 次,并记录时间。

set.seed(123)
I=500
n=3000
time=matrix(NA,ncol=3,nrow=I)
for(i in 1:I){
t0<-proc.time()
x<-solve(matrix(runif(n^2),n))
mt1<-proc.time()
time[i,]<-(mt1-t0)[1:3]
}

问题是在特定的迭代过程中,它卡住了。我不知道为什么,但我怀疑这是因为生成的矩阵接近奇异。所以我想改进代码。我可以想到3种方法:

  1. 确保生成的矩阵很容易可逆。但是我该如何执行呢???当然,任何解决方案都需要计算成本低廉,否则练习将变得毫无意义。
  2. 如果需要太长时间,要求R跳过该迭代?solve但是,我该怎么做呢?
  3. 给他们分配不同的计算任务,有什么建议吗?
4

1 回答 1

8

随机矩阵以概率 1 可逆,这意味着在实践中,生成奇异(即不可逆)矩阵的概率非常小。

此外,从 R 用于反转矩阵的算法的角度来看,不存在“容易反转”的矩阵。该算法要么成功,要么确定矩阵是奇异的并且失败。但是没有任何情况下它会“非常努力”地尝试并花费很长时间来反转矩阵。这是一种确定性算法,它要么遇到 a 0(或小于某个给定 epsilon 的值),在这种情况下如果失败,否则不会。

你在哪个迭代上卡住了?你确定你被困在矩阵的反转上,而不是像垃圾收集那样需要很长时间吗?

我无法重现您描述的问题。从随机种子 123 开始,我可以使用您的代码连续反转 500 个随机 3000x3000 矩阵,而不会出现任何明显的时序差异。你能找到一个直接生成“难以反转矩阵”的随机种子吗?

于 2013-10-01T01:30:40.443 回答