Skip to content

Instantly share code, notes, and snippets.

@pasky
Created March 10, 2015 18:50
Show Gist options
  • Save pasky/b03df4f40b23da64ca1e to your computer and use it in GitHub Desktop.
Save pasky/b03df4f40b23da64ca1e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:23e0b8ebf677de8e4d30dfed171e747da567b804044236149ba37b67b3f8ed7f"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Common prologue:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import sympy as sym\n",
"from sympy import init_printing, pprint\n",
"init_printing()\n",
"t = sym.symbols('t', real=True)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"h = sym.symbols('h', real=True)\n",
"g = sym.symbols('g', real=True)\n",
"input_symbols = [h, g]\n",
"input_symbols"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\left [ h, \\quad g\\right ]$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAADwAAAAUBAMAAAAjLUMaAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdt3NMolEELvvmVRm\nIqt368fcAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA5klEQVQoFWMQMmHACQ6rMYQxsHcq4FIQBpRm\nYF6AV5p/A17p/AK80kG4ZIE2A+222iNxAUMFd6B0A1ia/fMFvgcY0hEM9xeApbm/MHA0oEtzf2cA\nuhhkOJcBA6cAujRnA4P/BbA0UwDDfQd0af8DDEIMYOn6BIZIBnS/nb/A0AWRPs/AMJUHXXo/A8Nv\niPRjBoZvrAz1Bijm11/g+wuR7mFgiApgYPqOIs32MFQBIg0VzkWRZmDgWIAifQBF2oEB6GKwyyHC\n7CjSrN8Z+oDi4DAHy/NAVEFJ7jdSG8DSQioo4igcITUAbv03ISUzgzEAAAAASUVORK5CYII=\n",
"prompt_number": 2,
"text": [
"[h, g]"
]
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" ga(g)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"input_symbols.remove(g)\n",
"g = sym.symbols('g', real=True, positive=True) # TODO downwards vector\n",
"input_symbols.append(g)\n",
"g"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$g$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAANBAMAAABiGeI2AAAALVBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAVIl2uyKZEO8yZt2rRJ6P\nuygAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABVSURBVAgdY2BgEDIWYWBgcmB9xsAgV8DwkIGhhYHz\nKQPnKwbmDQxcTxlYEhgYHzDwCTCwP2U4F8DAcMdImwEE3BgYOBnY3zIw6BWwHGBgkFmcyMAAAFLm\nD2hIZOwsAAAAAElFTkSuQmCC\n",
"prompt_number": 3,
"text": [
"g"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" mass(r)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"eqs_r = []\n",
"subs_r = {}\n",
"x_r, v_r = sym.symbols('x_r, v_r', cls=sym.Function) # functions of time\n",
"x0_r, v0_r = sym.symbols('x0_r, v0_r', real=True)\n",
"accel_r = sym.Eq(x_r(t).diff(t, 2), -g) # TODO vector\n",
"position_r = sym.dsolve(accel_r, x_r(t)).subs({'C1': x0_r, 'C2': v0_r})\n",
"# eqs_r.append(position_r)\n",
"velocity_r = sym.dsolve(accel_r.subs({x_r(t).diff(t): v_r(t)}), v_r(t)).subs({'C1': v0_r})\n",
"# eqs_r.append(velocity_r)\n",
"accel_r, position_r, velocity_r"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\left ( \\frac{d^{2}}{d t^{2}} \\operatorname{x_{r}}{\\left (t \\right )} = - g, \\quad \\operatorname{x_{r}}{\\left (t \\right )} = - \\frac{g t^{2}}{2} + t v_{0 r} + x_{0 r}, \\quad \\operatorname{v_{r}}{\\left (t \\right )} = - g t + v_{0 r}\\right )$$"
],
"metadata": {},
"output_type": "pyout",
"png": "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\ndkQeAAAAAElFTkSuQmCC\n",
"prompt_number": 4,
"text": [
"\u239b 2 2 \u239e\n",
"\u239c d g\u22c5t \u239f\n",
"\u239c\u2500\u2500\u2500(x\u1d63(t)) = -g, x\u1d63(t) = - \u2500\u2500\u2500\u2500 + t\u22c5v\u2080 \u1d63 + x\u2080 \u1d63, v\u1d63(t) = -g\u22c5t + v\u2080 \u1d63\u239f\n",
"\u239c 2 2 \u239f\n",
"\u239ddt \u23a0"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" position(r,var2)\n",
" set(var2,{0,h,0},e1)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"eqs_r.append(position_r.subs({x_r(t): h, t: 0}))\n",
"# XXX: It might be better to have a specific predicate for this (\"release\" vs. \"throw\")\n",
"eqs_r.append(velocity_r.subs({v_r(t): 0, t: 0}))\n",
"eqs_r[-2:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\left [ h = x_{0 r}, \\quad 0 = v_{0 r}\\right ]$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAAUBAMAAADihsvzAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdt3NMolEELvvmVRm\nIqt368fcAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACKklEQVQ4Ea2SwWsTQRTGv6zJTtLdZreB0FJQ\nqpZcWtqCHqS97H/QTQsRg2C8CR66Cj1YCpurIJKCnrwEUbx46KV4UYmKPZRC9+bBQ7botRBpTA5F\ncN5mk93Nmk0KvsPMm+9982PmzSBzHf89vuRQAHs8c07wVv5V9I4Cx+JCNdoUqq7goRUS/YKDVXb9\n0vBcriCxFGlzsBtGpCdUTNqQ2iHVLzjYNb8yQq7YEM8ifQ52+f1Uf6vYxMnd/KCdZhXir2CRFVU2\n70mEZadW2iZp/RrFMqWb+KxeRSyv06I/6jriv0n0NiSkChaQzbpWwkpNJMvuujvdxB3jA77iY1fw\nzz2sJ34fm8GerEt2RyLs2BJSqudwMgM3+DwL5V+vaeqhJhiccF/Q4L4kYQUddc2B+QfePPYHqV2/\n5uZKFVL/k/HfpJoWXnQshDVLuAU61doVigWnEm+CxdsQageHlywX152EMmTnWL4NLwF91cC8/PbT\nCTi0gCPgudx32XexBiYJq+63hFKX586xCjUuGE8haRx7Wd4o5TrYH0ArETSJZ8nGeC3Om3DxQZl3\n4zRYnsMjLahgnX+eVQs736aoQKd9AhT1oIsdT2YPwZpQSmmVlxaDl9mc+Bn0A+nbNZgaWjimCmEH\nR47/hJTG66I12ORVeLfaeEbraOw0/7d1ssk0DI1YVbLHG2SLxiZev8E9sm3TMDyKRUMsky0a2wPV\netloSQGZ2dGc53Flcn8BZNZ+hkU8Ck0AAAAASUVORK5CYII=\n",
"prompt_number": 5,
"text": [
"[h = x\u2080 \u1d63, 0 = v\u2080 \u1d63]"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" land(r, e2)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"t_e2 = sym.symbols('t_e2', real=True)\n",
"eqs_r.append(position_r.subs({x_r(t): 0, t: t_e2}))\n",
"eqs_r[-1]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$0 = - \\frac{g t_{e2}^{2}}{2} + t_{e2} v_{0 r} + x_{0 r}$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAOIAAAAvBAMAAAAMSAuOAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJdjLNVN0iZu+7\nq0QgoRR7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAADb0lEQVRYCb1WT2jTUBz+snSm7bY0uCITKe38\nh8gOYSuC4qFsBRUc9uS1xUP1ZhHFg8oGTt0UZr2JB1umpx10h4mCMIsIXhyrOEUFsWdR1qJj7rL6\nXvJe2nRtGiHL75Dkvd/3vi/v8cv3C2ArxIF+WzjnQIfxyTkyW0xTSGZtAR0DLSBXcozMJtGYYhPo\nGGzCMSYbRMIUIEZsAB2DSGVgxjE2O0QdKciqnLADdQjjVXH68lWXKkeKHiv8WlqMvapWHXr9djRH\nkYtgrB3KwbxUQSCD/Q4ytqPqKlB3u67DXHHzZB7HIWzoiq64+dMsXkMuQ6tTV9yc1MwaxJSkfYuu\nuHk427OOjmIQQjROjtYFN5eXh8bhexPDDiVEFB1y8+3RfXplNL12R7Tpb/G8c25+Fn3ZpmJkMoFw\nScst0OtmN6dd5b/DPwcx1WKVWMGinlqFUO/mO9kC2lUsgsPMkO4iiLM0D+nrcEbPvEWo3s0vMjzp\nKlbBYWZMoAh5zTzVZBSKx1Dn5pyKdBWr4DAzJhyB/Mc81X7EqGhXMcC9e9GXN0baA1cMjj4ciRmp\nnIrO32QkprWIGAmrB07FuormuOoVeIueaP2uGUxQ/RPeFEZGdEquaCWwKccVWVehjuvLHICkPsK1\nOjCDiYpYkbJ+VSpqubC66VSFc5MkbiYQqDZGWefjiqyrUMcVMA85cwMBpSbJ94htBcCbgF6hgQik\n9pVTYwEOpdN30ukzZIp3Fc1x5Qo8wjq6MgxbgwGBGBDO4rmW8hbgp9oi3dfkpL5xtqjljb087SqG\n43aMQ+yswJufmR3N6iv5USCZgJJUcNt/8PEXeObQ5qtqosuoaFcxHJd82JeoYuzJhrdkUpSUU/BQ\nxQn/SmkauIVdiSakllNMkXYVw3HFlKB2klM9ESzwtQy2klnCA/ozMX/vJE31xj9yhO07o6Jdpea4\nH2YhrCJQ6olxHgYLxYNH8ggnsIFlnrK++3a/azgFRkWXmR13mtRqlwGug5FaLZFafWatxLMhiOxX\nh8/84A+A2XGHyfeYM5J1MMATkYq+spGzfHgPvGwJMDuuuKcfP1tgBwcVudAi1zD9AvhunFRDbmuG\n5xW3Fck+7ipbs5mWrDLtLq4GsUKXY8BlPXiKbitegC/rqmZnBB53Fe8PDX52dYs4X63+dU7xHx2i\n4/DYNw6kAAAAAElFTkSuQmCC\n",
"prompt_number": 6,
"text": [
" 2 \n",
" g\u22c5t\u2091\u2082 \n",
"0 = - \u2500\u2500\u2500\u2500\u2500\u2500 + t\u2091\u2082\u22c5v\u2080 \u1d63 + x\u2080 \u1d63\n",
" 2 "
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" velocity(r,var3,vec)\n",
" ref(v,var3,e2)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"eqs_var3 = eqs_r + [velocity_r.subs({t: t_e2})]\n",
"eqs_var3"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\left [ h = x_{0 r}, \\quad 0 = v_{0 r}, \\quad 0 = - \\frac{g t_{e2}^{2}}{2} + t_{e2} v_{0 r} + x_{0 r}, \\quad \\operatorname{v_{r}}{\\left (t_{e2} \\right )} = - g t_{e2} + v_{0 r}\\right ]$$"
],
"metadata": {},
"output_type": "pyout",
"png": "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\nrkJggg==\n",
"prompt_number": 7,
"text": [
"\u23a1 2 \u23a4\n",
"\u23a2 g\u22c5t\u2091\u2082 \u23a5\n",
"\u23a2h = x\u2080 \u1d63, 0 = v\u2080 \u1d63, 0 = - \u2500\u2500\u2500\u2500\u2500\u2500 + t\u2091\u2082\u22c5v\u2080 \u1d63 + x\u2080 \u1d63, v\u1d63(t\u2091\u2082) = -g\u22c5t\u2091\u2082 + v\u2080 \u1d63\u23a5\n",
"\u23a3 2 \u23a6"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def extract_equality(eqs, s):\n",
" \"\"\" Based on equality system eqs, extract a formula for s;\n",
" one would expect sym.solve() to just do it, but it cannot solve\n",
" h=x0_r for x0_r, apparently! \"\"\"\n",
" vals = sym.solve(eqs, s, dict=True)\n",
" try:\n",
" vals = vals[0] # in case of multiple solutions, go with the first one\n",
" except:\n",
" pass # single solution\n",
" if s in vals:\n",
" val = vals[s]\n",
" return val\n",
" for eq in eqs:\n",
" if eq.lhs == s:\n",
" return eq.rhs\n",
" elif eq.rhs == s:\n",
" return eq.lhs\n",
" return None"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 44
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"v_r_eq = extract_equality(eqs_var3, v_r(t_e2))\n",
"v_r_eq"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$- g t_{e2} + v_{0 r}$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAGUAAAARBAMAAAA24X8rAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMlSJdrsime9m\nq0Tz+RmlAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABjklEQVQoFY1RMUvDQBT+jjSxbUxTLFScWosu\nTgXFRZD+g2aoOIgYOljpVBApFoW6FpSMbq0KOjm7dnKQopmMg0MGEQfBBhTs0nrJXaBNofiGe+/7\nvvdx794BI5EwRuC/wE6way5IjOPLILUZJMbxapCa7BFLB2cvv1bAxD3JGyTaAYnCPTRbYpfx5Uac\nN3CPvgXBnCrpnOVJdKBq0bSHJENhBcA8Ee0Kon6PbdY8s+zGAuQ68oage6RghHpM5R6CO8S0Faj+\n9UzNt7GPlO0B2Y703aKYyaxlMku0ijmYIj3Imqf7x5OBBr5AkKxWADopC/6eaBZSyIHQfugcG74F\n9Dd/UESBzBMTEKjPC+4Jmyi4nspjX7C5BKQMpYdbUlGsI8qVfZ57pDTR6Rvlw9m6r9Acs3azOK9C\ntimYbtHDC+7BcwfkG6qt+AMwOdxys5pDHO94YxzfGwPrdG9yjgtuyvGlhTVihhY3Trj0OdRSo//T\nHMKSg1MPEovONxh0hzS/lK4v8OEDmsXXmjYEJ5Z//jdYmRh2T/8AAAAASUVORK5CYII=\n",
"prompt_number": 45,
"text": [
"-g\u22c5t\u2091\u2082 + v\u2080 \u1d63"
]
}
],
"prompt_number": 45
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"while v_r_eq.free_symbols - set(input_symbols):\n",
" s = next(iter(v_r_eq.free_symbols - set(input_symbols)))\n",
" if s in input_symbols:\n",
" continue\n",
" sub = extract_equality(eqs_var3, s)\n",
" print(s, sub)\n",
" if sub is None:\n",
" raise ValueError('Cannot find solution of ' + str(eqs_var3) + ' for free variable ' + str(s))\n",
" v_r_eq = v_r_eq.subs({s: sub})\n",
"v_r_eq"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"(t_e2, (v0_r - sqrt(2*g*x0_r + v0_r**2))/g)\n",
"(x0_r, h)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(v0_r, 0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
},
{
"latex": [
"$$\\sqrt{2} \\sqrt{g} \\sqrt{h}$$"
],
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAFQAAAAaBAMAAADbF2buAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInarRM2ZVBDdiWbv\nuzJCz3LGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABpUlEQVQ4EYWSv0sDMRiG37v+ul7ttYuga0eX\nCi46taB/gF1c7aIFQSgIDoL0wMlB6igudlLUwdJJnEToICjUxa3Q/8AelPoLrF+S5i45qAaa5Pue\n95o8vQJiGPkRG+NKXwyOfBYp6litQmxaZaF9iFVCWC11Zh2rTN+HWLyqYSHSF70QOwSMzW5P5jUR\nYkePkgDXwAHsgWxoIsSwJgnYdRaBJ9lQRfhV3yWB2QTojEJPdDQRxqIfHKzQnKTPuutHfRHJbDoV\nMNs05dgOOHP5AhLBXm4/YLFK6wWYyRcB/hCiXyLJJO2OMQxYvYQFYvUOUg2eSXZElF215oJUJKv1\n0CUW95B0eWZbJLnkMxwvYBvAA0E66I5nzHlaxiLON0z6bslOYfywTME94dFdGFkpmfKQLvvMGsC+\nt6h8u2BNOGWYWSmZ6CNT9Vmqj6nGLZWxtkszZq/Ol3wRy0Mh67PIKjLFBpWJIU30Ckajz0Bkee6S\nNQVLN2FvsRIlPotJigCvvKEyJca3QtIBqfw3hOSNm2Y/3d9DSO601P/hhCfGkhOo3p4o8gseKX2R\nvuDYRQAAAABJRU5ErkJggg==\n",
"prompt_number": 46,
"text": [
" ___ ___ ___\n",
"\u2572\u2571 2 \u22c5\u2572\u2571 g \u22c5\u2572\u2571 h "
]
}
],
"prompt_number": 46
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment