我有点糊涂了。矩阵A有8个特征值,有些是复特征值,有些是实特征值。我只想复制特征向量对应于实特征值作为列到矩阵M中,否则列应该被0填充。我使用代码:
M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[,i], 0)
}
,但结果就像我执行了这个:
M <- matrix(,ncol=8,nrow=8)
for(i in 1:8) {
M[,i] <- ifelse(Im(eigen(A)$val[i]) == 0, eigen(A)$vec[**1**,i], 0)
}
(实际上生成的输出与上面的代码完全相同)。我的误解在哪里?
我通过R-help@r-project.org找到了解决方案:这不是矩阵或I循环行为的问题,这是一个ifelse的问题,在R中的行为与c中的例子非常不同,所以处理我的想法的正确方法是:
for(i in 1:8) {
M[,i] <- if(Im(eigen(A)$val[i]) == 0) eigen(A)$vec[,i] else 0
}