1

我正在使用 sympy 使用pretty_print命令编写上标。这需要与一些变量(代数(x,y 等))一起导入,以使 pretty_print 命令起作用。如果您不从 sympy.abc 导入变量(代数),则需要将这些字母放在引号''中,其中 pretty_print 命令不起作用。

因此,例如,如果我在屏幕上打印,我需要导入x以便可以在程序中使用它。像这样:

import sympy  
from sympy import pretty_text as exp   
from sympy.abc import x

equation= x**2

exp(equation)

这将在屏幕上打印 x²。问题是如果我给 x 赋值,那么它将不再等于它自己。如果我在从 sympy.abc 导入后直接打印 x,它会这样做-

(假装这是空闲)>

>>> import sympy  
>>> from sympy import pretty_text as exp   
>>> from sympy.abc import x

>>> x
x 

但是,如果 a make x 1

>>> import sympy  
>>> from sympy import pretty_text as exp   
>>> from sympy.abc import x

>>> x
x 
>>> x = 1
>>>x
1

然后我需要x再次平方,

>>> import sympy  
>>> from sympy import pretty_text as exp   
>>> from sympy.abc import x

>>> x
x 
>>> x = 1
>>>x
1 
>>> equation = x**2
>>> exp(equation)
1

它只会平方 1。即使它尝试再次制作它也不相同,因为它周围x = 'x'会有。''我只能通过再次导入来解决这个问题。但是,在我的程序中,我最终可能需要再次导入任何字母,所以我需要导入一个变量。我试过了

from sympy.abc import x[0]

但这是无效的。那么,有什么办法可以导入不同的字母吗?

4

3 回答 3

2

如果您想保留符号,请不要为它们分配任何值 - 继续使用符号,直到您真正需要解决方案。

例如:

In [15]: equation=sympy.sin(x**2)

In [16]: exp(equation)
   ⎛ 2⎞
sin⎝x ⎠

In [17]: result = equation.subs({'x': 2})

In [18]: result
Out[18]: sin(4)

In [19]: result.evalf()
Out[19]: -0.756802495307928

这不会改变x本身 - 稍后:

In [23]: exp(sympy.log(x**.5))
   ⎛ 0.5⎞
log⎝x   ⎠

只要需要,就可以将您的方程式保持在符号形式中,并且不要担心值本身。

于 2013-02-08T00:40:18.577 回答
1

您不需要在 SymPy 中导入符号名称。abc 模块只是为了方便单字母符号名称而存在。

只需使用您想要的任何名称创建 Symbol 对象(可以是任何字符串,包括动态创建的字符串)。

>>> x = Symbol('x')
>>> x
x

另请注意,您为符号指定的名称与保存该符号的 Python 变量的名称不必相关。实际上,符号不知道它绑定到什么 Python 变量名(这就是 Python 中的一切工作方式,而不仅仅是 SymPy)

>>> x = Symbol('y')
>>> x
y 

您还可以使用symbols一次创建多个符号

>>> x, y, z = symbols('x y z')
于 2013-02-08T17:52:55.963 回答
0

如果您改为:

import sympy.abc
x = sympy.abc.x

然后,每当您需要原始值时,只需使用sympy.abc.x. 如果需要动态获取名称:

getattr(sympy.abc, "x")

文字可以用任何变量替换。

于 2013-02-08T00:36:49.920 回答