给出特征值和特征值重数,怎么构建Jordan矩阵

1 构建一个Jordan块

A_Jordan_Bulk <- function(lamda, n)
{
  A <- diag(lamda,n)
  if(n>=2)
  {
    for(i in 1:(n-1))
    {
      A[i,i+1] <- 1
    }
  }
  A
}


2 怎么由Jordan块组成Jordan矩阵

 
   
#lamdas 是特征值,
#Eigenvalue_dims 特征值的重数
Jordan_matrix <- function(lamdas, Eigenvalue_dims)
{
  if(length(lamdas) == length(Eigenvalue_dims)&
    length(Eigenvalue_dims) == 1)#特征值个数1
  {
  Jordan_matrix_result <- A_Jordan_Bulk(lamdas,Eigenvalue_dims)
  }
  else #特征值个数>=2
  {
    if(length(lamdas) == length(Eigenvalue_dims))
    {
      sum_dims <- sum(Eigenvalue_dims)
      cumsum_dims <- cumsum(Eigenvalue_dims)
      Jordan_matrix_result <- matrix(0,
                                     ncol = sum_dims,
                                     nrow = sum_dims)
      for(i in 1:length(Eigenvalue_dims))
      {
        if(i == 1)
        {
          Jordan_matrix_result[1:(cumsum_dims[1]),
                               1:(cumsum_dims[1])] <- 
            A_Jordan_Bulk(lamdas[1],Eigenvalue_dims[1])
        }
        else
        {
          Jordan_matrix_result[(cumsum_dims[i-1] + 1):cumsum_dims[i],
                               (cumsum_dims[i-1] + 1):cumsum_dims[i]] <- 
            A_Jordan_Bulk(lamdas[i], Eigenvalue_dims[i])
        }
      }
    }
  }
  return(Jordan_matrix_result)
}


Jordan_matrix(2,5)

给出特征值和特征值重数,怎么构建Jordan矩阵_第1张图片

Jordan_matrix(c(2,5),c(2,3))

给出特征值和特征值重数,怎么构建Jordan矩阵_第2张图片


你可能感兴趣的:(R)