ndarray-odeint 0.3.0

solve ODE using rust-ndarray
Documentation
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Accuracy test for ndarray-odeint"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## generate data for accuracy test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[m\u001b[32m\u001b[1m    Finished\u001b[m debug [unoptimized + debuginfo] target(s) in 0.0 secs\n",
      "\u001b[m\u001b[32m\u001b[1m     Running\u001b[m target/debug/deps/accuracy-001baaa41df9329d\n",
      "\n",
      "running 4 tests\n",
      "test euler ... \u001b[32mok\u001b[m\n",
      "test heun ... \u001b[32mok\u001b[m\n",
      "test rk4 ... \u001b[32mok\u001b[m\n",
      "test diag_rk4 ... \u001b[32mok\u001b[m\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 4 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n",
      "\u001b[m\u001b[32m\u001b[1m     Running\u001b[m target/debug/deps/clv-2c156f3375a48c8f\n",
      "\n",
      "running 0 tests\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 0 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n",
      "\u001b[m\u001b[32m\u001b[1m     Running\u001b[m target/debug/deps/lorenz63-e4c434b869b0d89e\n",
      "\n",
      "running 0 tests\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 0 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n",
      "\u001b[m\u001b[32m\u001b[1m     Running\u001b[m target/debug/deps/lorenz63_si-6d123bd5d876c1b4\n",
      "\n",
      "running 0 tests\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 0 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n",
      "\u001b[m\u001b[32m\u001b[1m     Running\u001b[m target/debug/deps/lyapunov-993a16b6ff7f5a97\n",
      "\n",
      "running 3 tests\n",
      "test jacobian_linearity ... \u001b[32mok\u001b[m\n",
      "test jacobian_matrix_shape ... \u001b[32mok\u001b[m\n",
      "test exponents_l63 ... \u001b[32mok\u001b[m\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 3 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n",
      "\u001b[m\u001b[32m\u001b[1m     Running\u001b[m target/debug/deps/ndarray_odeint-86ee6ff5176225d9\n",
      "\n",
      "running 0 tests\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 0 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n",
      "\u001b[m\u001b[32m\u001b[1m     Running\u001b[m target/debug/deps/roessler-25c47aeba97cb3bf\n",
      "\n",
      "running 0 tests\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 0 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n",
      "\u001b[m\u001b[32m\u001b[1m   Doc-tests\u001b[m ndarray-odeint\n",
      "\n",
      "running 0 tests\n",
      "\n",
      "test result: \u001b[32mok\u001b[m. 0 passed; 0 failed; 0 ignored; 0 measured\n",
      "\n"
     ]
    }
   ],
   "source": [
    "! cargo test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "euler = pd.read_csv(\"euler.csv\").dropna().set_index(\"dt\")\n",
    "heun = pd.read_csv(\"heun.csv\").dropna().set_index(\"dt\")\n",
    "rk4 = pd.read_csv(\"rk4.csv\").dropna().set_index(\"dt\")\n",
    "diag_rk4 = pd.read_csv(\"diag_rk4.csv\").dropna().set_index(\"dt\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fad82591898>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fad82ca2588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(euler, \"b+-\", label=\"Euler\")\n",
    "plt.plot(heun, \"g+-\", label=\"Heun\")\n",
    "plt.plot(rk4, \"r+-\", label=\"RK4\")\n",
    "plt.plot(diag_rk4, \"+-\", color=\"orange\", label=\"RK4(si)\")\n",
    "plt.plot(euler.index, 200*euler.index, \"b:\", label=r\"$\\propto dt^1$\")\n",
    "plt.plot(heun.index, 1000*heun.index**2, \"g:\", label=r\"$\\propto dt^2$\")\n",
    "plt.plot(rk4.index, 80000*rk4.index**4, \"r:\", label=r\"$\\propto dt^4$\")\n",
    "plt.xscale(\"log\")\n",
    "plt.yscale(\"log\")\n",
    "plt.xlabel(\"dt\")\n",
    "plt.ylabel(\"accuray (deviation from truth)\")\n",
    "plt.axis(\"tight\")\n",
    "plt.legend(loc=4, ncol=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(si) means semi-implicit scheme"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  },
  "toc": {
   "colors": {
    "hover_highlight": "#DAA520",
    "running_highlight": "#FF0000",
    "selected_highlight": "#FFD700"
   },
   "moveMenuLeft": true,
   "nav_menu": {
    "height": "66px",
    "width": "252px"
   },
   "navigate_menu": true,
   "number_sections": true,
   "sideBar": true,
   "threshold": 4,
   "toc_cell": false,
   "toc_section_display": "block",
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}