MUQ  0.4.3
CompanionMatrix.cpp
Go to the documentation of this file.
2 
3 using namespace muq::Modeling;
4 
5 
6 
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 
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 
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 }
virtual Eigen::MatrixXd GetMatrix() override
virtual Eigen::MatrixXd ApplyTranspose(Eigen::Ref< const Eigen::MatrixXd > const &x) override
virtual Eigen::MatrixXd Apply(Eigen::Ref< const Eigen::MatrixXd > const &x) override