python - 使用 SymPy 一般解析和求解方程

标签 python sympy

我希望能够解析字符串方程(等于 0),然后使用我有权访问的变量字典来求解它们。

例如:

s = '(x/z)-y'
eq = parse(s)
eq.solve({'x': 10, 'y': 5})
print(eq)
>>> {'z': 2}

现在我在一个月前编写了执行类似操作的代码,但我找不到它了。但是我确实记得我使用了 SymPy 及其 sympify 函数,以及它的 solve 函数。我已经查看了有关这些功能的文档,但我无法全神贯注地思考如何让它们按我想要的方式工作。

还有一个问题: 是否有可能以某种方式包装变量,以便我可以使用不仅仅是一个字母的东西来表示它们? 示例:我可以使用 '{myvar-42}' 而不仅仅是 'x'

编辑:

好吧,我终于成功地编写了一些代码来完成我想做的事情:

eq = sympify('(x/y)-z', locals={'x': 10, 'z': 5})
solution = solve(eq, dict=True)
print(solution)
>>> [{'z': 2}]

但我的“额外”问题仍然存在。

最佳答案

如您所见,sympify 将字符串转换为 SymPy 表达式。

要回答您的其他问题,符号名称可以是任何东西,但 sympify 只会将有效的 Python 标识符解析为符号名称。但你可以做到

>>> Symbol('{myvar-42}') + 1
{myvar-42} + 1

请注意,有效的 Python 标识符不必是单个字母。它们可以是不以数字开头的字母、数字和下划线的任意组合,例如 x_2abc123

如果您仍需要进行字符串解析但希望将无效的 Python 标识符用作符号名称,那么最简洁的方法可能是使用普通名称并将它们替换为其他名称,例如

>>> expr = sympify('x + 1')
>>> expr.subs(Symbol('x'), Symbol('{myvar-42}')
{myvar-42} + 1

最后,要用字母替换符号,您可以使用 locals 参数来进行 sympify,正如您所做的那样,或者,如果您以后想替换它们,请使用 subs:

>>> x, y, z = symbols('x y z')
>>> expr = sympify('x/z - y')
>>> expr.subs({x: 10, y: 5})
10/z - 5

关于python - 使用 SymPy 一般解析和求解方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21076132/

相关文章:

python - 使用glob定位模块,然后动态导入模块

Python - 按键值对字典列表进行分组,将单独的键值计为字典?

python - 在Python中读取npy数据文件并导出为文本文件

python - 来自 sympy import 情节失败

python - Python中符号函数的数值积分

python - 在 QTabBar 中的各个选项卡上设置并保留颜色

python - 从带有文件输出的脚本运行 Scrapy

python - 使用条件和函数向量化嵌套循环

python - sympy - 无法使 nsolve 方法起作用

python - 在 Sympy 中生成勒让德多项式