sympy中的函数分解



我正试图弄清楚如何在SymPy 中进行函数分解

我可以在SymPy:中进行函数合成

from sympy import symbols, cos, sin, diff
x = symbols('x')
h = cos(x)
g = sin(h)
g

sin(cos(x((

SymPy能够区分这种

diff(g)

-sin(x(*cos(cos(x((

但是如何将sin(cos(x))分解为f(x)=sin(x)g(x)=cos(x)它似乎必须在内部完成这项工作,所以即使这不是api的一部分,找到它在内部执行这项工作的地方也会很有帮助。我查看了来源,我只是看到它应用了商规则而不是链式规则,所以我可能看错了地方:

回购中的def-diff:

def diff(f, x):
"""Computes partial derivative in ``x``.
Examples
========
>>> from sympy.polys.fields import field
>>> from sympy.polys.domains import ZZ
>>> _, x, y, z = field("x,y,z", ZZ)
>>> ((x**2 + y)/(z + 1)).diff(x)
2*x/(z + 1)
"""
x = x.to_poly()
return f.new(f.numer.diff(x)*f.denom - f.numer*f.denom.diff(x), f.denom**2)

我很难说出f.numer.diff的线索。这个代码可能就是它,但我不确定,也不知道如何确定它在代码中的位置。

我想要的是给它一个类似(2x)^5的东西(用一个不同的例子来展示我想要的各种东西(,并得到2xx^5

要将组合分解为多个部分,请使用SymPy表达式的两个基本属性:func("外部"函数(和args(其参数(。

expr = sin(cos(x))
print(expr.func, expr.args)   # prints sin and (cos(x), )
print(expr.func(x))   #  sin(x)
print(expr.args[0])   #  cos(x)

顺便说一下,链式规则逻辑在Function类的内部_eval_derivative方法中。这就是f(g(x))衍生物的评估最终的结果。你在看Polys课。

各类对象导数的通用调度在Derivative.__new_中。

最新更新