r语言 - 从复数 + 实特征向量创建新矩阵.分别使用实值和复数值将复数共轭物拆分为实数列



我希望将矩阵中的任何复杂特征向量/值分离成实部和虚部,分类为所有实值的新矩阵,其中任何复共轭对的实部都在自己的列中,而虚部现在是其自己列中的实部......如果我的 3x3 矩阵给我这些特征向量,那么用一个例子来展示可能更容易:

[,1]     [,2]    [,3]
[1,] 0.3-0.4i 0.3+0.4i -0.6+0i
[2,] 0.3+0.1i 0.3-0.1i -0.8+0i
[3,] 0.8+0.0i 0.8+0.0i  0.1+0i

我希望我的代码创建一个如下所示的矩阵:

[,1]     [,2]    [,3]
[1,]    0.3      0.4      -0.6
[2,]    0.3      0.1      -0.8
[3,]    0.8      0.0       0.1

我想我不在乎 [3,2] 中的零是 NA 还是 0。

我是 R 编码的初学者。我尝试迭代地执行此操作,这可能是错误的方法,并且查看我的尝试,现在很明显为什么它不起作用,但我想包含它以向您展示您正在使用的内容。任何指导或提示将不胜感激!

dispersal_matrix = matrix(c( 1,-2,-3,
-1, 1, 3,
2, 1, 3), nrow=3)
d = 3  #in the end the user needs to be able to choose how many eigenvectors they want
right_eigs = eigen(dispersal_matrix) 
n = nrow(dispersal_matrix) 
all_eigenvectors = right_eigs$vectors
real_split_eigenvectors = matrix(nrow = n, ncol = d) 
is_conj = FALSE
for(j in 1:d){
for(i in 1:n){
if(abs(Im(all_eigenvectors[i,j]))>1e-8){
real_split_eigenvectors[i,j] = Re(all_eigenvectors[i,j])
real_split_eigenvectors[i,j+1] = Im(all_eigenvectors[i,j])
is_conj = TRUE
}
else{
real_split_eigenvectors[i,j] = Re(all_eigenvectors[i,j])
}
}
if(is_conj == TRUE) {
j+1
is_conj = FALSE
}
}

顶部的示例四舍五入,以便于阅读。

is_conj = FALSE
for(j in 1:d){ # << PHI >> RIGHT eigenvectors real matrix
if(any(abs(Im(Phi_complex[,j]))<1e-8)){
Phi_real[,j] = Re(Phi_complex[,j])
} else if(is_conj ){
Phi_real[,j] = Im(Phi_complex[,j])
is_conj = FALSE # switches the state of the conjugate variable to false so the next round of the loop will go to the next step in the if-else chain
}else {
Phi_real[,j] = Re(Phi_complex[,j])
is_conj = TRUE # returns the conjugate state back to TRUE for the loop
}
}

我在朋友的帮助下的解决方案

相关内容

  • 没有找到相关文章

最新更新