node package manager
Loosely couple your services. Use Orgs to version and reuse your code. Create a free org »

ode-midpoint

ode-midpoint Build Status npm version Dependency Status

Integrate a system of ODEs using the Second Order Runge-Kutta (Midpoint) method

Introduction

This module integrates a system of ordinary differential equations of the form

undefined

undefined

where undefined is a vector of length undefined. Given time step undefined, the midpoint method integrates the ODE with update

undefined

Install

$ npm install ode-midpoint

Example

var midpoint = require('ode-midpoint')
 
var deriv = function(dydt, y, t) {
  dydt[0] = -y[1]
  dydt[1] =  y[0]
}
 
var y0 = [1,0]
var n = 1000
var t0 = 0
var dt = 2.0 * Math.PI / n
 
var integrator = midpoint( y0, deriv, t0, dt )
 
// Integrate 1000 steps: 
integrator.steps(n)
 
// Integrate all the way around a circle: 
// => integrator.y = [ 1.0000001939636542, 0.000041341220643982546 ] 

API

require('ode-midpoint')( y0, deriv, t0, dt )

Arguments:

  • y0: an array or typed array containing initial conditions. This vector is updated in-place with each integrator step.
  • deriv: a function that calculates the derivative. Format is function( dydt, y, t ). Inputs are current state y and current time t, output is calcualted derivative dydt.
  • t0: initial time undefined.
  • dt: time step undefined.

Returns: Initialized integrator object.

Properties:

  • n: dimension of y0.
  • y: current state. Initialized as a shallow copy of input y0.
  • deriv: function that calcualtes derivative. Initialized from input. May be changed.
  • t: current time, incremented by dt with each time step.
  • dt: time step undefined. Initialized from input dt. May be changed.

Methods:

  • .step(): takes a single step of the midpoint integrator and stores the result in-place in the y property.
  • .steps( n ): takes n steps of the midpoint integrator, storing the result in-place in the y property.

Credits

(c) 2015 Ricky Reusser. MIT License