【发布时间】:2019-08-02 22:07:10
【问题描述】:
我想扩展SymPy 中的Symbols 类,以便添加布尔属性。我可以为单个符号完成此操作(请参阅我的问题 here,以及其他人的问题 here)。完成此操作的代码在下面重复:
from sympy.core.symbol import Symbol
class State(Symbol):
def __init__(self, name, boolean_attr):
self.boolean_attr = boolean_attr
super(State, self).__init__(name)
但是,这个解决方案的问题在于,当我定义一个多项式或某种涉及多个 State 的表达式时,这是我对 Symbol 类的扩展,如您在上面看到的,我需要当我评估它们时,它们都在同一个域中:
单独定义的符号不能用数值计算:
x=sympy.symbols('x')
y=sympy.symbols('y')
some_poly = Poly(x+y)
print some_poly.evalf(subs=dict(zip([sympy.symbols('x, y')],[1,4])))
>>> Poly(x + y, x, y, domain='ZZ')
在同一域中定义的符号可以进行数值计算:
x, y = sympy.symbols('x, y')
some_poly = Poly(x+y)
print some_poly.evalf(subs=dict(zip(sympy.symbols('x,y'),[1,1])))
>>> 2.00000
这是我的问题:如何在我的class State 中实现同样的行为?理想情况下,它的工作方式如下:
x=State('x', boolean_attr=True)
y=State('y', boolean_attr=False)
states_poly = Poly(x+y)
print states_poly.evalf(subs=dict(zip(States('x,y'),[1,1])))
>>> 2.00000
但这不起作用,因为Sympy 将 x 和 y 解释为位于不同的域中。我该怎么做:
- 让
Sympy将x和y解释为在同一个域中 或 -
扩展
State类以能够在同一域中定义符号,例如:x, y =State('x, y', boolean_attr=[True, False])
如何允许对使用扩展类定义的多项式进行数值计算?
【问题讨论】:
标签: python python-2.7 oop sympy