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)


$$\frac{\left(4 q - t\right)^{2}}{4 m^{2} t}$$

In [12]:
e2 = simplified(q**2 / m**2 / k)


$$\frac{q^{2}}{k m^{2}}$$

In [16]:
t0 = simplified(solve(e1-e2, t)[1])


$$\frac{2}{k} \left(q^{\frac{3}{2}} \sqrt{4 k + q} + q \left(2 k + q\right)\right)$$

In [15]:
solve(2*exp(-2*e1)-4*exp(-2*e2), t)


Out[15]:
$$\left [ \frac{1}{k} \left(- k m^{2} \log{\left (2 \right )} + 4 k q + 2 q^{2} - \sqrt{- \left(k m^{2} \log{\left (2 \right )} - 2 q^{2}\right) \left(- k m^{2} \log{\left (2 \right )} + 8 k q + 2 q^{2}\right)}\right), \quad \frac{1}{k} \left(- k m^{2} \log{\left (2 \right )} + 4 k q + 2 q^{2} + \sqrt{- \left(k m^{2} \log{\left (2 \right )} - 2 q^{2}\right) \left(- k m^{2} \log{\left (2 \right )} + 8 k q + 2 q^{2}\right)}\right)\right ]$$

In [19]:
t0


Out[19]:
$$\frac{2}{k} \left(q^{\frac{3}{2}} \sqrt{4 k + q} + q \left(2 k + q\right)\right)$$

In [22]:
t1 = simplified(t0 + 2*q)


$$\frac{2}{k} \left(3 k q + q^{\frac{3}{2}} \sqrt{4 k + q} + q^{2}\right)$$

In [31]:
pr = simplified(10*exp(-2*q**2/m**2/k))


$$10 e^{- \frac{2 q^{2}}{k m^{2}}}$$

In [34]:
solve(pr-6*q,q)


---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-34-3bc2447134af> in <module>()
----> 1 solve(pr-6*q,q)

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in solve(f, *symbols, **flags)
   1063     ###########################################################################
   1064     if bare_f:
-> 1065         solution = _solve(f[0], *symbols, **flags)
   1066     else:
   1067         solution = _solve_system(f, symbols, **flags)

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in _solve(f, *symbols, **flags)
   1632 
   1633     if result is False:
-> 1634         raise NotImplementedError('\n'.join([msg, not_impl_msg % f]))
   1635 
   1636     if flags.get('simplify', True):

NotImplementedError: multiple generators [q, exp(q**2/(k*m**2))]
No algorithms are implemented to solve equation -6*q + 10*exp(-2*q**2/(k*m**2))

In [35]:
firstOrderCondition(6*q+pr, q)


$$6 - \frac{40 q}{k m^{2}} e^{- \frac{2 q^{2}}{k m^{2}}}$$
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-35-cef4dbea941b> in <module>()
----> 1 firstOrderCondition(6*q+pr, q)

<ipython-input-7-1929b16f5e40> in firstOrderCondition(exp, var, iSelectedSolution)
     14     diffExp = simplify(diff(exp, var))
     15     display(diffExp)
---> 16     solutions = solve(diffExp, var)
     17     display(solutions)
     18     if iSelectedSolution is not None:

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in solve(f, *symbols, **flags)
   1063     ###########################################################################
   1064     if bare_f:
-> 1065         solution = _solve(f[0], *symbols, **flags)
   1066     else:
   1067         solution = _solve_system(f, symbols, **flags)

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in _solve(f, *symbols, **flags)
   1632 
   1633     if result is False:
-> 1634         raise NotImplementedError('\n'.join([msg, not_impl_msg % f]))
   1635 
   1636     if flags.get('simplify', True):

NotImplementedError: multiple generators [q, exp(q**2/(k*m**2))]
No algorithms are implemented to solve equation 6 - 40*q*exp(-2*q**2/(k*m**2))/(k*m**2)

In [36]:
firstOrderCondition(t1+pr, q)


$$\frac{12 \sqrt{q}}{\sqrt{4 k + q}} + 6 + \frac{4 q^{\frac{3}{2}}}{k \sqrt{4 k + q}} + \frac{4 q}{k} - \frac{40 q}{k m^{2}} e^{- \frac{2 q^{2}}{k m^{2}}}$$
$$\left [ \right ]$$
Out[36]:
$$\left [ \right ]$$

In [29]:
solve(6*q-pr,q)


---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-29-7060307ffa2f> in <module>()
----> 1 solve(6*q-pr,q)

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in solve(f, *symbols, **flags)
   1063     ###########################################################################
   1064     if bare_f:
-> 1065         solution = _solve(f[0], *symbols, **flags)
   1066     else:
   1067         solution = _solve_system(f, symbols, **flags)

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in _solve(f, *symbols, **flags)
   1632 
   1633     if result is False:
-> 1634         raise NotImplementedError('\n'.join([msg, not_impl_msg % f]))
   1635 
   1636     if flags.get('simplify', True):

