00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #if !defined (octave_DAEFunc_h)
00025 #define octave_DAEFunc_h 1
00026
00027 class Matrix;
00028 class ColumnVector;
00029
00030 class
00031 DAEFunc
00032 {
00033 public:
00034
00035 typedef ColumnVector (*DAERHSFunc) (const ColumnVector& x,
00036 const ColumnVector& xdot,
00037 double t, octave_idx_type& ires);
00038
00039
00040
00041
00042
00043 typedef Matrix (*DAEJacFunc) (const ColumnVector& x,
00044 const ColumnVector& xdot,
00045 double t, double cj);
00046
00047 DAEFunc (void)
00048 : fun (0), jac (0), reset (true) { }
00049
00050 DAEFunc (DAERHSFunc f)
00051 : fun (f), jac (0), reset (true) { }
00052
00053 DAEFunc (DAERHSFunc f, DAEJacFunc j)
00054 : fun (f), jac (j), reset (true) { }
00055
00056 DAEFunc (const DAEFunc& a)
00057 : fun (a.fun), jac (a.jac), reset (a.reset) { }
00058
00059 DAEFunc& operator = (const DAEFunc& a)
00060 {
00061 if (this != &a)
00062 {
00063 fun = a.fun;
00064 jac = a.jac;
00065 reset = a.reset;
00066 }
00067 return *this;
00068 }
00069
00070 ~DAEFunc (void) { }
00071
00072 DAERHSFunc function (void) const { return fun; }
00073
00074 DAEFunc& set_function (DAERHSFunc f)
00075 {
00076 fun = f;
00077 reset = true;
00078 return *this;
00079 }
00080
00081 DAEJacFunc jacobian_function (void) const { return jac; }
00082
00083 DAEFunc& set_jacobian_function (DAEJacFunc j)
00084 {
00085 jac = j;
00086 reset = true;
00087 return *this;
00088 }
00089
00090 protected:
00091
00092 DAERHSFunc fun;
00093 DAEJacFunc jac;
00094
00095
00096
00097
00098
00099
00100 bool reset;
00101 };
00102
00103 #endif
00104
00105
00106
00107
00108
00109