解决反复使用复数的大矩阵的问题

时间:2017-03-10 13:25:34

标签: r complex-numbers matrix-inverse

我有一个随机生成的矩阵,其中包含复杂的组件,我需要使用R进行反演。理想情况下,此矩阵大约为200x200。

奇怪的是,当矩阵很小(最小为6x6)但它很快就会失效,因为我增加了维度,即使函数求解没有产生错误信息:

set.seed(123)
tj<-sample(seq(from=0, to=1, by=0.001), 50)
matdim<-4 # this is the element that i'm progressively increasing
M.mat<-matrix(data=NA, nrow=matdim, ncol=matdim)
for(i in 1:matdim){
  for(j in 1:matdim){
    M.mat[i,j]<-exp(complex(real=0, imaginary=pi*tj[j]*(2*i-51)/50)) 
  }
} 
round(M.mat%*%solve(M.mat),3)[1:min(10, matdim),1:min(10, matdim)] 
# should be diag(1)
round(sum(M.mat%*%solve(M.mat)),3) # should be equal to mat.dim

关于mat.dim = 6或7这很好,然后开始变得越来越糟。

我检查了问题是否来自我使用复数指数的事实,但另一个例子没有任何问题:

mat.dim<-1000
C.mat<-matrix(data=exp(complex(real=0, imaginary=rnorm(mat.dim*mat.dim, sd=1000))), 
              nrow=mat.dim, ncol=mat.dim)
C.mat[1:min(10,mat.dim),1:min(10, mat.dim)]
round(C.mat%*%solve(C.mat),3)[1:min(10,mat.dim),1:min(10, mat.dim)] # is diag(1)
round(sum(C.mat%*%solve(C.mat)),3) # equals mat.dim

在第一个例子中,有人会知道为什么倒置会失败吗?

0 个答案:

没有答案