Generate eigenchains for zero eigenvalues
mc_0chains.RdGenerate eigenchains for zero eigenvalues of multi-companion matrices
Arguments
Details
Non-structural eigenvectors for zero eigenvalues may be specified with the
  vec0 argument. It is a list with one element for each
  non-structural 0 eigenvalue. This element is a matrix with the seeding
  chain for the corresponding chain (!!! edit this !!!) with enough
  number of rows (at least the multi-companion order). This is often a
  zero chain for a mc matrix of smaller or larger size. In that case the
  vectors in the chain are extended or shrinked, respectively. However,
  extending and shrinking of 0-chains is different from the ordinary
  case of non-zero eigenvalues and involves increasing or decreasing the
  number of vectors in the chain.
If vec0 is missing or equal to list() the function
  assumes that the only 0 eigenvalues are the structural ones, i.e. that
  there are no 0 eigenvalues among the remaining eigenvalues.
Value
A list with elements eigval, len.block, eigvec,
  and chains. These may be easily merged with the output from
  make_mcev.
Note
This function covers all possibilities but has not been tested properly in the case when non-structural 0 eigenvalues are present.
TODO: Prepare meaningful examples and tests.
2015-12-27: dropped argument F0bot. The old signature was
  mc_0chains(dim, mo, mo.col, vec0, F0bot = NULL, flagtriang = TRUE).
