在R

时间:2017-11-16 17:28:24

标签: r matrix svd matrix-inverse singular

我试图掌握可逆和不可逆矩阵的基本概念。

我创建了一个随机的非奇异方阵

S <- matrix(rnorm(100, 0, 1), ncol = 10, nrow = 10)

我知道这个矩阵是正定的(因此是可逆的)因为当我将矩阵S分解成它的特征值时,它们的乘积是正的。

eig_S <- eigen(S)
eig_S$values
 [1]  3.0883683+0.000000i -2.0577317+1.558181i -2.0577317-1.558181i  1.6884120+1.353997i  1.6884120-1.353997i
 [6] -2.1295086+0.000000i  0.1805059+1.942696i  0.1805059-1.942696i -0.8874465+0.000000i  0.8528495+0.000000i
solve(S)

根据这个paper,我们也可以通过它的SVD来计算非奇异矩阵的逆。 哪里 enter image description here(其中U和V是特征向量和D特征值,如果我错了,请纠正我)。

然后是enter image description here

的确,我可以在R中运行公式:

s <- svd(S)
s$v%*%solve(diag(s$d))%*%t(s$u)

其结果与solve(S)完全相同。

我的第一个问题是:

1)s$d确实代表S的特征值吗?因为s$deig_S$values非常不同。

现在是第二部分,

如果我创建一个奇异矩阵

I <- matrix(rnorm(100, 0, 1), ncol = 5, nrow = 20)
I <- I%*%t(I)
eig_I <- eigen(I)
eig_I$values
 [1]  3.750029e+01  2.489995e+01  1.554184e+01  1.120580e+01  8.674039e+00  3.082593e-15  5.529794e-16  3.227684e-16
 [9]  2.834454e-16  5.876634e-17 -1.139421e-18 -2.304783e-17 -6.636508e-17 -7.309336e-17 -1.744084e-16 -2.561197e-16
[17] -3.075499e-16 -4.150320e-16 -7.164553e-16 -3.727682e-15

求解函数会产生错误

solve(I)
  

系统在计算上是单数的:倒数条件数=   1.61045e-19

所以,再次根据相同的paper,我们可以使用SVD

i <- svd(I)    
solve(i$u %*% diag(i$d) %*% t(i$v))

产生相同的错误。 然后我尝试使用Cholesky decomposition进行矩阵求逆enter image description here

Conj(t(I))%*%solve(I%*%Conj(t(I)))

我再次得到同样的错误。

有人可以解释我在哪里使用方程式错误吗?

我知道对于矩阵I%*%Conj(t(I)),特征值矩阵的行列式是正的,但由于我做的初始乘法,矩阵不是满秩。

j <- eigen(I%*%Conj(t(I)))
det(diag(j$values))
[1] 3.17708e-196
qr(I %*% Conj(t(I)))$rank
[1] 5

更新1:继续发表评论后,再次浏览论文/维基百科页面。我使用了这两个代码,它们产生了一些结果,但我不确定它们的有效性。第一个例子似乎更可信。 SVD solution

i$v%*%diag(1/i$d)%*%t(i$u)

Cholesky

Conj(t(I))%*%(I%*%Conj(t(I)))^(-1)

我不确定我是否正确解释了两个来源。

0 个答案:

没有答案