При следующих импортах:
from sympy import plot_implicit, latex, lambdify, Float
from sympy import symbols
from sympy.abc import x
from sympy.parsing.latex import parse_latex
E = symbols('E')
equation = E**x*x - 1
f = lambdify(x, equation, 'numpy')
print(f.__doc__)
....
Я получаю:
1450:~/mypy$ python3 stack61370217.py
Created with lambdify. Signature:
func(x)
Expression:
E**x*x - 1
Source code:
def _lambdifygenerated(x):
return (E**x*x - 1)
Imported modules:
Traceback (most recent call last):
File "stack61370217.py", line 29, in <module>
if fd[a]*fd[c] > 0: # Opposite sign a and c <-- ERROR
File "/usr/local/lib/python3.6/dist-packages/sympy/core/relational.py", line 376, in __nonzero__
raise TypeError("cannot determine truth value of Relational")
TypeError: cannot determine truth value of Relational
Если вместо
from sympy import E
выражение с лямбдомизацией становится
def _lambdifygenerated(x):
return (x*exp(x) - 1)
он запускается, производя c
0.00390625
Вы не показываете определение E
. Я не знаю, производит ли латексный анализ это или нет. У меня не достаточно пакетов для запуска. В любом случае, этот символ c E
распространяется на выражение numpy
,
In [86]: E=symbols('E')
In [87]: def f(x):
...: return E**x*x-1
...:
In [88]: f(10)
Out[88]:
10
10⋅E - 1
In [89]: f(10)*f(20)>0
Out[89]:
⎛ 10 ⎞ ⎛ 20 ⎞
⎝10⋅E - 1⎠⋅⎝20⋅E - 1⎠ > 0
In [90]: if f(10)*f(20)>0: pass
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-90-14ce5e03fbac> in <module>
----> 1 if f(10)*f(20)>0: pass
/usr/local/lib/python3.6/dist-packages/sympy/core/relational.py in __nonzero__(self)
374
375 def __nonzero__(self):
--> 376 raise TypeError("cannot determine truth value of Relational")
377
378 __bool__ = __nonzero__
TypeError: cannot determine truth value of Relational
Если вместо E
определен симпли e
, это переводится как exp(x)
и все идет хорошо.