解析彼此引用SymPy表达式的字符串字典

时间:2018-02-06 23:33:07

标签: python sympy

我有一个像这样的python字典:

A = {'a':'x**2', 'b':'a*x', 'c':'b'}

此处xsympy变量。现在我想得到这样的衍生物:

da/dx = 2*x, db/dx = 3*x**2, dc/dx = 3*x**2

因此,abc必须被视为三种不同表达式的LHS,x是唯一的sympy变量。

我尝试使用sympify,但只将RHS从字符串转换为表达式。为了区分我想使用sy.diff。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

这是一本棘手的词典,必须多次阅读以找出具体的含义。所以我将使用“重复的潜艇”助手:

def repeated_subs(expr, dict):
    while True:
        new_expr = expr.subs(dict)
        if new_expr == expr:
            return expr
        else:
            expr = new_expr

现在剩下的很简单:

x = symbols('x')    
B = {S(key): S(A[key], locals={'x': x}) for key in A}   # S is short for sympify
for key in B:
    pprint(Eq(Derivative(key, x), repeated_subs(key, B).diff(x)))

打印

d          
──(a) = 2⋅x
dx         
d          2
──(b) = 3⋅x 
dx          
d          2
──(c) = 3⋅x 
dx     

部分locals={'x': x}在这里是可选的,但通常需要确保字符串字符“x”映射到已创建的符号x,而不是新的。