26 iscomplex = v2.iscomplex;
27 int hdim = iscomplex ? 2*dim : dim;
28 data =
new double[hdim];
29 for (
int j = 0; j < hdim; j++)
34 cout <<
"move constr" << endl;
36 iscomplex = v2.iscomplex;
37 int hdim = iscomplex ? 2*dim : dim;
38 data =
new double[hdim];
39 for (
int j = 0; j < hdim; j++)
43 : dim(adim), iscomplex(acomplex)
45 int hdim = iscomplex ? 2*dim : dim;
46 data =
new double[hdim];
55 iscomplex = v2.iscomplex;
56 int hdim = iscomplex ? 2*dim : dim;
58 data =
new double[hdim];
59 for (
int j = 0; j < hdim; j++)
64 int Dimension()
const {
return dim; }
65 bool IsComplex ()
const {
return iscomplex; }
67 double & ValueDouble(
int i = 0) {
return data[i]; }
68 complex<double> & ValueComplex (
int i = 0)
69 {
return reinterpret_cast<std::complex<double>*
>(data)[i]; }
71 const double & ValueDouble(
int i = 0)
const {
return data[i]; }
72 const std::complex<double> & ValueComplex (
int i = 0)
const
73 {
return reinterpret_cast<complex<double>*
>(data)[i]; }
76 template <
typename SCAL> SCAL Value (
int i)
const;
80 inline double GenericVariable::Value<double> (
int i)
const
82 if (iscomplex)
throw Exception (
"Value<double> called for complex variable");
86 inline std::complex<double> GenericVariable::Value<std::complex<double>> (
int i)
const
89 return complex<double> (data[2*i], data[2*i+1]);
91 return complex<double> (data[i]);
95 inline ostream &
operator<< (ostream & ost,
const GenericVariable & var)
98 for (
int i = 0; i < var.Dimension(); i++)
99 ost << var.ValueComplex(i) <<
", ";
101 for (
int i = 0; i < var.Dimension(); i++)
102 ost << var.ValueDouble(i) <<
", ";
126 ADD =
'+', SUB =
'-', MULT =
'*', DIV =
'/', LP =
'(', RP =
')',
129 VEC_ADD, VEC_SUB, VEC_SCAL_MULT, SCAL_VEC_MULT, VEC_VEC_MULT, VEC_SCAL_DIV, VEC_ELEM, VEC_DIM,
130 AND, OR, NOT, GREATER, LESS, GREATEREQUAL, LESSEQUAL, EQUAL,
131 CONSTANT, IMAG, VARIABLE, FUNCTION, GLOBVAR, GLOBGENVAR, END, STRING,
132 SIN, COS, TAN, ATAN, ATAN2, EXP, LOG, ABS, SIGN, SQRT, STEP,
133 BESSELJ0, BESSELY0, BESSELJ1, BESSELY1
149 bool Parse (istream & aist);
151 void DefineConstant (
const string & name,
double val);
153 void DefineGlobalVariable (
const string & name,
double * var);
155 void DefineGlobalVariable (
const string & name,
GenericVariable * var);
157 void DefineArgument (
const string & name,
int num,
int vecdim = 1,
bool iscomplex =
false);
160 double Eval (
const double * x = NULL)
const;
162 void Eval (
const double * x,
double * y,
int ydim)
const;
165 complex<double> Eval (
const complex<double> * x = NULL)
const;
167 void Eval (
const complex<double> * x, complex<double> * y,
int ydim)
const;
169 void Eval (
const complex<double> * x,
double * y,
int ydim)
const;
176 template <
typename TIN,
typename TCALC>
177 void Eval (
const TIN * x, TCALC * stack)
const;
181 bool IsComplex ()
const;
187 bool IsConstant ()
const;
189 double EvalConstant ()
const;
196 { program.Append (
step (val)); }
200 { program.Append (
step(varnum)); }
204 { program.Append (
step(dp)); }
208 { program.Append (
step(dp)); }
212 { program.Append (
step(op)); }
216 { program.Append (
step(fun)); }
219 void Print (ostream & ost)
const;
240 double (*fun) (double);
250 step (EVAL_TOKEN hop)
268 step (
const double * aglobvar)
274 step (
const GenericVariable * aglobvar)
280 step (
double (*fun) (
double))
297 : vecdim(1), isbool(
false), iscomplex(
false)
323 char string_value[1000];
325 int var_num, var_dim;
333 typedef double(*TFUNP) (double);
354 : argnum(-1), dim(1), iscomplex(
false) { ; }
355 argtype (
int aanum,
int adim = 1,
bool acomplex =
false)
356 : argnum(aanum), dim(adim), iscomplex(acomplex) { ; }
358 SymbolTable<argtype> arguments;
367 {
return num_value; }
375 bool GetVariableIsComplex()
const
376 {
return var_iscomplex; }
380 {
return string_value; }
383 void ReadNext(
bool optional =
true);
386 bool ToBool (
double x)
const {
return x > eps; }
387 bool ToBool (complex<double> x)
const {
return x.real() > eps; }
388 double CheckReal (
double x)
const {
return x; }
389 double CheckReal (complex<double> x)
const
391 if (x.imag() != 0) cerr <<
"illegal complex value" << endl;
395 double Abs (
double x)
const {
return std::fabs(x); }
396 double Abs (complex<double> x)
const {
return abs(x); }
Definition: evalfunc.hpp:290
void AddGlobVariable(const GenericVariable *dp)
push pointer to global double value.
Definition: evalfunc.hpp:207
bool IsResultComplex() const
is expression complex valued ?
Definition: evalfunc.hpp:184
short int vecdim
dimension of vector
Definition: evalfunc.hpp:246
const char * GetStringValue() const
returns identifier of last token
Definition: evalfunc.hpp:379
const double * globvar
a pointer to a global variable
Definition: evalfunc.hpp:234
the arguments passed to the function
Definition: evalfunc.hpp:347
void AddGlobVariable(const double *dp)
push pointer to global double value.
Definition: evalfunc.hpp:203
int GetVariableNumber() const
returns variable number of last token
Definition: evalfunc.hpp:370
int varnum
the input argument number varnum
Definition: evalfunc.hpp:238
int Dimension() const
vector dimension of result
Definition: evalfunc.hpp:192
istream * ist
parse from stream
Definition: evalfunc.hpp:316
SymbolTable< double * > globvariables
registered variables
Definition: evalfunc.hpp:341
void AddVariable(int varnum)
push variable x[varnum-1].
Definition: evalfunc.hpp:199
const GenericVariable * globgenvar
a pointer to a global variable
Definition: evalfunc.hpp:236
double(* fun)(double)
a pointer to a unary function
Definition: evalfunc.hpp:240
one step of evaluation
Definition: evalfunc.hpp:223
double GetNumValue() const
returns num_value of last token
Definition: evalfunc.hpp:366
static SymbolTable< TFUNP > functions
registered functions
Definition: evalfunc.hpp:335
double val
a constant value
Definition: evalfunc.hpp:232
Array< step > program
the evaluation sequence
Definition: evalfunc.hpp:288
the data
Definition: evalfunc.hpp:229
void AddOperation(EVAL_TOKEN op)
push operation.
Definition: evalfunc.hpp:211
Numerical expression parser.
Definition: evalfunc.hpp:120
Definition: evalfunc.hpp:17
SymbolTable< double > constants
registered constants
Definition: evalfunc.hpp:338
namespace for standard data types and algorithms.
Definition: ngstd.hpp:55
int GetVariableDimension() const
returns dimension of variable of last token
Definition: evalfunc.hpp:373
SymbolTable< GenericVariable * > genericvariables
registered variables
Definition: evalfunc.hpp:343
ostream & operator<<(ostream &ost, const AutoDiffDiff< D, SCAL > &x)
Prints AudoDiffDiff.
Definition: autodiffdiff.hpp:256
void AddFunction(double(*fun)(double))
push function call.
Definition: evalfunc.hpp:215
EVAL_TOKEN GetToken() const
returns last token
Definition: evalfunc.hpp:362
void AddConstant(double val)
push constant on stack.
Definition: evalfunc.hpp:195