6 #include "GeoGenericFunctions/Pi.h" 7 #include "GeoGenericFunctions/Sigma.h" 8 #include "GeoGenericFunctions/FixedConstant.h" 12 FUNCTION_OBJECT_IMP(Pi)
14 void Pi::accumulate( const AbsFunction & fcn) {
15 _fcn.push_back(fcn.clone());
22 Pi::Pi(
const Pi & right) : AbsFunction(right)
24 for (
size_t i=0; i<right._fcn.size();i++) {
25 _fcn.push_back(right._fcn[i]->clone());
29 unsigned int Pi::dimensionality()
const {
30 if (_fcn.size()==0)
throw std::runtime_error(
"Cannot determine dimensionality from empty product");
31 return _fcn[0]->dimensionality();
36 for (
size_t i=0; i<_fcn.size();i++) {
41 double Pi::operator ()(
double x)
const 44 for (
size_t i=0;i<_fcn.size();i++) retVal *= (*_fcn[i])(x);
49 double Pi::operator ()(
const Argument & x)
const 52 for (
size_t i=0;i<_fcn.size();i++) retVal *= (*_fcn[i])(x);
58 Derivative Pi::partial(
unsigned int index)
const {
61 fPrime.accumulate(FixedConstant(0.0));
62 for (
size_t i=0;i<_fcn.size();i++) {
64 subproductI.accumulate(FixedConstant(1.0));
65 for (
size_t j=0;j<_fcn.size();j++) {
66 if (j!=i) subproductI.accumulate(*_fcn[i]);
68 fPrime.accumulate(_fcn[i]->partial(index)*subproductI);
70 return Derivative(&fPrime);