changeset 1843:88c5728ae7ae

[project @ 1996-02-03 11:44:20 by jwe] Initial revision
author jwe
date Sat, 03 Feb 1996 11:44:20 +0000
parents 0574a1f3a273
children dca09b766816
files liboctave/base-de.h
diffstat 1 files changed, 121 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/base-de.h	Sat Feb 03 11:44:20 1996 +0000
@@ -0,0 +1,121 @@
+// base-de.h                                                -*- C++ -*-
+/*
+
+Copyright (C) 1996 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+*/
+
+#if !defined (octave_base_de_h)
+#define octave_base_de_h 1
+
+#include "dColVector.h"
+#include "dMatrix.h"
+
+class base_diff_eqn
+{
+public:
+
+  base_diff_eqn (void)
+    : x (), t (0.0) { }
+
+  base_diff_eqn (const ColumnVector& xx, double tt)
+    : x (xx), t (tt) { }
+
+  base_diff_eqn (const base_diff_eqn& a)
+    : x (a.x), t (a.t) { }
+
+  virtual ~base_diff_eqn (void) { }
+
+  base_diff_eqn& operator = (const base_diff_eqn& a)
+    {
+      x = a.x;
+      t = a.t;
+      return *this;
+    }
+
+  // Derived classes must provide functions to actually do the
+  // integration.
+
+  // Return the vector of states at output time t.
+  virtual ColumnVector do_integrate (double t) = 0;
+
+  // Return a matrix of states at each output time specified by t.
+  // The rows of the result matrix should each correspond to a new
+  // output time.
+  virtual Matrix do_integrate (const ColumnVector& t) = 0;
+
+  // There must also be a way for us to force the integration to
+  // restart.
+  virtual void force_restart (void) = 0;
+
+  // Lots of ways to call the single function and optionally set and
+  // get additional information.
+
+  // Integrate to t from current point.
+  virtual ColumnVector integrate (double t)
+    { return do_integrate (t); }
+
+  // Set new x0, t0 and integrate to t.
+  virtual ColumnVector integrate (const ColumnVector& x0, double t0, double t)
+    {
+      initialize (x0, t0);
+      return do_integrate (t);
+    }
+
+  // Integrate from current point and return output at all points
+  // specified by t.
+  virtual Matrix integrate (const ColumnVector t)
+    { return do_integrate (t); }
+
+  // Set new x0, t0 and integrate to return output at all points
+  // specified by t.
+  virtual Matrix integrate (const ColumnVector& x0, double t0,
+			    const ColumnVector t)
+    {
+      initialize (x0, t0);
+      return do_integrate (t);
+    }
+
+  virtual void initialize (const ColumnVector& x0, double t0)
+    {
+      x = x0;
+      t = t0;
+      force_restart ();
+    }
+
+  int size (void) const { return x.capacity (); }
+
+  ColumnVector state (void) const { return x; }
+
+  double time (void) const { return t; }
+
+protected:
+
+  ColumnVector x;
+  double t;
+};
+
+#endif
+
+/*
+;;; Local Variables: ***
+;;; mode: C++ ***
+;;; page-delimiter: "^/\\*" ***
+;;; End: ***
+*/