0

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

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

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)

根据这篇论文,我们也可以通过其 SVD 计算非奇异矩阵的逆矩阵。哪里 在此处输入图像描述(其中 U 和 V 是特征向量和 D 特征值,如果我错了,请纠正我)。

则相反的是,在此处输入图像描述

事实上,我可以在 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

所以,再次根据同一篇论文,我们可以使用 SVD

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

这会产生相同的错误。然后我尝试使用Cholesky 分解进行矩阵求逆在此处输入图像描述

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

我又得到了同样的错误。

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

我知道对于 matrix 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解决方案

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

乔尔斯基

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

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

4

0 回答 0