20#ifndef _MULTIVARIATE_LINEAR_FUNCTION_H_
21#define _MULTIVARIATE_LINEAR_FUNCTION_H_
23#include "mbsim/functions/function.h"
24#include "mbsim/utils/utils.h"
30 template<
typename Ret,
typename Arg>
32 using B = fmatvec::Function<Ret(Arg)>;
36 fmatvec::RowVecV zero;
43 void seta0(
double a0_) { a0 = a0_; }
44 void seta1(
const fmatvec::RowVecV &a1_) {
46 zero.resize(a1.size(), fmatvec::INIT, 0.0);
48 void seta1(
const fmatvec::VecV &a1_) { seta1(a1_.T()); }
49 std::pair<int, int> getRetSize()
const override {
return std::make_pair(1,1); }
50 Ret operator()(
const Arg &x)
override {
53 typename B::DRetDArg parDer(
const Arg &x)
override {
56 typename B::DRetDArg parDerDirDer(
const Arg &xDir,
const Arg &x)
override {
59 void initializeUsingXML(xercesc::DOMElement *element)
override {
60 Function<Ret(Arg)>::initializeUsingXML(element);
61 xercesc::DOMElement *e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"a0");
62 if(e) seta0(MBXMLUtils::E(e)->getText<double>());
63 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"a1");
64 seta1(MBXMLUtils::E(e)->getText<fmatvec::VecV>());
Definition: function.h:53
Definition: multivariate_linear_function.h:28
namespace MBSim
Definition: bilateral_constraint.cc:30