# moritz/Math-RungeKutta

Runge-Kutta integration of ordinary differential equations with Perl 6
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib/Math
logotype
t
.travis.yml
META6.json
README.md

# Introduction

Runge-Kutta integration for systems of ordinary, linear differential equations.

WARNING: this module is not yet thoroughly tested. Use it at your own risk. Bug reports, tests and patches are welcome!

Let's say you have a differential equation for the function f(t), with the equation

``````df/dt = f(t)^2 + t
``````

and the initial value f(t=0) = 1;

In the context of this module, we call df/dt the "derivative", t the "parameter"

You'd solve that numerically with this Perl 6 code:

``````# synopsis.pl
use Math::RungeKutta;

# function that calculates the derivative that
# Math::RungeKutta will integrate
sub d(\$t, @values) { @values[0]**2 + \$t}

# that's a function that gets called with the
# current values after each integration step
sub callback(\$t, @values) { say "\$t @values[0]" };

my @initial = 1;

adaptive-rk-integrate(
:from(0),
:to(0.5),
:@initial,
:derivative(&d),
:do(&callback)
);
``````

And then look at the result:

``````\$ PERL6LIB=lib perl6 synopsis.pl | xmgrace -nxy -
``````

The interfaces is inspired by Perl 5 module Math::RungeKutta, to be found at http://search.cpan.org/perldoc?Math::RungeKutta.

# License

This module is licensed under the Artistic License version 2.0.

Its accompanying tests and examples are public domain, as defined by the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.