In [7]:
import numpy as np
import sympy
sympy.init_printing(use_unicode=True)
from sympy import *
from sympy.solvers import solve
from IPython.display import display
def simplified(exp):
simp = simplify(exp)
display(simp)
return simp
def firstOrderCondition(exp, var, iSelectedSolution=None):
diffExp = simplify(diff(exp, var))
display(diffExp)
solutions = solve(diffExp, var)
display(solutions)
if iSelectedSolution is not None:
solution = solutions[iSelectedSolution]
optimum = exp.subs(var, solution)
return simplified(optimum)
else:
return solutions
In [9]:
t,q,k,m=symbols("t q k m",positive=True)
In [11]:
e1 = simplified((t/2-2*q)**2 / m**2 / t)
In [12]:
e2 = simplified(q**2 / m**2 / k)
In [16]:
t0 = simplified(solve(e1-e2, t)[1])
In [15]:
solve(2*exp(-2*e1)-4*exp(-2*e2), t)
Out[15]:
In [19]:
t0
Out[19]:
In [22]:
t1 = simplified(t0 + 2*q)
In [31]:
pr = simplified(10*exp(-2*q**2/m**2/k))
In [34]:
solve(pr-6*q,q)
In [35]:
firstOrderCondition(6*q+pr, q)
In [36]:
firstOrderCondition(t1+pr, q)
Out[36]:
In [29]:
solve(6*q-pr,q)
In [37]:
solve( (t-q)**2/t - q**2/k, t )
Out[37]:
In [39]:
firstOrderCondition(18*q+8*exp(-2*q**2*k / m**2),q)
In [47]:
eq = 18*m*sqrt(q*ln(k)/k) + 8/k**(2*q)
sol = simplified(firstOrderCondition(eq,q)[0])
In [49]:
simplified(eq.subs(q,sol))
Out[49]:
In [50]:
qopt = simplified(sqrt(m**2 / 4 / k * ln(16**2 * k / 18**2 / m**2)))
In [53]:
eq1 = simplified(18*q + 8*exp(-2 *k*q**2/m**2))
In [55]:
simplified(eq1.subs(q,qopt))
Out[55]:
In [58]:
arr = [{"x":[1,2,3],"y":[4,5,6]}, {"x":[11,21,31],"y":[41,51,61]}]; arr
Out[58]:
In [67]:
[v for a in arr for v in a["x"]]
Out[67]:
In [ ]: