23 #ifndef O2SCL_ODE_FUNCT_H
24 #define O2SCL_ODE_FUNCT_H
32 #include <boost/numeric/ublas/vector.hpp>
34 #include <o2scl/fparser.h>
36 #ifndef DOXYGEN_NO_O2NS
42 typedef std::function<int(
double,
size_t,
50 template <
class vec_y_t=boost::numeric::ublas::vector<
double>,
51 class vec_dydx_t=vec_y_t>
58 std::string var,
size_t np=0, std::string parms=
"") {
63 fpw[i].Parse(formulas[i],funcs+
","+var);
69 fpw[i].Parse(formulas[i],funcs+
","+var+
","+parms);
90 int set_function(
size_t nv, std::string *formulas, std::string funcs,
91 std::string var,
size_t np=0, std::string parms=
"") {
99 fpw[i].Parse(formulas[i],funcs+
","+var);
105 fpw[i].Parse(formulas[i],funcs+
","+var+
","+parms);
122 for(
size_t i=0;i<
st_np;i++) {
128 virtual int operator()(
double x,
size_t nv,
const vec_y_t &y,
132 double *all=
new double[nv+1];
133 for(i=0;i<nv;i++) all[i]=y[i];
135 for(i=0;i<
st_nv;i++) {
136 dydx[i]=
fpw[i].Eval(all);
140 double *all=
new double[
st_np+st_nv+1];
141 for(i=0;i<
st_nv;i++) all[i]=y[i];
143 for(i=st_nv+1;i<
st_np+st_nv+1;i++) all[i]=
arr[i-st_nv-1];
144 for(i=0;i<
st_nv;i++) {
145 dydx[i]=
fpw[i].Eval(all);
152 #ifndef DOXYGEN_INTERNAL
185 #ifndef DOXYGEN_NO_O2NS
ode_funct11_strings(size_t nv, std::string *formulas, std::string funcs, std::string var, size_t np=0, std::string parms="")
Specify the string and the parameters.
Parse a mathematical function specified in a string.
void set_parms(vec_p_t &p)
Set the values of the auxilliary parameters that were specified in 'parms' in the constructor...
int set_function(size_t nv, std::string *formulas, std::string funcs, std::string var, size_t np=0, std::string parms="")
Specify the string and the parameters.
double * arr
The parameters.
std::string st_parms
The parameters.
One-dimensional function from strings.
std::string * st_forms
The formulas.
FunctionParser * fpw
The formula parser.
std::string st_var
The variables.
size_t st_np
The number of parameters.
std::string st_funcs
The function names.
size_t st_nv
The number of variables.
std::function< int(double, size_t, const boost::numeric::ublas::vector< double > &, boost::numeric::ublas::vector< double > &)> ode_funct11
Ordinary differential equation function.