NotImplementedError: multiple generators [q, exp(q**2/(k*m**2))]
No algorithms are implemented to solve equation 6*q - 10*exp(-2*q**2/(k*m**2))

In [37]:
solve( (t-q)**2/t - q**2/k, t )


Out[37]:
$$\left [ \frac{1}{2 k} \left(- q^{\frac{3}{2}} \sqrt{4 k + q} + q \left(2 k + q\right)\right), \quad \frac{1}{2 k} \left(q^{\frac{3}{2}} \sqrt{4 k + q} + q \left(2 k + q\right)\right)\right ]$$

In [39]:
firstOrderCondition(18*q+8*exp(-2*q**2*k / m**2),q)


$$- \frac{32 k}{m^{2}} q e^{- \frac{2 k}{m^{2}} q^{2}} + 18$$
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-39-0db57741d9de> in <module>()
----> 1 firstOrderCondition(18*q+8*exp(-2*q**2*k / m**2),q)

<ipython-input-7-1929b16f5e40> in firstOrderCondition(exp, var, iSelectedSolution)
     14     diffExp = simplify(diff(exp, var))
     15     display(diffExp)
---> 16     solutions = solve(diffExp, var)
     17     display(solutions)
     18     if iSelectedSolution is not None:

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in solve(f, *symbols, **flags)
   1063     ###########################################################################
   1064     if bare_f:
-> 1065         solution = _solve(f[0], *symbols, **flags)
   1066     else:
   1067         solution = _solve_system(f, symbols, **flags)

/usr/local/lib/python3.5/dist-packages/sympy/solvers/solvers.py in _solve(f, *symbols, **flags)
   1632 
   1633     if result is False:
-> 1634         raise NotImplementedError('\n'.join([msg, not_impl_msg % f]))
   1635 
   1636     if flags.get('simplify', True):

NotImplementedError: multiple generators [q, exp(k*q**2/m**2)]
No algorithms are implemented to solve equation -32*k*q*exp(-2*k*q**2/m**2)/m**2 + 18

In [47]:
eq = 18*m*sqrt(q*ln(k)/k) + 8/k**(2*q)
sol = simplified(firstOrderCondition(eq,q)[0])


$$- 16 k^{- 2 q} \log{\left (k \right )} + \frac{9 m}{\sqrt{k} \sqrt{q}} \sqrt{\log{\left (k \right )}}$$
$$\left [ - \frac{\operatorname{LambertW}{\left (- \frac{81 m^{2}}{64 k} \right )}}{4 \log{\left (k \right )}}\right ]$$
$$- \frac{\operatorname{LambertW}{\left (- \frac{81 m^{2}}{64 k} \right )}}{4 \log{\left (k \right )}}$$

In [49]:
simplified(eq.subs(q,sol))


$$8 e^{\frac{1}{2} \operatorname{LambertW}{\left (- \frac{81 m^{2}}{64 k} \right )}} + \frac{9 m}{\sqrt{k}} \sqrt{- \frac{\operatorname{LambertW}{\left (- \frac{81 m^{2}}{64 k} \right )}}{\log{\left (k \right )}}} \sqrt{\log{\left (k \right )}}$$
Out[49]:
$$8 e^{\frac{1}{2} \operatorname{LambertW}{\left (- \frac{81 m^{2}}{64 k} \right )}} + \frac{9 m}{\sqrt{k}} \sqrt{- \frac{\operatorname{LambertW}{\left (- \frac{81 m^{2}}{64 k} \right )}}{\log{\left (k \right )}}} \sqrt{\log{\left (k \right )}}$$

In [50]:
qopt = simplified(sqrt(m**2 / 4 / k * ln(16**2 * k / 18**2 / m**2)))


$$\frac{m}{2 \sqrt{k}} \sqrt{\log{\left (\frac{64 k}{81 m^{2}} \right )}}$$

In [53]:
eq1 = simplified(18*q + 8*exp(-2 *k*q**2/m**2))


$$18 q + 8 e^{- \frac{2 k}{m^{2}} q^{2}}$$

In [55]:
simplified(eq1.subs(q,qopt))


$$\frac{9 m}{\sqrt{k}} \left(\sqrt{\log{\left (\frac{64 k}{81 m^{2}} \right )}} + 1\right)$$
Out[55]:
$$\frac{9 m}{\sqrt{k}} \left(\sqrt{\log{\left (\frac{64 k}{81 m^{2}} \right )}} + 1\right)$$

In [58]:
arr = [{"x":[1,2,3],"y":[4,5,6]}, {"x":[11,21,31],"y":[41,51,61]}]; arr


Out[58]:
[{'x': [1, 2, 3], 'y': [4, 5, 6]}, {'x': [11, 21, 31], 'y': [41, 51, 61]}]

In [67]:
[v for a in arr for v in a["x"]]


Out[67]:
$$\left [ 1, \quad 2, \quad 3, \quad 11, \quad 21, \quad 31\right ]$$

In [ ]: