NAME

PDL::RungeKutta - Solve N-th order M dimensional ordinary differential equations using adaptive stepsize Runge Kutta method.

DESCRIPTION

This module allows to solve N-th order M dimensional ordinary differential equations. It uses the adaptive stepsize control for fifth order Cash-Karp Runge-Kutta algorithm described in "Numerical Recipes in Fortran 77: The Art of Scientific Computing" Ch. 16.2. The errors are estimated as the difference between fifth order results and the embeded forth order results. To solve N-th order equations, you must first turn it into a system of N first order equations.

SYNOPSIS

Example: Solve y'' + y = 0, y(0) = 0, y'(0) = 1

use PDL;								       
use PDL::Math;							       
use PDL::NiceSlice;							       
use PDL::RungeKutta;							       

# y'' + y = 0, Solution: y = sin(t)					       

$Y0 = pdl(0,1);	    # y(0)=0, y'(0)=1	( Y0=(f,g), f=y, g=y' )	       
@esargs=();		    # extra arguments for error eval function    
$t0  = 0;		    # initial moment				       
$dt0 = 0.1;		    # initial time step 			       
$t1  = 1 0;		    # final moment				       
$eps = 1.e-6; 	    # error					       
$verbose=1;								       

# integration 							       
($evt,$evy,$evd,$i,$j) = 						       
rkevolve($t0,$Y,$dt0,\&DE,$t1,$eps,\&error,\@esargs,$verbose);	       

$check=sin($evt);							       
wcols $evt,$evy((0)),$check,'test.dat';				       

sub DE {		  # differential eq				       
  my ($t,$y)= @_;							       
  my $yd=zeroes(2);		    # Y'    ( = (f',g') = (y',y'') )	       
  $yd(0).=$y(1);		    # f'=g  ( = y' )			       
  $yd(1).=-$y(0);		    # g'=-f ( =-y )			       
  return $yd; 							       
}									       

sub error {		    # error scale 				       
  my ($t,$Y) = @_;							       
  my $es=ones(2);	    # constant scale				       
  return $es; 							       
}
		

Please see the other examples also.

Exported Functions

rkevolve

($t,$Y,$d,$i,$j) = rkevolve($t0,$Y0,$dt0,$DE,$t1,$eps,$erfcn,$efarg,$verbose)

This will solve the differential equation for DE with the initial conditions Y0 between t0 and t1 using adaptive step size control for Runge-Kutta.

Input
* $t0 scalar, initial moment
* $Y0 one dimensional piddle wich contains the initial conditions. Number of elements is NxM.
* $dt0 scalar, initial time step
* $DE reference to the function for the differential equation. Please see Math::ODE(3) for a more detailed description on how to construct the equations. It should return a piddle with the same dimensions as $Y0.
* $t1 scalar, final moment
* $eps scalar, the requested error. Upon scaling with the output of erfcn this will give the requested error for each element of $Y.
* $erfcn reference to the error scaling function. This function should return a pidle containing scaling factors for the requested error for each element of $Y. Please see Num. Rec. for more details.
* $efarg reference to an array containing supplementary arguments for erfcn.
* $verbose scalar, integer. If set to 1 details about progress are printed during calculation.
Output
* $t piddle containing the independent variable
* $Y piddle containing the results
* $d piddle containing the errors as estimated by Cash-Karp Runge-Kutta algorithm
* $i total number of iterations
* $j number of resets made in order to decrease the error

rk5

($y,$del) = rk5($t,$yi,$h,$DE)

This will carry out one Cash-Karp Runge-Kutta step. Could be useful if you want to do your own step size control or you just want equal steps.

Input
* $t initial moment
* $yi piddle containing the initial conditions
* $h step
* $DE reference to differential equation
Output
* $y piddle containing the result
* $del piddle containing the errors

AUTHOR

Dragos Constantinescu <dragos@venus.nipne.ro>

SEE ALSO

Math::ODE(3)

"Numerical Recipes in Fortran 77: The Art of Scientific Computing" Ch. 16.

http://lib-www.lanl.gov/numerical/index.html

COPYRIGHT

Copyright (c) 2003 by Dragos Constantinescu. All rights reserved.

LICENSE AGREEMENT

This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

24 POD Errors

The following errors were encountered while parsing the POD:

Around line 145:

'=item' outside of any '=over'

Around line 147:

Expected text after =item, not a bullet

Around line 149:

Expected text after =item, not a bullet

Around line 152:

Expected text after =item, not a bullet

Around line 154:

Expected text after =item, not a bullet

Around line 158:

Expected text after =item, not a bullet

Around line 160:

Expected text after =item, not a bullet

Around line 163:

Expected text after =item, not a bullet

Around line 167:

Expected text after =item, not a bullet

Around line 170:

Expected text after =item, not a bullet

Around line 175:

Expected text after =item, not a bullet

Around line 177:

Expected text after =item, not a bullet

Around line 179:

Expected text after =item, not a bullet

Around line 182:

Expected text after =item, not a bullet

Around line 184:

Expected text after =item, not a bullet

Around line 186:

You forgot a '=back' before '=head2'

Around line 193:

'=item' outside of any '=over'

Around line 195:

Expected text after =item, not a bullet

Around line 197:

Expected text after =item, not a bullet

Around line 199:

Expected text after =item, not a bullet

Around line 201:

Expected text after =item, not a bullet

Around line 205:

Expected text after =item, not a bullet

Around line 207:

Expected text after =item, not a bullet

Around line 209:

You forgot a '=back' before '=head1'