sympy .subs() 内置函数不起作用

sympy .subs() built-in function doesn't work

我正在尝试使用 python 实现多元链式法则,当我尝试使用内置的 sympy 函数 expr.subs() 替换其中一个元素时,我不会得到一个答案。

练习如下:

使用链式法则计算以下函数的 df/dx:

a = x^2

b = exp(a)

c = a + b

d = log(c)

e = sin(c)

f = d + e ⁡ 这是代码:

a, b, c, d, e, f = sym.symbols('a b c d e f')

f = d + e

dfd = sym.diff(f, d)
dfe = sym.diff(f, e)
df = sym.Matrix([[dfd, dfe]])

d = sym.log(c)
e = sym.sin(c)
ddc = sym.diff(d)
dde = sym.diff(e)
dd = sym.Matrix([[ddc],[dde]])

dfdd = df@dd

c = a + b
dca = sym.diff(c, a)
dcb = sym.diff(c, b)
dc = sym. Matrix([[dca, dcb]])

dfdc = dfdd@dc

a = x**2
b = sym.exp(a)

result = dfdc.subs(c, (a + b))
result

函数 .subs() 的结果没有替换任何东西,我不知道为什么,我尝试用其他方式替换它来编写函数,例如:

dfdc.subs({c : (a + b)})
dfdc.subs(c, a + b)

甚至试图将它替换为一个整数以查看它是否可行,但都没有。

我做错了什么?

dfdc 表达式中的 c 是在设置 c=a+b 之前创建的。所以它仍然在 dfdc 中显示为 c。但是,当您想要执行 subs 时,c 符号被声明为 c=a+b,因此您的替代实际上是

dfdc.subs(a+b, a+b)

那什么都不做。

为了在那里真正使用c,做

dfdc.subs(sym.Symbol('c'), a+b)