Generate eigenchains for zero eigenvalues
mc_0chains.Rd
Generate eigenchains for zero eigenvalues of multi-companion matrices
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
.
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
#>