0

我在 R 中执行以下操作:

> m = matrix(c(0.563291, -0.478813,  0.574175,
+ 0.160779,  -0.03407,  0.381922,
+ 0.0677914,  0.870361,  -0.88602), 3, 3)
> mt = t(m)
> mt

[1,] 0.5632910 -0.478813  0.574175
[2,] 0.1607790 -0.034070  0.381922
[3,] 0.0677914  0.870361 -0.886020
> e<-eigen(mt)
> e
$values
[1] -1.1583554  0.5215205  0.2800359

$vectors

[1,] -0.3684057 0.8245987 -0.1255897
[2,] -0.2513624 0.4625355 -0.7915182
[3,]  0.8950387 0.3257267 -0.5981021

在 eigen3 中使用以下 c++ 代码:

std::cout << "=========" << std::endl;
std::cout << A << std::endl;

EigenSolver<MatrixXd> es(A);

std::cout << "evals: " << std::endl;
std::cout << es.eigenvalues();
std::cout << std::endl << "evecs: " << std::endl;
std::cout << es.eigenvectors() << std::endl;
std::cout << "=========" << std::endl;

我得到以下值:

=========
0.563291 -0.478813  0.574175
0.160779  -0.03407  0.381922
0.0677914  0.870361  -0.88602

evals: 
(0.521521,0)
(0.280036,0)
(-1.15836,0)
evecs: 
(-0.824599,0)  (0.125591,0) (-0.368406,0)
(-0.462535,0)  (0.791518,0) (-0.251362,0)
(-0.325726,0)  (0.598102,0)  (0.895039,0)
=========

为什么 eigen3 中的顺序与 R 中的顺序不同?我正在寻找特征版本以“最高特征值和相应的特征向量”格式存储和打印信息,这似乎是这样做的,但是为什么特征向量中的 R 存在差异,因为它似乎将向量打印为列向量而不是行向量,通过乘以 -1 来关闭值?

如果我将 R 的 evs 输出和 Eigen 的 evs 输出相乘,如果它们相等,我应该得到单位矩阵 I,不是吗?

> v = matrix(c(-0.3684057, 0.8245987, -0.1255897,
+       -0.2513624, 0.4625355, -0.7915182,
+       0.8950387, 0.3257267, -0.5981021), nrow = 3, ncol = 3)
> v
           [,1]       [,2]       [,3]
[1,] -0.3684057 -0.2513624  0.8950387
[2,]  0.8245987  0.4625355  0.3257267
[3,] -0.1255897 -0.7915182 -0.5981021

> u = matrix(c(-0.824599, 0.125591, -0.368406,
+            -0.462535, 0.791518, -0.251362,
+            -0.325726,  0.598102, 0.895039), nrow = 3, ncol = 3)
> u
          [,1]      [,2]      [,3]
[1,] -0.824599 -0.462535 -0.325726
[2,]  0.125591  0.791518  0.598102
[3,] -0.368406 -0.251362  0.895039

> c = u*v
> c
          [,1]      [,2]       [,3]
[1,] 0.3037870 0.1162639 -0.2915374
[2,] 0.1035622 0.3661052  0.1948178
[3,] 0.0462680 0.1989576 -0.5353247

> u = t(u)
> u
          [,1]     [,2]      [,3]
[1,] -0.824599 0.125591 -0.368406
[2,] -0.462535 0.791518 -0.251362
[3,] -0.325726 0.598102  0.895039
> c = u*v
> c
            [,1]        [,2]        [,3]
[1,]  0.30378697 -0.03156886 -0.32973763
[2,] -0.38140576  0.36610517 -0.08187531
[3,]  0.04090783 -0.47340862 -0.53532471
> 
4

1 回答 1

1

你可以对它们进行排序。

对于 R,文档说

Value:

     The spectral decomposition of ‘x’ is returned as components of a
     list with components

  values: a vector containing the p eigenvalues of ‘x’, sorted in
          _decreasing_ order, according to ‘Mod(values)’ in the
          asymmetric case when they might be complex (even for real
          matrices).  For real asymmetric matrices the vector will be
          complex only if complex conjugate pairs of eigenvalues are
          detected.

没有什么需要对值进行排序,这样做只是一种约定。

(向量符号的相关问题也是一个准常见问题解答。)

于 2014-12-31T19:16:31.470 回答