Skip to contents

Generate eigenchains for zero eigenvalues of multi-companion matrices

Usage

mc_0chains(dim, mo, mo.col, vec0, flagtriang = TRUE)

Arguments

dim

dimension of the matrix

mo

multi-companion order

mo.col

number of (non-zero) structural columns

vec0

a list of Jordan chains for non-structural zero eigenvalues, see details

flagtriang

triangulase the vectors?

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.

Author

Georgi N. Boshnakov

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).

See also

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
#>