Examples
mc_0chains(6, 4, 1)
#> $eigval
#> [1] 0 0 0 0
#> 
#> $len.block
#> [1] 2 1 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    1
#> [3,]    0    0
#> [4,]    0    0
#> [5,]    0    0
#> [6,]    1    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    1
#> [4,]    0
#> [5,]    0
#> [6,]    0
#> 
#> $chains[[3]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    1
#> [5,]    0
#> [6,]    0
#> 
#> $chains[[4]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    0    0    0    0    0
#> [2,]    0    1    0    0    0
#> [3,]    0    0    1    0    0
#> [4,]    0    0    0    1    0
#> [5,]    0    0    0    0    1
#> [6,]    1    0    0    0    0
#> 
mc_0chains(6, 4, 2)
#> $eigval
#> [1] 0 0 0 0
#> 
#> $len.block
#> [1] 1 1 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    1
#> [4,]    0
#> [5,]    0
#> [6,]    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    1
#> [5,]    0
#> [6,]    0
#> 
#> $chains[[3]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> $chains[[4]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    0
#> [6,]    1
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    0    0
#> [2,]    0    0    0    0
#> [3,]    1    0    0    0
#> [4,]    0    1    0    0
#> [5,]    0    0    1    0
#> [6,]    0    0    0    1
#> 
mc_0chains(6, 4, 3)
#> $eigval
#> [1] 0 0 0
#> 
#> $len.block
#> [1] 1 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    1
#> [5,]    0
#> [6,]    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> $chains[[3]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    0
#> [6,]    1
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0
#> [4,]    1    0    0
#> [5,]    0    1    0
#> [6,]    0    0    1
#> 
mc_0chains(6, 4, 4)
#> $eigval
#> [1] 0 0
#> 
#> $len.block
#> [1] 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    0
#> [6,]    1
#> 
#> 
#> $eigvec
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    0
#> [5,]    1    0
#> [6,]    0    1
#> 
mc_0chains(6, 2, 2)
#> $eigval
#> [1] 0 0
#> 
#> $len.block
#> [1] 2 2
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    1
#> [4,]    0    0
#> [5,]    1    0
#> [6,]    0    0
#> 
#> $chains[[2]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    1
#> [5,]    0    0
#> [6,]    1    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    0    0
#> [2,]    0    0    0    0
#> [3,]    0    1    0    0
#> [4,]    0    0    0    1
#> [5,]    1    0    0    0
#> [6,]    0    0    1    0
#> 
mc_0chains(6, 2, 4)
#> $eigval
#> [1] 0 0
#> 
#> $len.block
#> [1] 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    0
#> [6,]    1
#> 
#> 
#> $eigvec
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    0
#> [5,]    1    0
#> [6,]    0    1
#> 
mc_0chains(6, 2, 3)
#> $eigval
#> [1] 0 0
#> 
#> $len.block
#> [1] 2 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    1
#> [5,]    0    0
#> [6,]    1    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0
#> [4,]    0    1    0
#> [5,]    0    0    1
#> [6,]    1    0    0
#> 
mc_0chains(6, 2, 3, list(matrix(1,              ncol=1, nrow=6)))
#> $eigval
#> [1] 0 0 0
#> 
#> $len.block
#> [1] 2 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    1
#> [5,]    0    0
#> [6,]    1    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    1
#> [2,]    1
#> [3,]    1
#> [4,]    1
#> [5,]    1
#> [6,]    1
#> 
#> $chains[[3]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    1    0
#> [2,]    0    0    1    0
#> [3,]    0    0    1    0
#> [4,]    0    1    1    0
#> [5,]    0    0    1    1
#> [6,]    1    0    1    0
#> 
mc_0chains(6, 2, 3, list(matrix(c(1,0,0,0,0,0), ncol=1, nrow=6)))
#> $eigval
#> [1] 0 0 0
#> 
#> $len.block
#> [1] 2 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    1
#> [5,]    0    0
#> [6,]    1    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    1
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    0
#> [6,]    0
#> 
#> $chains[[3]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    1    0
#> [2,]    0    0    0    0
#> [3,]    0    0    0    0
#> [4,]    0    1    0    0
#> [5,]    0    0    0    1
#> [6,]    1    0    0    0
#> 
mc_0chains(6, 2, 3, list(matrix(c(0,1,0,0,0,0), ncol=1, nrow=6)))
#> $eigval
#> [1] 0 0 0
#> 
#> $len.block
#> [1] 2 1 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    1
#> [5,]    0    0
#> [6,]    1    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    1
#> [3,]    0
#> [4,]    0
#> [5,]    0
#> [6,]    0
#> 
#> $chains[[3]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    0    0
#> [2,]    0    0    1    0
#> [3,]    0    0    0    0
#> [4,]    0    1    0    0
#> [5,]    0    0    0    1
#> [6,]    1    0    0    0
#> 
mc_0chains(6, 2, 3, list(matrix(c(0,0,0,0,0,1), ncol=1, nrow=6)))
#> $eigval
#> [1] 0 0
#> 
#> $len.block
#> [1] 2 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    1
#> [5,]    0    0
#> [6,]    1    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0
#> [4,]    0    1    0
#> [5,]    0    0    1
#> [6,]    1    0    0
#> 
mc_0chains(6, 2, 3, list(matrix(c(0,0,0,0,1,0), ncol=1, nrow=6)))
#> $eigval
#> [1] 0 0
#> 
#> $len.block
#> [1] 2 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1] [,2]
#> [1,]    0    0
#> [2,]    0    0
#> [3,]    0    0
#> [4,]    0    1
#> [5,]    0    0
#> [6,]    1    0
#> 
#> $chains[[2]]
#>      [,1]
#> [1,]    0
#> [2,]    0
#> [3,]    0
#> [4,]    0
#> [5,]    1
#> [6,]    0
#> 
#> 
#> $eigvec
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0
#> [4,]    0    1    0
#> [5,]    0    0    1
#> [6,]    1    0    0
#> 
mc_0chains(2, 2, 2,list(matrix(c(0,1),ncol=1,nrow=2)))
#> $eigval
#> [1] 0
#> 
#> $len.block
#> [1] 1
#> 
#> $chains
#> $chains[[1]]
#>      [,1]
#> [1,]    0
#> [2,]    1
#> 
#> 
#> $eigvec
#>      [,1]
#> [1,]    0
#> [2,]    1
#> 
mc_0chains(12,4,2)
#> $eigval
#> [1] 0 0 0 0
#> 
#> $len.block
#> [1] 3 3 2 2
#> 
#> $chains
#> $chains[[1]]
#>       [,1] [,2] [,3]
#>  [1,]    0    0    0
#>  [2,]    0    0    0
#>  [3,]    0    0    1
#>  [4,]    0    0    0
#>  [5,]    0    0    0
#>  [6,]    0    0    0
#>  [7,]    0    1    0
#>  [8,]    0    0    0
#>  [9,]    0    0    0
#> [10,]    0    0    0
#> [11,]    1    0    0
#> [12,]    0    0    0
#> 
#> $chains[[2]]
#>       [,1] [,2] [,3]
#>  [1,]    0    0    0
#>  [2,]    0    0    0
#>  [3,]    0    0    0
#>  [4,]    0    0    1
#>  [5,]    0    0    0
#>  [6,]    0    0    0
#>  [7,]    0    0    0
#>  [8,]    0    1    0
#>  [9,]    0    0    0
#> [10,]    0    0    0
#> [11,]    0    0    0
#> [12,]    1    0    0
#> 
#> $chains[[3]]
#>       [,1] [,2]
#>  [1,]    0    0
#>  [2,]    0    0
#>  [3,]    0    0
#>  [4,]    0    0
#>  [5,]    0    1
#>  [6,]    0    0
#>  [7,]    0    0
#>  [8,]    0    0
#>  [9,]    1    0
#> [10,]    0    0
#> [11,]    0    0
#> [12,]    0    0
#> 
#> $chains[[4]]
#>       [,1] [,2]
#>  [1,]    0    0
#>  [2,]    0    0
#>  [3,]    0    0
#>  [4,]    0    0
#>  [5,]    0    0
#>  [6,]    0    1
#>  [7,]    0    0
#>  [8,]    0    0
#>  [9,]    0    0
#> [10,]    1    0
#> [11,]    0    0
#> [12,]    0    0
#> 
#> 
#> $eigvec
#>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#>  [1,]    0    0    0    0    0    0    0    0    0     0
#>  [2,]    0    0    0    0    0    0    0    0    0     0
#>  [3,]    0    0    1    0    0    0    0    0    0     0
#>  [4,]    0    0    0    0    0    1    0    0    0     0
#>  [5,]    0    0    0    0    0    0    0    1    0     0
#>  [6,]    0    0    0    0    0    0    0    0    0     1
#>  [7,]    0    1    0    0    0    0    0    0    0     0
#>  [8,]    0    0    0    0    1    0    0    0    0     0
#>  [9,]    0    0    0    0    0    0    1    0    0     0
#> [10,]    0    0    0    0    0    0    0    0    1     0
#> [11,]    1    0    0    0    0    0    0    0    0     0
#> [12,]    0    0    0    1    0    0    0    0    0     0
#>