S在Sympy中的意义

时间:2013-11-13 10:22:35

标签: python sympy

我已经用S1代替S并且它运行正常。我无法理解S在同情中的重要性。

#!/usr/bin/env py
import itertools
import sys
import sympy

data = ['next_state=(D1&S1&~SE)|(~S1&~SE&D0)|(SE&SI))']

#data = ['next_state=(D1&S&~SE)|(~S&~SE&D0)|(SE&SI))']


data_1 = data[0].split(',')
com = None
for item in data_1:
    if item.find('next_state=')!= -1:
        item_list = item.split('=')
        item_op = item_list[len(item_list) -1].lstrip('(').rstrip(')')
        item_op = "(" + item_op + ")"
        print item_op
        expr = sympy.sympify(item_op)
        temp_list = [ str(data) for data in expr.free_symbols]
        temp_list.remove('D1')

        #print len(temp_list), temp_list
        for truth_values in sympy.cartes([0, 1], repeat=len(temp_list)):
            values = dict(zip(temp_list, truth_values))
            print  values.items(), expr.subs(values)
            if str(expr.subs(values)) =="D1":
                com = sorted(values.items())
                break
        print "com",com

2 个答案:

答案 0 :(得分:3)

S是SymPy的单身人士登记处。它实现了调用方法,这是sympify()的简写。使用S是构造有理数的最简洁方法

http://mattpap.github.io/scipy-2011-tutorial/html/gotchas.html

答案 1 :(得分:1)

您可以使用parse_expr对解析进行更精细的控制。特别是,如果您不想使用任何SymPy名称,可以将全局变量设置为{}

>>> from sympy.parsing.sympy_parser import parse_expr
>>> parse_expr('(D1&S&~SE)|(~S&~SE&D0)|(SE&SI)', global_dict={'Symbol':Symbol})
(SE ∧ SI) ∨ (D₀ ∧ ¬S ∧ ¬SE) ∨ (D₁ ∧ S ∧ ¬SE)

(包括Symbol是解析符号所必需的。)

或者,如果您知道不想使用的名称,可以在sympify

中覆盖它们。
>>> sympify('(D1&S&~SE)|(~S&~SE&D0)|(SE&SI)', {'S': Symbol('S')})
(SE ∧ SI) ∨ (D₀ ∧ ¬S ∧ ¬SE) ∨ (D₁ ∧ S ∧ ¬SE)