用Python对每个Symb解方程(字符串)

2024-10-16 22:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我把它作为一个字符串来求解。我不知道等式中有多少个符号,也不知道它们的签名是什么。典型的符号可以是“mm”、“cm”、“x”或类似的符号。该函数应该返回某种数组/json以及已求解的等式。在

它应该是怎样的一个小例子:

solve("x/2=4")
>> ["x=8"]
>>
solve("x + 2 = y - 1")
>> ["x=y-3", "y=x+3"]

我尝试使用sypy模块来实现这一点,但是我没有找到一种方法来输入上面这样的动态字符串。SymPy似乎只接受“硬编码”符号。在

注意:字符串来自一个“系统argv“-参数。在


Tags: 模块方法函数字符串json符号cm动态
2条回答

SymPy可以用sympify解析字符串,但它的表达式格式是Eq(x/2, 4),而不是{}。因此需要进行一些预处理:用Eq()将字符串括起来,并用逗号替换“=”。在

eq = "x/2=4"
sympy_eq = sympify("Eq(" + eq.replace("=", ",") + ")")
solve(sympy_eq)   # [8]

以及

^{pr2}$

在后一种情况下,SymPy选择了一个变量来求解。要选择它应该是哪一个,可以提供一个符号:

solve(sympy_eq, Symbol('y'))   # [x + 3]

或者,要解决每个符号:

[solve(sympy_eq, sym, dict=True) for sym in sympy_eq.free_symbols] 

返回[[{y: x + 3}], [{x: y - 3}]]。列表是嵌套的,因为每个符号可能会出现多个解决方案。如有必要,展开嵌套列表。在

solve的选项list=True和{}对于强制执行特定形式的输出非常方便。在

答案很可能是两个不同的部分。在

解析:

解析意味着将一些输入转换成可用的输出,在您的例子中,输入是一些字符串,输出是sympy可以处理的东西。例如,一个简单的解析步骤是通过执行int(your_string)将字符串转换为整数。在你的例子中,你应该迭代你的字符串,找到变量,单位等,例如通过比较字典或字符串列表。解析任意输入是相当困难的,因此最好的方法是从一组小的选项开始,例如,通过与列表variables=['x','y','z']比较,在字符串中搜索xy和{}等典型变量名的出现。在

计算

解析完成后,只需将所有内容插入sympy使用的数字处理/解算器。在

为了了解这样一个系统在正确操作的情况下如何工作,您可以看看wolframalpha。他们做了一个相当好的解析/自然语言处理,并试图从那里猜出要做什么。在

相关问题 更多 >