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_ODEFunc_h)
00025 #define octave_ODEFunc_h 1
00026
00027 class Matrix;
00028 class ColumnVector;
00029
00030 class
00031 ODEFunc
00032 {
00033 public:
00034
00035 typedef ColumnVector (*ODERHSFunc) (const ColumnVector&, double);
00036 typedef Matrix (*ODEJacFunc) (const ColumnVector&, double);
00037
00038 ODEFunc (void)
00039 : fun (0), jac (0), reset (true) { }
00040
00041 ODEFunc (ODERHSFunc f)
00042 : fun (f), jac (0), reset (true) { }
00043
00044 ODEFunc (ODERHSFunc f, ODEJacFunc j)
00045 : fun (f), jac (j), reset (true) { }
00046
00047 ODEFunc (const ODEFunc& a)
00048 : fun (a.fun), jac (a.jac), reset (true) { }
00049
00050 ODEFunc& operator = (const ODEFunc& a)
00051 {
00052 if (this != &a)
00053 {
00054 fun = a.fun;
00055 jac = a.jac;
00056 reset = a.reset;
00057 }
00058 return *this;
00059 }
00060
00061 ~ODEFunc (void) { }
00062
00063 ODERHSFunc function (void) const { return fun; }
00064
00065 ODEFunc& set_function (ODERHSFunc f)
00066 {
00067 fun = f;
00068 reset = true;
00069 return *this;
00070 }
00071
00072 ODEJacFunc jacobian_function (void) const { return jac; }
00073
00074 ODEFunc& set_jacobian_function (ODEJacFunc j)
00075 {
00076 jac = j;
00077 reset = true;
00078 return *this;
00079 }
00080
00081 protected:
00082
00083 ODERHSFunc fun;
00084 ODEJacFunc jac;
00085
00086
00087
00088
00089
00090
00091 bool reset;
00092 };
00093
00094 #endif
00095
00096
00097
00098
00099
00100