X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fodepkg-0.8.2%2Fodeplot.m;fp=octave_packages%2Fodepkg-0.8.2%2Fodeplot.m;h=92222ee5815665fbb5b30eeaed4d425310d32f55;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/odepkg-0.8.2/odeplot.m b/octave_packages/odepkg-0.8.2/odeplot.m new file mode 100644 index 0000000..92222ee --- /dev/null +++ b/octave_packages/odepkg-0.8.2/odeplot.m @@ -0,0 +1,73 @@ +%# Copyright (C) 2006-2012, Thomas Treichl +%# OdePkg - A package for solving ordinary differential equations and more +%# +%# This program 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 of the License, or +%# (at your option) any later version. +%# +%# This program 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 this program; If not, see . + +%# -*- texinfo -*- +%# @deftypefn {Function File} {[@var{ret}] =} odeplot (@var{t}, @var{y}, @var{flag}) +%# +%# Open a new figure window and plot the results from the variable @var{y} of type column vector over time while solving. 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 +%# @table @option +%# @item @code{"init"} +%# 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, +%# @item @code{""} +%# 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', +%# @item @code{"done"} +%# then @var{t} must be a double scalar specifying the last time step and nothing is returned from this function. +%# @end table +%# +%# 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. +%# +%# For example, solve an anonymous implementation of the "Van der Pol" equation and display the results while solving +%# @example +%# fvdb = @@(vt,vy) [vy(2); (1 - vy(1)^2) * vy(2) - vy(1)]; +%# +%# vopt = odeset ('OutputFcn', @@odeplot, 'RelTol', 1e-6); +%# vsol = ode45 (fvdb, [0 20], [2 0], vopt); +%# @end example +%# @end deftypefn +%# +%# @seealso{odepkg} + +function [varargout] = odeplot (vt, vy, vflag, varargin) + + %# No input argument check is done for a higher processing speed + persistent vfigure; persistent vtold; + persistent vyold; persistent vcounter; + + if (strcmp (vflag, 'init')) + %# Nothing to return, vt is either the time slot [tstart tstop] + %# or [t0, t1, ..., tn], vy is the inital value vector 'vinit' + vfigure = figure; vtold = vt(1,1); vyold = vy(:,1); + vcounter = 1; + + elseif (isempty (vflag)) + %# Return something in varargout{1}, either false for 'not stopping + %# the integration' or true for 'stopping the integration' + vcounter = vcounter + 1; figure (vfigure); + vtold(vcounter,1) = vt(1,1); + vyold(:,vcounter) = vy(:,1); + plot (vtold, vyold, '-o', 'markersize', 1); drawnow; + varargout{1} = false; + + elseif (strcmp (vflag, 'done')) + %# Cleanup has to be done, clear the persistent variables because + %# we don't need them anymore + clear ('vfigure', 'vtold', 'vyold', 'vcounter'); + + end + +%# Local Variables: *** +%# mode: octave *** +%# End: ***