MUQ  0.4.3
HessianOperator.cpp
Go to the documentation of this file.
2 
3 using namespace muq::Modeling;
4 
5 
6 
7 HessianOperator::HessianOperator(std::shared_ptr<ModPiece> const& pieceIn,
8  std::vector<Eigen::VectorXd> const& inputsIn,
9  unsigned int outWrtIn,
10  unsigned int inWrt1In,
11  unsigned int inWrt2In,
12  Eigen::VectorXd const& sensIn,
13  double scaleIn,
14  double nuggetIn) : LinearOperator(pieceIn->inputSizes(inWrt1In), pieceIn->inputSizes(inWrt2In)),
15  basePiece(pieceIn),
16  inputs(inputsIn),
17  outWrt(outWrtIn),
18  inWrt1(inWrt1In),
19  inWrt2(inWrt2In),
20  sens(sensIn),
21  scale(scaleIn),
22  nugget(nuggetIn)
23 {
24  assert(basePiece);
25  assert(basePiece->inputSizes.size()>inWrt1In);
26  assert(basePiece->inputSizes.size()>inWrt2In);
27  assert(basePiece->outputSizes.size()>outWrt);
28  assert(sens.size()==basePiece->outputSizes(outWrt));
29  assert(nugget>=0.0);
30 }
31 
32 Eigen::MatrixXd HessianOperator::Apply(Eigen::Ref<const Eigen::MatrixXd> const& x)
33 {
34  Eigen::MatrixXd output(basePiece->inputSizes(inWrt2),x.cols());
35  Eigen::VectorXd col;
36  for(unsigned int i=0; i<x.cols(); ++i){
37  col = x.col(i);
38  output.col(i) = nugget*x.col(i) + scale*basePiece->ApplyHessian(outWrt,inWrt1,inWrt2, inputs, sens, col);
39  }
40  return output;
41 }
42 
43 Eigen::MatrixXd HessianOperator::ApplyTranspose(Eigen::Ref<const Eigen::MatrixXd> const& x)
44 {
45  assert(inWrt1==inWrt2);
46  return Apply(x);// Assume symmetry based on Scharwz theorem
47 }
HessianOperator(std::shared_ptr< ModPiece > const &pieceIn, std::vector< Eigen::VectorXd > const &inputsIn, unsigned int outWrtIn, unsigned int inWrt1In, unsigned int inWrt2In, Eigen::VectorXd const &sensIn, double scaleIn=1.0, double nuggetIn=0.0)
const Eigen::VectorXd sens
const std::vector< Eigen::VectorXd > inputs
virtual Eigen::MatrixXd Apply(Eigen::Ref< const Eigen::MatrixXd > const &x) override
std::shared_ptr< ModPiece > basePiece
virtual Eigen::MatrixXd ApplyTranspose(Eigen::Ref< const Eigen::MatrixXd > const &x) override
Generic linear operator base class.