7 #include "GeoGenericFunctions/AbsFunction.h" 8 #include "GeoGenericFunctions/ConstTimesFunction.h" 9 #include "GeoGenericFunctions/ConstOverFunction.h" 10 #include "GeoGenericFunctions/ConstPlusFunction.h" 11 #include "GeoGenericFunctions/ConstMinusFunction.h" 12 #include "GeoGenericFunctions/FunctionSum.h" 13 #include "GeoGenericFunctions/FunctionDifference.h" 14 #include "GeoGenericFunctions/FunctionProduct.h" 15 #include "GeoGenericFunctions/FunctionQuotient.h" 16 #include "GeoGenericFunctions/FunctionNegation.h" 17 #include "GeoGenericFunctions/FunctionDirectProduct.h" 18 #include "GeoGenericFunctions/FixedConstant.h" 19 #include "GeoGenericFunctions/FunctionNumDeriv.h" 20 #include "GeoGenericFunctions/Variable.h" 21 #include "GeoGenericFunctions/FunctionNoop.h" 22 #include "GeoGenericFunctions/ParameterComposition.h" 25 AbsFunction::AbsFunction() {
28 AbsFunction::~AbsFunction() {
31 AbsFunction::AbsFunction(
const AbsFunction &) {
34 FunctionComposition AbsFunction::operator () (
const AbsFunction &
function)
const {
35 return FunctionComposition(
this, &
function);
38 ParameterComposition AbsFunction::operator() (
const AbsParameter &p)
const {
39 return ParameterComposition(
this, &p);
42 Derivative AbsFunction::partial(
unsigned int index)
const {
43 FunctionNumDeriv fPrime(
this,index);
44 return Derivative(&fPrime);
48 Derivative AbsFunction::partial(
const Variable &v)
const {
49 return partial(v.index());
52 Derivative AbsFunction::prime()
const {
53 if (dimensionality()!=1)
throw std::runtime_error(
"AbsFunction::prime() called for a function of more than one variable");
57 FunctionSum operator + (
const AbsFunction & a,
const AbsFunction & b) {
58 return FunctionSum(&a,&b);
61 FunctionDifference operator - (
const AbsFunction & a,
const AbsFunction & b) {
62 return FunctionDifference(&a,&b);
65 FunctionProduct operator * (
const AbsFunction & a,
const AbsFunction & b) {
66 return FunctionProduct(&a,&b);
69 FunctionQuotient operator / (
const AbsFunction & a,
const AbsFunction & b) {
70 return FunctionQuotient(&a,&b);
74 FunctionNegation operator - (
const AbsFunction & a) {
75 return FunctionNegation(&a);
78 unsigned int AbsFunction::dimensionality()
const {
82 FunctionDirectProduct operator % (
const AbsFunction & a,
const AbsFunction & b) {
83 return FunctionDirectProduct(&a,&b);
86 ConstTimesFunction operator * (
const AbsFunction &op2,
double c) {
87 return ConstTimesFunction(c, &op2);
90 ConstPlusFunction operator + (
const AbsFunction &op2,
double c) {
91 return ConstPlusFunction(c,&op2);
94 ConstPlusFunction operator - (
const AbsFunction &op2,
double c) {
95 return ConstPlusFunction(-c, &op2);
98 ConstTimesFunction operator / (
const AbsFunction &op2,
double c) {
99 return ConstTimesFunction(1/c,&op2);
103 ConstTimesFunction operator * (
double c,
const AbsFunction &op2) {
104 return ConstTimesFunction(c,&op2);
107 ConstPlusFunction operator + (
double c,
const AbsFunction &op2) {
108 return ConstPlusFunction(c,&op2);
111 ConstMinusFunction operator - (
double c,
const AbsFunction &op2) {
112 return ConstMinusFunction(c,&op2);
115 ConstOverFunction operator / (
double c,
const AbsFunction &op2) {
116 return ConstOverFunction(c,&op2);
120 FunctionTimesParameter operator * (
const AbsFunction &f,
const AbsParameter & p) {
121 return FunctionTimesParameter(&p, &f);
124 FunctionPlusParameter operator + (
const AbsFunction &f,
const AbsParameter & p) {
125 return FunctionPlusParameter(&p, &f);
128 FunctionPlusParameter operator - (
const AbsFunction &f,
const AbsParameter & p) {
129 GENPARAMETER MinusP = -p;
130 return FunctionPlusParameter(&MinusP, &f);
134 FunctionTimesParameter operator / (
const AbsFunction &f,
const AbsParameter & p) {
135 GENPARAMETER oneOverP = 1.0/p;
136 return FunctionTimesParameter(&oneOverP, &f);
139 FunctionTimesParameter operator * (
const AbsParameter & p,
const AbsFunction &f) {
140 return FunctionTimesParameter(&p, &f);
143 FunctionPlusParameter operator + (
const AbsParameter & p,
const AbsFunction &f) {
144 return FunctionPlusParameter(&p, &f);
147 FunctionPlusParameter operator - (
const AbsParameter & p,
const AbsFunction &f) {
148 GENFUNCTION MinusF = -f;
149 return FunctionPlusParameter(&p, &MinusF);
152 FunctionTimesParameter operator / (
const AbsParameter & p,
const AbsFunction &f) {
153 GENFUNCTION oneOverF = 1.0/f;
154 return FunctionTimesParameter(&p, &oneOverF);