Go to the documentation of this file.00001
00002
00003
00004 #if !defined (octave_DASRT_options_h)
00005 #define octave_DASRT_options_h 1
00006
00007 #include <cfloat>
00008 #include <cmath>
00009
00010 #include <DAERT.h>
00011
00012
00013 class
00014 DASRT_options
00015 {
00016 public:
00017
00018 DASRT_options (void)
00019 : x_absolute_tolerance (),
00020 x_relative_tolerance (),
00021 x_initial_step_size (),
00022 x_maximum_order (),
00023 x_maximum_step_size (),
00024 x_step_limit (),
00025 reset ()
00026 {
00027 init ();
00028 }
00029
00030 DASRT_options (const DASRT_options& opt)
00031 : x_absolute_tolerance (opt.x_absolute_tolerance),
00032 x_relative_tolerance (opt.x_relative_tolerance),
00033 x_initial_step_size (opt.x_initial_step_size),
00034 x_maximum_order (opt.x_maximum_order),
00035 x_maximum_step_size (opt.x_maximum_step_size),
00036 x_step_limit (opt.x_step_limit),
00037 reset (opt.reset)
00038 { }
00039
00040 DASRT_options& operator = (const DASRT_options& opt)
00041 {
00042 if (this != &opt)
00043 {
00044 x_absolute_tolerance = opt.x_absolute_tolerance;
00045 x_relative_tolerance = opt.x_relative_tolerance;
00046 x_initial_step_size = opt.x_initial_step_size;
00047 x_maximum_order = opt.x_maximum_order;
00048 x_maximum_step_size = opt.x_maximum_step_size;
00049 x_step_limit = opt.x_step_limit;
00050 reset = opt.reset;
00051 }
00052
00053 return *this;
00054 }
00055
00056 ~DASRT_options (void) { }
00057
00058 void init (void)
00059 {
00060 x_absolute_tolerance.resize (dim_vector (1, 1));
00061 x_absolute_tolerance(0) = ::sqrt (DBL_EPSILON);
00062 x_relative_tolerance.resize (dim_vector (1, 1));
00063 x_relative_tolerance(0) = ::sqrt (DBL_EPSILON);
00064 x_initial_step_size = -1.0;
00065 x_maximum_order = -1;
00066 x_maximum_step_size = -1.0;
00067 x_step_limit = -1;
00068 reset = true;
00069 }
00070
00071 void set_options (const DASRT_options& opt)
00072 {
00073 x_absolute_tolerance = opt.x_absolute_tolerance;
00074 x_relative_tolerance = opt.x_relative_tolerance;
00075 x_initial_step_size = opt.x_initial_step_size;
00076 x_maximum_order = opt.x_maximum_order;
00077 x_maximum_step_size = opt.x_maximum_step_size;
00078 x_step_limit = opt.x_step_limit;
00079 reset = opt.reset;
00080 }
00081
00082 void set_default_options (void) { init (); }
00083
00084 void set_absolute_tolerance (double val)
00085 {
00086 x_absolute_tolerance.resize (dim_vector (1, 1));
00087 x_absolute_tolerance(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON);
00088 reset = true;
00089 }
00090
00091 void set_absolute_tolerance (const Array<double>& val)
00092 { x_absolute_tolerance = val; reset = true; }
00093
00094 void set_relative_tolerance (double val)
00095 {
00096 x_relative_tolerance.resize (dim_vector (1, 1));
00097 x_relative_tolerance(0) = (val > 0.0) ? val : ::sqrt (DBL_EPSILON);
00098 reset = true;
00099 }
00100
00101 void set_relative_tolerance (const Array<double>& val)
00102 { x_relative_tolerance = val; reset = true; }
00103
00104 void set_initial_step_size (double val)
00105 { x_initial_step_size = (val >= 0.0) ? val : -1.0; reset = true; }
00106
00107 void set_maximum_order (octave_idx_type val)
00108 { x_maximum_order = val; reset = true; }
00109
00110 void set_maximum_step_size (double val)
00111 { x_maximum_step_size = (val >= 0.0) ? val : -1.0; reset = true; }
00112
00113 void set_step_limit (octave_idx_type val)
00114 { x_step_limit = (val >= 0) ? val : -1; reset = true; }
00115 Array<double> absolute_tolerance (void) const
00116 { return x_absolute_tolerance; }
00117
00118 Array<double> relative_tolerance (void) const
00119 { return x_relative_tolerance; }
00120
00121 double initial_step_size (void) const
00122 { return x_initial_step_size; }
00123
00124 octave_idx_type maximum_order (void) const
00125 { return x_maximum_order; }
00126
00127 double maximum_step_size (void) const
00128 { return x_maximum_step_size; }
00129
00130 octave_idx_type step_limit (void) const
00131 { return x_step_limit; }
00132
00133 private:
00134
00135 Array<double> x_absolute_tolerance;
00136 Array<double> x_relative_tolerance;
00137 double x_initial_step_size;
00138 octave_idx_type x_maximum_order;
00139 double x_maximum_step_size;
00140 octave_idx_type x_step_limit;
00141
00142 protected:
00143
00144 bool reset;
00145 };
00146
00147 #endif