{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Higher-Order Equation of Motion\n",
"\n",
"Our goal is to solve the equation of motion for the high-order acceleration $f$, a given higher-order Lagrangian $L$.\n",
"\n",
"Related worksheet: [https://cloud.sagemath.com/projects/b04b5777-e269-4c8f-a4b8-b21dbe1c93c6/files/Two%20Equations%20of%20Lagrange.sagews](https://cloud.sagemath.com/projects/b04b5777-e269-4c8f-a4b8-b21dbe1c93c6/files/Two%20Equations%20of%20Lagrange.sagews)\n",
"\n",
"Calculations are done using [SageManifolds](http://sagemanifolds.obspm.fr/)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
],
"source": [
"%display latex\n",
"from sage.manifolds.utilities import exterior_derivative as d\n",
"def ev(N): return (lambda x: N.contract(x))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Variables"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
],
"source": [
"M = Manifold(5,'M')\n",
"coord. = M.chart()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Vectors (partial derivatives)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
],
"source": [
"[Dt,Dx,Dv,Da,Ds] = coord.frame()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Forms"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
],
"source": [
"[dt,dx,dv,da,ds] = coord.coframe()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## General Lagrangian ##"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 5,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"L = M.scalar_field(function('L')(*list(coord))); L.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Kinematics\n",
"\n",
"$f$ is an unknown function that is the analogue of acceleration for a higher-order equation of motion."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 6,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"f = M.scalar_field(function('f')(*list(coord))); f.display()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 7,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"N = Dt + v*Dx + a*Dv + s*Da + f*Ds; N.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"The Equation of Lagrange can be defined with the aid of the following auxillary fields"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 8,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"r=Ds(L); r.display()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 9,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"q=Da(L)-N(r); q.display()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 10,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"p=Dv(L)-N(q); p.display()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 11,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"eq1 = (N(p)-Dx(L)); eq1.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Number of terms in this expression:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 12,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"len(eq1.expr().expand())"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"We want to solve this equation (eq1 = 0) for $f$ in terms of $L$.\n",
"\n",
"The equation can also be written in the following form:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
],
"source": [
"eq2 = N(Dv(L)) - N(N(Da(L))) + N(N(N(Ds(L)))) - Dx(L)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 14,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"eq1 == eq2"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"But we would prefer to write it as a polynomial in $N(N(f))$, $N(f)$, and powers of $f$. If we write $f$ instead of $N(Ds(L))$, $N(Da(L))$ and $N(Dv(L))$ above then we get new coefficients and terms in powers of $f$."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 15,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"N(N(f)).display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Terms 2$^\\textit{nd}$ order in $f$ arise from the Liebniz rule applied to the differential operator $N^2$ on the term $Ds\\ f$ in $N(Ds(L))$. For example"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 16,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"t2 = eq1.expr().coefficient(diff(f.expr(),t,t))*diff(f.expr(),t,t); M.scalar_field(t2).display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"The necessary coefficient can be read from the above."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 17,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"c2 = (Ds(Ds(L))*N(N(f))); c2.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"After removing the term $c2$ above, the remaining terms are at most first-order in $f$."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 18,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"eq1a = eq1-c2; eq1a.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Similarly the first-order terms arise from $N$ applied to the term $Ds\\ f$ in $N(Da(L))$."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 19,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"N(f).display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"For example:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 20,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"t1 = eq1a.expr().coefficient(diff(f.expr(),t))*diff(f.expr(),t); M.scalar_field(t1).display()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 21,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"x1 = eq1a.expr().coefficient(diff(f.expr(),x))*diff(f.expr(),x); M.scalar_field(x1).display()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 22,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"v1 = eq1a.expr().coefficient(diff(f.expr(),v))*diff(f.expr(),v); M.scalar_field(v1).display()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 23,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"a1 = eq1a.expr().coefficient(diff(f.expr(),a))*diff(f.expr(),a); M.scalar_field(a1).display()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 24,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"s1 = eq1a.expr().coefficient(diff(f.expr(),s))*diff(f.expr(),s); M.scalar_field(s1).display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Liebniz rule applies $N$ to these coefficients."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 25,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"c1 = 3*N(Ds(Ds(L)))*N(f); c1.display()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 26,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"bool(c1.expr()==t1+x1+v1+a1+s1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Removing the 1$^\\textit{st}$ order terms:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 27,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"eq1b = eq1a-c1; eq1b.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Only terms algebraic in $f$ remain. The number of terms is:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 28,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"len(eq1b.expr().expand())"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"The term of highest degree comes from $N^3$ applied to $Ds(L)$:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 29,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"t0 = eq1b.expr().coefficient(f.expr()^3)*f.expr()^3; M.scalar_field(t0.expand()).display()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 30,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"cf3 = Ds(Ds(Ds(Ds(L))))*f^3; cf3.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Removing the 3$^{rd}$ degree term:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 31,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"eq1c = eq1b-cf3; eq1c.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"leaves terms of at most 2$^{nd}$ degree. These 2$^{nd}$ degree terms come for $N^2$ applied to $Da(L)$,"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 32,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"t0 = eq1c.expr().coefficient(f.expr()^2)*f.expr()^2; M.scalar_field(t0.expand()).display()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 33,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"cf2 = N(Ds(Da(L)))*f; cf2.display()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 34,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"cf2 = Ds(Ds(Da(L)))*f^2; cf2.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"We cannot solve this for `f` algebraically since `f` appears as derivatives."
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Lagrangian linear in s."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 35,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"ll=list(coord);ll.remove(s);ll"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 36,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"Ll = M.scalar_field(function('L0')(*ll)) + s * M.scalar_field(function('L1')(*ll)); Ll.display()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 37,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"solve(eq1.expr().substitute_function(L.expr().operator(),Ll.expr().function(*list(coord))),f.expr())[0]"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Second Equation of Lagrange"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 38,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"(Dt(L)-(N(L)-(p*a+q*s+r*f)-(v*N(p)+a*N(q)+s*N(r)))).display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Multiplying by $v$"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 39,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"v*(N(p)-Dx(L)) == (Dt(L)-(N(L)-(p*a+q*s+r*f)-(v*N(p)+a*N(q)+s*N(r))))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## Checking the calculations from the paper ##"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
],
"source": [
"L = M.scalar_field(function('L')(*list(coord)))\n",
"p = M.scalar_field(function('p')(*list(coord)))\n",
"q = M.scalar_field(function('q')(*list(coord)))\n",
"r = M.scalar_field(function('r')(*list(coord)))\n",
"t=M.scalar_field(t)\n",
"x=M.scalar_field(x)\n",
"v=M.scalar_field(v)\n",
"a=M.scalar_field(a)\n",
"s=M.scalar_field(s)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Action differential Form"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 41,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"alpha = L*dt + p*(dx-v*dt) + q*(dv-a*dt) + r*(da-s*dt)\n",
"alpha.display()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 42,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"alpha == L*dt+p*dx+q*dv+r*da-(p*v+q*a+r*s)*dt"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 43,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"d(alpha).display()"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 44,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"d(alpha) == d(L).wedge(dt) + d(p).wedge(dx) + d(q).wedge(dv) + d(r).wedge(da) - d(p*v + q*a + r*s).wedge(dt)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 45,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"ev(alpha)(N)==L"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 46,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"Omega = -(p*dx+q*dv+r*da).wedge(d(t)); Omega.display()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 47,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"alpha == L*dt + ev(N)(Omega)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Equation of Motion ($E=0$)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 48,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E = ev(N)(d(alpha))\n",
"E.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Rewriting it in various ways."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 49,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E == N(L)*dt - N(t) * d(L) + N(p)*dx - N(x)*d(p) + N(q)*dv - N(v)*d(q) + N(r)*da - N(a)*d(r) - N(p*v+q*a+r*s)*dt + N(t)*d(p*v+q*a+r*s)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 50,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E == N(L)*dt - d(L) + N(p)*dx - v*d(p) + N(q)*dv - a*d(q) + N(r)*da - s*d(r) - N(p*v+q*a+r*s)*dt + d(p*v+q*a+r*s)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 51,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E == N(L-p*v-q*a-r*s)*dt - d(L - p*v - q*a- r*s) - v*d(p) - a*d(q) - s*d(r) + N(p)*dx + N(q)*dv + N(r)*da"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 52,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"d(p*v) == v*d(p) + p*d(v)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 53,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"d(q*a) == a*d(q) + q*d(a)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 54,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"d(r*s) == s*d(r) + r*d(s)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 55,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E == N(L - p*v - q*a - r*s)*dt - d(L) + p*dv + q*da + r*ds + N(p)*dx + N(q)*dv + N(r)*da"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 56,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"N(p*v) == p*N(v) + v*N(p)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 57,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E == N(L)*dt - (p*a+q*s+r*f)*dt -(v*N(p) + a*N(q) + s*N(r) )*dt - d(L) + p*dv + q*da + r*ds + N(p)*dx + N(q)*dv + N(r)*da"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 58,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"E == ( N(L) - (p*a + q*s + r*f) - (v*N(p) + a*N(q) + s*N(r)))*dt + N(p)*dx + (N(q)+p)*dv + (N(r)+q)*da + r*ds - d(L)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 59,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"d(L) == Dt(L)*dt + Dx(L)*dx + Dv(L)*dv + Da(L)*da + Ds(L)*ds"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 60,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"r=Ds(L); r.display()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 61,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"q=Da(L)-N(r); q.display()"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 62,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"p=Dv(L)-N(q); p.display()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"## For example: The Schiff and Poirier Lagrangian ##"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 63,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"hbar = var('hbar',latex_name='\\hbar')\n",
"m = var('m')\n",
"V = M.scalar_field(function('V')(var('x')))\n",
"Lp = 1/2*m*v^2 - V - hbar^2/4/m*(s/v^3-5/2*a^2/v^4); Lp.display()"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 64,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"Lp1 = Ds(Lp); Lp1.display()"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 65,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"Lp0 = Lp - s * Lp1; Lp0.display()"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 66,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"Lp == Lp0 + s*Lp1"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 67,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"eq1p = eq1.expr().substitute_function(L.expr().operator(),Lp.expr().function(*list(coord))); eq1p"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"execution_count": 68,
"metadata": {
},
"output_type": "execute_result"
}
],
"source": [
"solve(eq1p,f.expr())"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"deletable": true,
"editable": true
},
"outputs": [
],
"source": [
]
}
],
"metadata": {
"kernelspec": {
"display_name": "SageMath (stable)",
"name": "sagemath"
},
"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.13"
}
},
"nbformat": 4,
"nbformat_minor": 0
}