我有一个像这样的python字典:
A = {'a':'x**2', 'b':'a*x', 'c':'b'}
此处x
是sympy
变量。现在我想得到这样的衍生物:
da/dx = 2*x, db/dx = 3*x**2, dc/dx = 3*x**2
因此,a
,b
和c
必须被视为三种不同表达式的LHS,x
是唯一的sympy
变量。
我尝试使用sympify
,但只将RHS从字符串转换为表达式。为了区分我想使用sy.diff
。我怎么能这样做?
答案 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
,而不是新的。