Extend multi-companion eigenvectors
mc_chain_extend.Rd
Extend Jordan chains of a multi-companion matrix to higher dimension and complete them to a full system by adding eigenchains for zero eigenvalues.
Arguments
- ev
eigenvalues and eigenvectors, a list with components
values
andvectors
.- newdim
the new dimension of the vectors.
Details
The eigenvectors of a multi-companion matrix have a special structure. This function extends the supplied eigenvectors to be eigenvectors of a higher-dimensional multi-companion matrix of the same multi-companion order with the same top rows extended with zeroes.
ev
is a list with components values
, vectors
and
possibly others. In particular, ev
may be the value returned by
a call to the base function eigen()
. A component
len.block
may be used to specify the lengths of the Jordan
chains, by default all are of length one.
The function handles also the case when only the first mo.col
columns of the top of the original multi-companion matrix are
non-zero. This may be specified by a component mo.col
in
ev
, otherwise mo.col
is set to the dimension of the
space spanned by the non-zero eigenvalues.
When mo.col
is smaller than the multi-companion order, the
information in the eigenvectors is not sufficient to extend them. The
missing entries are supplied via the argument F0bot
(TODO: describe!).
Chains corresponding to zero eigenvalues come last in the result.
References
Boshnakov GN (2002). “Multi-companion matrices.” Linear Algebra Appl., 354, 53--83. ISSN 0024-3795, doi:10.1016/S0024-3795(01)00475-X .
Boshnakov GN, Iqelan BM (2009). “Generation of time series models with given spectral properties.” J. Time Series Anal., 30(3), 349--368. ISSN 0143-9782, doi:10.1111/j.1467-9892.2009.00617.x .
See also
the main work is done by mC.non0chain.extend
and
mc_0chains
.
Examples
ev <- make_mcchains(eigval = c(1, 0.5), co = cbind(c(1,1), c(1, -1)), dim = 4,
mo.col = 2,
len.block = c(1, 1))
ev
#> $eigval
#> [1] 1.0 0.5
#>
#> $len.block
#> [1] 1 1
#>
#> $mo
#> [1] 2
#>
#> $eigvec
#> [,1] [,2]
#> [1,] 1 0.5
#> [2,] 1 -0.5
#> [3,] 1 1.0
#> [4,] 1 -1.0
#>
#> $co
#> [,1] [,2]
#> [1,] 1 1
#> [2,] 1 -1
#>
#> $mo.col
#> [1] 2
#>
## extend evecs in ev to the requested dim and complete with chains for eval 0.
mc_chain_extend(ev = ev, newdim = 6)
#> $mo
#> [1] 2
#>
#> $mo.col
#> [1] 2
#>
#> $eigval
#> [1] 1.0 0.5 0.0 0.0
#>
#> $len.block
#> [1] 1 1 2 2
#>
#> $eigvec
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 1 0.5 0 0 0 0
#> [2,] 1 -0.5 0 0 0 0
#> [3,] 1 1.0 0 1 0 0
#> [4,] 1 -1.0 0 0 0 1
#> [5,] 1 2.0 1 0 0 0
#> [6,] 1 -2.0 0 0 1 0
#>
#> $co
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 1 2 1 0 0 0
#> [2,] 1 -2 0 0 1 0
#>
mc_chain_extend(ev = ev, newdim = 7)
#> $mo
#> [1] 2
#>
#> $mo.col
#> [1] 2
#>
#> $eigval
#> [1] 1.0 0.5 0.0 0.0
#>
#> $len.block
#> [1] 1 1 3 2
#>
#> $eigvec
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 1 0.5 0 0 0 0 0
#> [2,] 1 -0.5 0 0 0 0 0
#> [3,] 1 1.0 0 0 1 0 0
#> [4,] 1 -1.0 0 0 0 0 1
#> [5,] 1 2.0 0 1 0 0 0
#> [6,] 1 -2.0 0 0 0 1 0
#> [7,] 1 4.0 1 0 0 0 0
#>
#> $co
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 1 -2 0 0 0 1 0
#> [2,] 1 4 1 0 0 0 0
#>