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