Skip to content

Instantly share code, notes, and snippets.

@domitry
Last active August 29, 2015 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save domitry/e565a73e52f6cbd11fd6 to your computer and use it in GitHub Desktop.
Save domitry/e565a73e52f6cbd11fd6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from math import pi, sin, cos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 単振り子をオイラー法で解いてみる"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"time = []\n",
"result = []\n",
"l = 30.\n",
"g = 9.8\n",
"theta = 0\n",
"d_theta = 0.1\n",
"h = 1e-3\n",
"for i in xrange(0, 50000):\n",
" new_theta = theta + h*d_theta\n",
" d_theta = d_theta-h*(g/l)*sin(theta)\n",
" theta = new_theta\n",
" result.append(theta)\n",
" time.append(i*h)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f904b36ddd0>]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n",
"tUOr+hRs5QAAAABJRU5ErkJggg==\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x7f906592b8d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"from matplotlib import pylab\n",
"pylab.plot(time, result)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from draw import *"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<html>\n",
" <head>\n",
" <script type=\"text/javascript\">\n",
" if(typeof window.Draw == \"undefined\"){\n",
" window.Draw = {};\n",
"\n",
" require.config({\n",
" paths: {\n",
" d3: \"https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min\",\n",
" underscore: \"http://underscorejs.org/underscore\"\n",
" }\n",
" });\n",
"\n",
" require([\"underscore\", \"d3\"], function(_, d3){\n",
" IPython.notebook.kernel.comm_manager.register_target(\"Draw\", function(comm){\n",
" window.Draw.comm = comm;\n",
"\n",
" comm.on_msg(function(msg){\n",
" var mdata = msg.content.data;\n",
" var svg = d3.select(\"#\" + mdata[\"canvas_id\"]);\n",
"\n",
" if(!_.isUndefined(svg)){\n",
" /***********************************\n",
" msg = {\n",
" queue: [{\n",
" method: \"append\",\n",
" type: \"rect\"\n",
" attr: {\n",
" width: \n",
" height: \n",
" }\n",
" selector_id: \"1234-5678-9\"\n",
" }]\n",
" }\n",
" ***********************************/\n",
" _.each(mdata[\"queue\"], function(m){\n",
" switch(m.method){\n",
" case \"append\":\n",
" var node = svg.append(m.type).attr(\"id\", m.selector_id);\n",
" break;\n",
" case \"update\":\n",
" var node = d3.select(\"#\" + m.selector_id);\n",
" break;\n",
" case \"delete\":\n",
" var node = d3.select(\"#\" + m.selector_id);\n",
" node.remove();\n",
" break;\n",
" }\n",
"\n",
" if(m.css)node.style(m.css);\n",
" if(m.attr)node.attr(m.attr);\n",
" });\n",
" }\n",
" });\n",
" });\n",
" });\n",
" }\n",
" </script>\n",
" </head>\n",
" <body>\n",
" <svg id=\"canvasc0c9bcd7-a670-46b6-a7dc-efdfc1d8cf8f\" style=\"width: 500px; background-color: white; height: 500px\">\n",
" </svg>\n",
" </body>\n",
"</html>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"theta = pi/4\n",
"c = Canvas()\n",
"c.add(Circle(250+200*sin(theta), 200*cos(theta), 20, fill=\"#000\"))\n",
"l = Line(250, 0, 250+200*sin(theta), 200*cos(theta))\n",
"c.add(l)\n",
"c.add(Line(0, 0, 500, 0))\n",
"c.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<html>\n",
" <head>\n",
" <script type=\"text/javascript\">\n",
" if(typeof window.Draw == \"undefined\"){\n",
" window.Draw = {};\n",
"\n",
" require.config({\n",
" paths: {\n",
" d3: \"https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min\",\n",
" underscore: \"http://underscorejs.org/underscore\"\n",
" }\n",
" });\n",
"\n",
" require([\"underscore\", \"d3\"], function(_, d3){\n",
" IPython.notebook.kernel.comm_manager.register_target(\"Draw\", function(comm){\n",
" window.Draw.comm = comm;\n",
"\n",
" comm.on_msg(function(msg){\n",
" var mdata = msg.content.data;\n",
" var svg = d3.select(\"#\" + mdata[\"canvas_id\"]);\n",
"\n",
" if(!_.isUndefined(svg)){\n",
" /***********************************\n",
" msg = {\n",
" queue: [{\n",
" method: \"append\",\n",
" type: \"rect\"\n",
" attr: {\n",
" width: \n",
" height: \n",
" }\n",
" selector_id: \"1234-5678-9\"\n",
" }]\n",
" }\n",
" ***********************************/\n",
" _.each(mdata[\"queue\"], function(m){\n",
" switch(m.method){\n",
" case \"append\":\n",
" var node = svg.append(m.type).attr(\"id\", m.selector_id);\n",
" break;\n",
" case \"update\":\n",
" var node = d3.select(\"#\" + m.selector_id);\n",
" break;\n",
" case \"delete\":\n",
" var node = d3.select(\"#\" + m.selector_id);\n",
" node.remove();\n",
" break;\n",
" }\n",
"\n",
" if(m.css)node.style(m.css);\n",
" if(m.attr)node.attr(m.attr);\n",
" });\n",
" }\n",
" });\n",
" });\n",
" });\n",
" }\n",
" </script>\n",
" </head>\n",
" <body>\n",
" <svg id=\"canvasa727f97e-4470-454e-96ae-757f364d8a81\" style=\"width: 500px; background-color: white; height: 500px\">\n",
" </svg>\n",
" </body>\n",
"</html>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from math import pi, sin, cos\n",
"theta = result[0]\n",
"c = Canvas()\n",
"cr = Circle(250+200*sin(theta), 200*cos(theta), 20, fill=\"#000\")\n",
"l = Line(250, 0, 250+200*sin(theta), 200*cos(theta))\n",
"c.add(cr)\n",
"c.add(l)\n",
"c.add(Line(0, 0, 500, 0))\n",
"c.interval = 0.0005\n",
"\n",
"def func(i):\n",
" if(i > len(result)):\n",
" c.timer.stop = True\n",
" return\n",
" new_x = 250+200*sin(result[i])\n",
" new_y = 200*cos(result[i])\n",
" cr.update(cx=new_x, cy=new_y)\n",
" l.update(x2=new_x, y2=new_y)\n",
"\n",
"c.loop(func)\n",
"c.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"c.stop = True"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Lorenz Attractor"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x_arr = []\n",
"y_arr = []\n",
"z_arr = []\n",
"p=10\n",
"r=28\n",
"b=8./3\n",
"x=1e-3\n",
"y=1e-3\n",
"z=1e-3\n",
"for i in xrange(0, 50000):\n",
" new_x = x + h*(-p*x+p*y)\n",
" new_y = y + h*(-x*z + r*x - y)\n",
" new_z = z + h*(x*y - b*z)\n",
" x_arr.append(new_x)\n",
" y_arr.append(new_y)\n",
" z_arr.append(new_z)\n",
" x = new_x\n",
" y = new_y\n",
" z = new_z"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"pylab.plot(x_arr, z_arr)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"def dsolve1(x0, func, num, h):\n",
" result = np.zeros((num, len(x0)))\n",
" for i in xrange(0, num):\n",
" x = x0 + h*func(x0)\n",
" result[i] = x\n",
" x0 = x\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def f(y):\n",
" return np.array([\n",
" -p*y[0]+p*y[1],\n",
" -y[0]*y[2] + r*y[0] - y[1],\n",
" y[0]*y[1] - b*y[2]\n",
" ])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"result = dsolve1(np.array([1e-3, 1e-3, 1e-3]), f, 50000, 1e-3)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"t = result.transpose()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"pylab.plot(t[0], t[2])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"length = 50000\n",
"h = 1e-3\n",
"arr1 = dsolve1(np.array([0.0, 1.0]), lambda x: np.array([x[1], -x[0]]), length, h)\n",
"arr2 = np.array([sin(h*i) for i in range(0, length)])\n",
"pylab.plot(arr1.transpose()[0])\n",
"pylab.plot(arr2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"pylab.plot(arr1.transpose()[0] - arr2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# RK4"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dsolve2(x0, func, num, h):\n",
" result = np.zeros((num, len(x0)))\n",
" for i in xrange(0, num):\n",
" k1 = func(x0)\n",
" k2 = func(x0 + (h/2)*k1)\n",
" k3 = func(x0 + (h/2)*k2)\n",
" k4 = func(x0 + h*k3)\n",
" x = x0 + (h/6)*(k1 + 2*k2 + 2*k3 + k4)\n",
" result[i] = x\n",
" x0 = x\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"length = 50000\n",
"h = 1e-3\n",
"arr1 = dsolve2(np.array([0.0, 1.0]), lambda x: np.array([x[1], -x[0]]), length, h)\n",
"arr2 = np.array([sin(h*i) for i in range(0, length)])\n",
"pylab.plot(arr1.transpose()[0])\n",
"pylab.plot(arr2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"pylab.plot(arr1.transpose()[0] - arr2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment