Stack Overflow Asked by Mel on December 3, 2020
Im working on a project with sympy. I want to save some equations in a JSON file. They are saved as a string (for example: "R * C * 1.1, ti"). I have tried to convert the string to a equation (with sy.S() and sy.Eq()), but it didn’t work.
Here is my code:
import sympy as sy
def solve():
R = sy.S(2)
C = sy.S(1)
ti = sy.S("ti")
equation = sy.Eq(sy.S("R * C * 1.1, ti"))
solution = sy.solve(equation, manual = 1)
print(solution)
solve()
I get this warning and a empty solution (when i exchange the string with a normal formula, it works):
Eq(expr) with rhs default to 0 has been deprecated since SymPy 1.5.
Use Eq(expr, 0) instead. See
https://github.com/sympy/sympy/issues/16587 for more info.deprecated_since_version="1.5"
[]
There are several issues:
sy.S("R * C * 1.1, ti")
doesn't look at existing variables, but creates its own variables that happen to have the external names "R", "C" and "ti.sy.S("R * C * 1.1, ti")
creates a tuple (R * C * 1.1, ti)
sy.Eq()
expects two parameters: the left-hand side and the right-hand side of an equation. Older versions of sympy where also happy with just the left-hand side and imagined the right-hand side to be 0
. This still works, but is strongly discouraged as it won't work any more in future versions.sy.Eq(sy.S("R * C * 1.1, ti"))
, there is only one parameter (a tuple) for sy.Eq
. So this provokes the deprecated warning.*
operator: func(*(a,b))
calls func
with two parameters: func(a,b)
. On the other hand func((a,b))
calls func
with just one parameter, the tuple (a,b)
.sy.S("R * C * 1.1, ti")
, a dictionary that maps strings to values can be used.True
and False
are represented internally as 1
and 0
, it is highly recommended to explicitly use the names. Among others, this helps with readability and maintainability of code.import sympy as sy
def solve():
value_dict = {"R": 2, "C": 1}
equation = sy.Eq(*sy.S("R * C * 1.1, ti")).subs(value_dict)
solution = sy.solve(equation, manual=True)
print(solution)
solve()
If you need ti
to be an accessible sympy variable, you can add it to the dictionary:
ti = sy.symbols("ti")
value_dict = {"R": 2, "C": 1, "ti": ti}
Correct answer by JohanC on December 3, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP