20 #ifndef _POLYNOM_FUNCTION_H_
21 #define _POLYNOM_FUNCTION_H_
23 #include "mbsim/functions/function.h"
29 template<
typename Ret,
typename Arg>
39 add.resize(ad.size()-1);
40 for(
int i=1; i<a.size(); i++)
41 ad.e(i-1) = double(i)*a.e(i);
42 for(
int i=1; i<ad.size(); i++)
43 add.e(i-1) = double(i)*ad(i);
46 Ret operator()(
const Arg &x_) {
48 double value=a(a.size()-1);
49 for (
int i=
int(a.size())-2; i>-1; i--)
53 typename B::DRetDArg parDer(
const Arg &x_) {
54 double x = ToDouble<Arg>::cast(x_);
55 double value=ad(ad.size()-1);
56 for (
int i=
int(ad.size())-2; i>-1; i--)
57 value=value*x+ad.e(i);
58 return FromDouble<Ret>::cast(value);
60 typename B::DRetDArg parDerDirDer(
const Arg &xDir_,
const Arg &x_) {
61 double x = ToDouble<Arg>::cast(x_);
62 double xDir = ToDouble<Arg>::cast(xDir_);
63 double value=add(add.size()-1);
64 for (
int i=
int(add.size())-2; i>-1; i--)
65 value=value*x+add.e(i);
66 return FromDouble<Ret>::cast(value*xDir);
68 Ret parDerParDer(
const double &x) {
69 double value=add(add.size()-1);
70 for (
int i=
int(add.size())-2; i>-1; i--)
71 value=value*x+add.e(i);
72 return FromDouble<Ret>::cast(value);
75 void initializeUsingXML(xercesc::DOMElement *element) {
76 a = Element::getVec(MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"coefficients"));
80 fmatvec::VecV a, ad, add;
Definition: element.h:101
Definition: polynom_function.h:27
InitStage
The stages of the initialization.
Definition: element.h:97
Definition: planar_contour.h:31
Definition: element.h:100
void init(Element::InitStage stage)
plots time series header
Definition: polynom_function.h:35