I am attempting a very simple sympy example as following ;
from sympy import *
x,y,z = symbols('x,y,z', real=True)
expr = 256 * exp(-Pow((x-(y/2)/(z/2)),2))
solve(expr,x)
trying to get x in terms of y and z. Execution results in an empty list. What am I doing wrong ?
CodePudding user response:
Your equation doesn't have any solutions for x
so solve
returns an empty list. Here is your equation:
In [2]: expr
Out[2]:
2
⎛ y⎞
-⎜x - ─⎟
⎝ z⎠
256⋅ℯ
When you pass that to solve
you are asking "for what values of x
is this expression equal to zero?". The exponential function exp(t)
is nonzero for all possible complex numbers t
. Since there are no finite values of x
for which the given expression is zero solve
returns an empty list meaning that there are no solutions:
In [3]: solve(expr, x)
Out[3]: []
If you make an equation that actually has solutions then solve
can potentially find them for you:
In [6]: eq = Eq(expr, 1)
In [7]: eq
Out[7]:
2
⎛ y⎞
-⎜x - ─⎟
⎝ z⎠
256⋅ℯ = 1
In [8]: solve(eq, x)
Out[8]:
⎡y ________ y ________⎤
⎢─ - 2⋅√2⋅╲╱ log(2) , ─ 2⋅√2⋅╲╱ log(2) ⎥
⎣z z ⎦
CodePudding user response:
Let fx = Symbol('fx', real=True)
. You will get solve(exp(fx),fx) == []
because there is no real value of fx
that can make exp(fx)
zero. If there were such a value, say fx = 2
then you could try solve(fx - 2, x)
to find the value for x
...but if there is no value for fx
there is no value you can find for x
.