]> Creatis software - CreaPhase.git/blob - octave_packages/odepkg-0.8.2/odeprint.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / odepkg-0.8.2 / odeprint.m
1 %# Copyright (C) 2006-2012, Thomas Treichl <treichl@users.sourceforge.net>
2 %# OdePkg - A package for solving ordinary differential equations and more
3 %#
4 %# This program is free software; you can redistribute it and/or modify
5 %# it under the terms of the GNU General Public License as published by
6 %# the Free Software Foundation; either version 2 of the License, or
7 %# (at your option) any later version.
8 %#
9 %# This program is distributed in the hope that it will be useful,
10 %# but WITHOUT ANY WARRANTY; without even the implied warranty of
11 %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 %# GNU General Public License for more details.
13 %#
14 %# You should have received a copy of the GNU General Public License
15 %# along with this program; If not, see <http://www.gnu.org/licenses/>.
16
17 %# -*- texinfo -*-
18 %# @deftypefn {Function File} {[@var{ret}] =} odeprint (@var{t}, @var{y}, @var{flag})
19 %#
20 %# Display the results of the set of differential equations in the Octave window while solving. The first column of the screen output shows the actual time stamp that is given with the input arguemtn @var{t}, the following columns show the results from the function evaluation that are given by the column vector @var{y}. The types and the values of the input parameter @var{t} and the output parameter @var{ret} depend on the input value @var{flag} that is of type string. If @var{flag} is
21 %# @table @option
22 %# @item  @code{"init"}
23 %# then @var{t} must be a double column vector of length 2 with the first and the last time step and nothing is returned from this function,
24 %# @item  @code{""}
25 %# then @var{t} must be a double scalar specifying the actual time step and the return value is false (resp. value 0) for 'not stop solving',
26 %# @item  @code{"done"}
27 %# then @var{t} must be a double scalar specifying the last time step and nothing is returned from this function.
28 %# @end table
29 %#
30 %# This function is called by a OdePkg solver function if it was specified in an OdePkg options structure with the @command{odeset}. This function is an OdePkg internal helper function therefore it should never be necessary that this function is called directly by a user. There is only little error detection implemented in this function file to achieve the highest performance.
31 %#
32 %# For example, solve an anonymous implementation of the "Van der Pol" equation and print the results while solving
33 %# @example
34 %# fvdb = @@(vt,vy) [vy(2); (1 - vy(1)^2) * vy(2) - vy(1)];
35 %# 
36 %# vopt = odeset ('OutputFcn', @@odeprint, 'RelTol', 1e-6);
37 %# vsol = ode45 (fvdb, [0 20], [2 0], vopt);
38 %# @end example
39 %# @end deftypefn
40 %#
41 %# @seealso{odepkg}
42
43 function [varargout] = odeprint (vt, vy, vflag, varargin)
44
45   %# No input argument check is done for a higher processing speed
46   %# vt and vy are always column vectors, see also function odeplot,
47   %# odephas2 and odephas3 for another implementation. vflag either
48   %# is "init", [] or "done".
49
50   if (strcmp (vflag, 'init'))
51     fprintf (1, '%f%s\n', vt (1,1), sprintf (' %f', vy) );
52     fflush (1);
53
54   elseif (isempty (vflag)) %# Return value varargout{1} needed
55     fprintf (1, '%f%s\n', vt (1,1), sprintf (' %f', vy) );
56     fflush (1); varargout{1} = false; 
57
58   elseif (strcmp (vflag, 'done')) 
59     %# Cleanup could be done, but nothing to do in this function
60
61   end
62
63 %# Local Variables: ***
64 %# mode: octave ***
65 %# End: ***