【发布时间】:2013-02-16 16:07:37
【问题描述】:
版本:我的问题是我试图从equation 8 中找到矩阵S,但这个方程有错误。
如何直接获得R中矩阵的右特征向量? 'eigen()' 只给出左特征向量
真的是上一版,我把这里弄得一团糟,但这个问题对我来说真的很重要:
eigen() 提供了一些特征向量的矩阵,来自函数帮助:
" 如果'r
A = V Lmbd V^(-1)
(直到数字模糊),其中Lmbd =diag(lam)"
那是A V = V Lmbd,其中 V 是 矩阵 现在我们检查一下:
set.seed(1)
A<-matrix(rnorm(16),4,4)
Lmbd=diag(eigen(A)$values)
V=eigen(A)$vectors
A%*%V
> A%*%V
[,1] [,2] [,3] [,4]
[1,] 0.0479968+0.5065111i 0.0479968-0.5065111i 0.2000725+0i 0.30290103+0i
[2,] -0.2150354+1.1746298i -0.2150354-1.1746298i -0.4751152+0i -0.76691563+0i
[3,] -0.2536875-0.2877404i -0.2536875+0.2877404i 1.3564475+0i 0.27756026+0i
[4,] 0.9537141-0.0371259i 0.9537141+0.0371259i 0.3245555+0i -0.03050335+0i
> V%*%Lmbd
[,1] [,2] [,3] [,4]
[1,] 0.0479968+0.5065111i 0.0479968-0.5065111i 0.2000725+0i 0.30290103+0i
[2,] -0.2150354+1.1746298i -0.2150354-1.1746298i -0.4751152+0i -0.76691563+0i
[3,] -0.2536875-0.2877404i -0.2536875+0.2877404i 1.3564475+0i 0.27756026+0i
[4,] 0.9537141-0.0371259i 0.9537141+0.0371259i 0.3245555+0i -0.03050335+0i
我想找到右特征向量矩阵R,
定义左特征向量矩阵L的方程是:
L A = LambdaM L
定义右特征向量矩阵R的方程是:
A R = LambdaM R
而 eigen() 只提供矩阵V:
A V = V Lmbd
我想获得矩阵R 和LambdaM 的实矩阵A,这可能是负定的。
【问题讨论】:
-
但是 transpose 给出了转置矩阵的右特征向量,不是吗?
-
eigen()在我看来,正如我所料,正在返回正确的特征向量。试试这个看看它确实有效:m <- matrix(1:4, ncol=2); e <- eigen(m); e$values[1]; (m %*% e$vectors[,1])/e$vectors[,1]. -
@BenBolker -- 比较这两者,看看你的粗体陈述是不是真的:
W <- matrix(1:4, ncol=2); lambda <- diag(1:2); W %*% lambda; lambda %*% W。我认为 OP 的困惑是一个(很容易理解的)符号。当 W 是 vector 时,标量 lambda 的左右乘法是等价的,但乘积通常是这样写的:拉姆达W。当W是一个矩阵时,它必须是右-乘以矩阵Lambda,像这样:W 拉姆达。 (比较等式 (1) 和 (14) here, for example)。 -
还是不太对!请参阅上面引用的 Mathworld 站点。当用单个特征向量/特征值对表示时,
A r == lambda r为真(等式 1)。当用特征值矩阵表示时,正确的表达式是A R == R Lambda(等式14:在Mathworld的符号中,A X_R == X_R D)。所以事实上eigen给你的是正确的特征向量矩阵,正如传统定义的那样。我认为您想要一些不同的东西,这很好,但请准确(并仔细检查我的说法,因为我至少已经错了一次)。 -
@Josh O'Brien 感谢您的帮助!我已经实现了整个第 3 节,它的工作原理如第 4 节所示,定义(8)确实有一个错误。
标签: r function eigenvector eigenvalue