m4r*_*cde 5 python equation sympy
我必须在python中求解一个方程,该方程作为字符串输入获得。我不知道方程中有多少个符号或它们的签名是什么。典型的符号可以是“ mm”,“ cm”,“ x”或类似的符号。该函数应返回带有已解决方程式的某种array / json。
小示例它应该是什么样子:
solve("x/2=4")
>> ["x=8"]
>>
solve("x + 2 = y - 1")
>> ["x=y-3", "y=x+3"]
Run Code Online (Sandbox Code Playgroud)
我试图为此使用SymPy-Module,但没有找到输入像上面这样的动态字符串的方法。SymPy似乎只接受“硬编码”符号。
注意:字符串来自“ sys.argv”参数。
小智 9
SymPy可以解析与字符串sympify,但其方程格式是Eq(x/2, 4)不是x/2 = 4。所以一些预处理是必要的:用Eq( )逗号包围字符串并用逗号替换“=”。
eq = "x/2=4"
sympy_eq = sympify("Eq(" + eq.replace("=", ",") + ")")
solve(sympy_eq) # [8]
Run Code Online (Sandbox Code Playgroud)
和
eq = "x + 2 = y - 1"
sympy_eq = sympify("Eq(" + eq.replace("=", ",") + ")")
solve(sympy_eq) # [{x: y - 3}]
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,SymPy 选择了一个变量来解决。要选择它应该是哪一个,您可以提供一个符号:
solve(sympy_eq, Symbol('y')) # [x + 3]
Run Code Online (Sandbox Code Playgroud)
或者,求解每个符号:
[solve(sympy_eq, sym, dict=True) for sym in sympy_eq.free_symbols]
Run Code Online (Sandbox Code Playgroud)
返回[[{y: x + 3}], [{x: y - 3}]]。该列表是嵌套的,因为每个符号可能出现多个解决方案。如有必要,展平嵌套列表。
选项list=True和dict=Trueofsolve便于强制执行特定形式的输出。