Created
March 10, 2015 18:50
-
-
Save pasky/b03df4f40b23da64ca1e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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