GNU Octave  8.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ODE.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 1993-2023 The Octave Project Developers
4 //
5 // See the file COPYRIGHT.md in the top-level directory of this
6 // distribution or <https://octave.org/copyright/>.
7 //
8 // This file is part of Octave.
9 //
10 // Octave is free software: you can redistribute it and/or modify it
11 // under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // Octave is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with Octave; see the file COPYING. If not, see
22 // <https://www.gnu.org/licenses/>.
23 //
24 ////////////////////////////////////////////////////////////////////////
25 
26 #if ! defined (octave_ODE_h)
27 #define octave_ODE_h 1
28 
29 #include "octave-config.h"
30 
31 #include "ODEFunc.h"
32 #include "base-de.h"
33 #include "dMatrix.h"
34 
35 class
36 ODE : public base_diff_eqn, public ODEFunc
37 {
38 public:
39 
40  ODE (void)
41  : base_diff_eqn (), ODEFunc () { }
42 
43  ODE (const ColumnVector& s, double tm, const ODEFunc& f)
44  : base_diff_eqn (s, tm), ODEFunc (f) { }
45 
46  ODE (const ODE& a)
47  : base_diff_eqn (a), ODEFunc (a) { }
48 
49  ODE& operator = (const ODE& a)
50  {
51  if (this != &a)
52  {
55  }
56  return *this;
57  }
58 
59  virtual ~ODE (void) = default;
60 
61  // Derived classes must provide functions to actually do the
62  // integration.
63 
64  // Return the vector of states at output time t.
65  virtual ColumnVector do_integrate (double tt) = 0;
66 
67  // Return a matrix of states at each output time specified by t.
68  // The rows of the result matrix should each correspond to a new
69  // output time.
70  virtual Matrix do_integrate (const ColumnVector& tt) = 0;
71 
72  virtual Matrix do_integrate (const ColumnVector& tt,
73  const ColumnVector& ttcrit) = 0;
74 
75  // Lots of ways to call the single function and optionally set and
76  // get additional information.
77 
78  // Integrate to t from current point.
79  virtual ColumnVector integrate (double tt)
80  { return do_integrate (tt); }
81 
82  // Set new x0, t0 and integrate to t.
83  virtual ColumnVector integrate (const ColumnVector& x0, double t0, double tt)
84  {
85  initialize (x0, t0);
86  return do_integrate (tt);
87  }
88 
89  // Integrate from current point and return output at all points
90  // specified by t.
91  virtual Matrix integrate (const ColumnVector& tt)
92  { return do_integrate (tt); }
93 
94  // Set new x0, t0 and integrate to return output at all points
95  // specified by t.
96  virtual Matrix integrate (const ColumnVector& x0, double t0,
97  const ColumnVector& tt)
98  {
99  initialize (x0, t0);
100  return do_integrate (tt);
101  }
102 
103  // Integrate from current point and return output at all points
104  // specified by t.
105  virtual Matrix integrate (const ColumnVector& tt,
106  const ColumnVector& ttcrit)
107  { return do_integrate (tt, ttcrit); }
108 
109  // Set new x0, t0 and integrate to return output at all points
110  // specified by t.
111  virtual Matrix integrate (const ColumnVector& x0, double t0,
112  const ColumnVector& tt,
113  const ColumnVector& ttcrit)
114  {
115  initialize (x0, t0);
116  return do_integrate (tt, ttcrit);
117  }
118 };
119 
120 #endif
Definition: dMatrix.h:42
ODEFunc & operator=(const ODEFunc &a)
Definition: ODEFunc.h:53
Definition: ODE.h:37
virtual Matrix do_integrate(const ColumnVector &tt, const ColumnVector &ttcrit)=0
virtual Matrix integrate(const ColumnVector &x0, double t0, const ColumnVector &tt, const ColumnVector &ttcrit)
Definition: ODE.h:111
ODE(void)
Definition: ODE.h:40
virtual ColumnVector integrate(double tt)
Definition: ODE.h:79
ODE(const ODE &a)
Definition: ODE.h:46
virtual Matrix integrate(const ColumnVector &x0, double t0, const ColumnVector &tt)
Definition: ODE.h:96
virtual Matrix integrate(const ColumnVector &tt)
Definition: ODE.h:91
ODE(const ColumnVector &s, double tm, const ODEFunc &f)
Definition: ODE.h:43
virtual ColumnVector do_integrate(double tt)=0
virtual ColumnVector integrate(const ColumnVector &x0, double t0, double tt)
Definition: ODE.h:83
virtual Matrix integrate(const ColumnVector &tt, const ColumnVector &ttcrit)
Definition: ODE.h:105
virtual ~ODE(void)=default
virtual Matrix do_integrate(const ColumnVector &tt)=0
base_diff_eqn & operator=(const base_diff_eqn &a)
Definition: base-de.h:54
F77_RET_T const F77_DBLE const F77_DBLE * f
static void initialize(void)