20#ifndef _QUADRATIC_FUNCTION_H_
21#define _QUADRATIC_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)>;
34 double a0{0}, a1{0}, a2;
38 QuadraticFunction(
double a0_,
double a1_,
double a2_) : a0(a0_), a1(a1_), a2(a2_) { }
39 void seta0(
double a0_) { a0 = a0_; }
40 void seta1(
double a1_) { a1 = a1_; }
41 void seta2(
double a2_) { a2 = a2_; }
42 int getArgSize()
const override {
return 1; }
43 std::pair<int, int> getRetSize()
const override {
return std::make_pair(1,1); }
44 Ret operator()(
const Arg &x_)
override {
48 typename B::DRetDArg parDer(
const Arg &x_)
override {
52 typename B::DRetDArg parDerDirDer(
const Arg &xDir_,
const Arg &x)
override {
56 void initializeUsingXML(xercesc::DOMElement *element)
override {
57 xercesc::DOMElement *e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"a0");
58 if(e) seta0(MBXMLUtils::E(e)->getText<double>());
59 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"a1");
60 if(e) seta1(MBXMLUtils::E(e)->getText<double>());
61 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"a2");
62 seta2(MBXMLUtils::E(e)->getText<double>());
Definition: function.h:53
Definition: quadratic_function.h:28
namespace MBSim
Definition: bilateral_constraint.cc:30