R如何生成随机但易于反转的矩阵

qoh*_*eth 2 performance benchmarking r

我有一个很难R做的计算,我可以选择2台计算机,叫做V和L,来运行代码.V应该比L快,但我没有遇到过这种情况.所以我决定测试一下.

作为一个简单的测试,我决定让他们倒转3000*3000的matrice 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]
}
Run Code Online (Sandbox Code Playgroud)

问题是在特定的迭代期间,它被卡住了.我不知道为什么,但我怀疑是因为生成的矩阵接近奇异.所以我想改进代码.我可以想到三种方式:

  1. 确保生成的矩阵易于反转.但是我该如何强制执行?当然,任何解决方案都需要在计算上便宜,否则练习变得毫无意义.
  2. R如果solve花费太长时间,请跳过该迭代?但同样,我该怎么做?
  3. 为他们分配一个不同的计算任务,任何建议?

mri*_*rip 7

随机矩阵是概率为1的可逆矩阵,这意味着在实践中,生成奇异(即不可逆)矩阵的概率是无穷小的.

而且,从R用于反转矩阵的算法的观点来看,不存在诸如"易于反转"的矩阵.算法成功,或者确定矩阵是单数并且失败.但是没有任何情况下它会"非常努力"并且花费很长时间来反转矩阵.它是一个确定性算法,要么遇到一个0(或小于某个给定的epsilon的值),在这种情况下如果失败,或者它不会.

在哪个迭代中你会被卡住?你确定你会陷入矩阵的反转,而且它不像垃圾收集那样需要很长时间吗?

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

  • "我的电脑只是睡着了" - 喜剧金. (2认同)