【发布时间】:2015-09-23 03:21:42
【问题描述】:
我有以下矩阵
M <- structure(c(0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 1, 0), .Dim = c(5L, 5L))
我想找到正好为 1 的特征值。我认为这会起作用:
Re(eigen(M)$values) == 1 & Im(eigen(M)$values) == 0
但Re(eigen(M)$values) == 1 认为第 5 个特征值不等于 1,尽管它确实如此。我错过了什么?
编辑:一旦它被指出为浮点问题,我会进行更多调查并找出几种解决方案,包括使用abs(value) < tol、all.equal 和signif。答案可以讨论这些选项吗?
【问题讨论】:
-
可能是像here这样的浮动问题
-
在我的电脑上,
Re(eigen(M)$values)[5]给0.9999999999999997779554和options(digits = 22)。 -
因为
format(Re(eigen(M)$values[c(3, 5)]), digits=22) [1] "1.0000000000000000000000" "0.9999999999999997779554" -
另一种方式可能是
Re(eigen(M)$values) %%1 == 0 & Im(eigen(M)$values) %% 1 == 0,即FALSE FALSE TRUE TRUE FALSE。
标签: r complex-numbers eigenvalue