1 #include "MUQ/Modeling/LinearAlgebra/CompanionMatrix.h"
2 
3 using namespace muq::Modeling;
4 
5 
6 
Apply(Eigen::Ref<const Eigen::MatrixXd> const & x)7 Eigen::MatrixXd CompanionMatrix::Apply(Eigen::Ref<const Eigen::MatrixXd> const& x)
8 {
9     assert(x.rows() == ncols);
10 
11     Eigen::MatrixXd output(nrows, x.cols());
12 
13     output.block(0, 0, nrows-1, x.cols()) = x.block(1,0,nrows-1, x.cols());
14     output.row(nrows-1) = lastRow.transpose()*x;
15 
16     return output;
17 }
18 
19 
ApplyTranspose(Eigen::Ref<const Eigen::MatrixXd> const & x)20 Eigen::MatrixXd CompanionMatrix::ApplyTranspose(Eigen::Ref<const Eigen::MatrixXd> const& x)
21 {
22     assert(x.rows() == nrows);
23 
24     Eigen::MatrixXd output = Eigen::MatrixXd::Zero(ncols, x.cols());
25 
26     output.block(1, 0, ncols-1, x.cols()) = x.block(0,0,ncols-1,x.cols());
27     output += lastRow * x.row(x.rows()-1);
28 
29     return output;
30 }
31 
32 
GetMatrix()33 Eigen::MatrixXd CompanionMatrix::GetMatrix()
34 {
35 
36     Eigen::MatrixXd output = Eigen::MatrixXd::Zero(nrows, ncols);
37     output.block(0,1,nrows-1,nrows-1) = Eigen::MatrixXd::Identity(nrows-1,nrows-1);
38     output.row(nrows-1) = lastRow;
39 
40     return output;
41 }
42