SymPy:自动构建方程式

时间:2019-04-20 14:22:02

标签: python sympy nonlinear-functions

我在其他地方发现x = sp.symbols('x1:{}'.format(n)) 创建绑定到变量n的{​​{1}}变量的集合。 现在,我想使用https://docs.sympy.org/latest/modules/solvers/solveset.html#sympy.solvers.solveset.nonlinsolve 解决非线性方程组。我可以构造一个包含 我方程组中每一行的表达式, 例如像x之类的东西。 如何使x1**2+4*x2**3将它们转换成自己的方程式? 在文档中给出的示例中,我们编写 sympy之类的东西传递给[x1**2+4*x2**3,2*x1+3*x3], 但是如何构造这些表达式(它们的类型是什么?) 自动,无需对它们进行硬编码?

1 个答案:

答案 0 :(得分:1)

Add的对称实例中,以上表达式是符号乘积的总和。

documentation

  

所有符号事物都是使用Basic的子类实现的   类。首先,您需要使用Symbol(“ x”)或数字创建符号   使用Integer(5)或Float(34.3)。然后构造表达式   使用SymPy中的任何类。例如Add(Symbol(“ a”),Symbol(“ b”))   给出Add类的一个实例。您可以调用所有方法   特定的类支持。

在您的示例中,您需要将x1x2x3声明为符号:

x1, x2, x3 = symbols('x1 x2 x3')

一旦定义了符号,sympy就会自动将字符串转换为其自己的表达式以进行计算。要检查sympy表达式的类型,请使用sympify

a = Symbol("a")
b = Symbol("b")
c = 'a**2 + b'
print c
(a + b)**2
type(c)
# string

from sympy import sympify
sympify(c)
type(sympify(c))
# <′...′>