【问题标题】:Merge derivative terms with sympy?将衍生术语与 sympy 合并?
【发布时间】:2021-02-21 18:23:34
【问题描述】:

我有许多变量乘积的导数:

d/dx [f(x) * g(x) * h(x)]

但是当我用 sympy 表示这个时,它会自动执行链式规则:

x = Symbol('x')
diff(Function('f')(x)*Function('g')(x)*Function('h')(x), x)

产量

????(????)????(????)????/????????ℎ(????)+????(????)ℎ(????)????/????????????(????)+????(????)ℎ(????)????/????????????(????)

sympy 有什么方法可以“撤消”它并将它们合并到紧凑符号中吗? (我想为我的计算结果这样做。我希望“简化”会这样做,但事实并非如此。)

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    您可以使用 Derivative 而不是 diff:

    In [4]: diff(f(x)*g(x), x)                                                                                                                                    
    Out[4]: 
         d               d       
    f(x)⋅──(g(x)) + g(x)⋅──(f(x))
         dx              dx      
    
    In [5]: Derivative(f(x)*g(x), x)                                                                                                                              
    Out[5]: 
    d            
    ──(f(x)⋅g(x))
    dx 
    

    我不知道会“反转”乘积规则的简化例程,但如果您知道您所期望的产品,那么您可以使用替代:

    In [25]: e = diff(f(x)*g(x), x)                                                                                                                               
    
    In [26]: e                                                                                                                                                    
    Out[26]: 
         d               d       
    f(x)⋅──(g(x)) + g(x)⋅──(f(x))
         dx              dx      
    
    In [27]: e.subs(g(x), h(x)/f(x)).doit().factor().subs(h(x), f(x)*g(x))                                                                                        
    Out[27]: 
    d            
    ──(f(x)⋅g(x))
    dx 
    

    【讨论】:

    • 谢谢,这很酷,我不知道。不幸的是,它并没有真正回答我的问题——这只是阻止了表达式被评估。我的情况是我已经有了结果,我希望它被浓缩。
    • 如果您知道产品应该是什么,我已经添加了一种方法来做到这一点。
    • 谢谢,这教会了我一些有用的东西!我赞成您的回答,因为它很有帮助。但是,我将保持这个问题的开放性,因为我认为可能有一个更通用的解决方案(可能在未来的版本中),而无需事先了解产品,我希望(也许你也希望!)提供这样的答案.
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2019-03-19
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多