【问题标题】:SymPy - differentiate a somewhat twisted functionSymPy - 区分一个有点扭曲的函数
【发布时间】:2021-01-24 22:06:01
【问题描述】:

diff ( (1/2) * ( sqrt (x**2+x+1) - x ) - (4/2) * ln ( ( sqrt (x**2+x+1) - x ) +1) + (1/2) * ln (2* ( sqrt (x**2+x+1) - x ) -1) + (3/4) * (1/(2* ( sqrt (x**2+x+1) - x ) -1)) )

我正在尝试用 SymPy 计算这个导数
但它给了我一些比我想象的更复杂的表达。

我手动解了一个不定积分,因此我知道答案
这应该是(sqrt(x**2+x+1)-1)/x

Wolfram Alpha 也证实了这一点 (在西澳,只需将** 替换为^)。

这是 WA 的答案(请参阅其他表格):

WA derivative

是否可以用 SymPy 计算和简化这个导数?
或者这对 SymPy 来说有点过分?

【问题讨论】:

  • 你有没有对你从微分得到的表达式调用 .simplify() ?
  • @Anonymous1847 是的,当然,但它并没有真正起作用

标签: python math sympy


【解决方案1】:

我可以确认答案,并且可以在 sympy 中简化它,但要做到这一点并不容易:

In [90]: d = diff ( (S(1)/2) *  ( sqrt (x**2+x+1) - x )   - (S(4)/2) * ln ( ( sqrt (x**2+x+1) - x )  +1) + (S(1)/2) * ln (2* ( sqrt (x**2+x+1) 
    ...: - x )  -1) + (S(3)/4) * (1/(2* ( sqrt (x**2+x+1) - x )  -1)) )                                                                        

In [91]: d                                                                                                                                     
Out[91]: 
                          ⎛    2⋅(x + 1/2)      ⎞         ⎛    x + 1/2        ⎞            2⋅(x + 1/2)                 
                        3⋅⎜- ─────────────── + 2⎟       2⋅⎜─────────────── - 1⎟          ─────────────── - 2           
                          ⎜     ____________    ⎟         ⎜   ____________    ⎟             ____________               
                          ⎜    ╱  2             ⎟         ⎜  ╱  2             ⎟            ╱  2                        
     x + 1/2              ⎝  ╲╱  x  + x + 1     ⎠         ⎝╲╱  x  + x + 1     ⎠          ╲╱  x  + x + 1               1
───────────────── + ───────────────────────────────── - ──────────────────────── + ──────────────────────────────── - ─
     ____________                                   2           ____________         ⎛            ____________    ⎞   2
    ╱  2              ⎛            ____________    ⎞           ╱  2                  ⎜           ╱  2             ⎟    
2⋅╲╱  x  + x + 1      ⎜           ╱  2             ⎟    -x + ╲╱  x  + x + 1  + 1   2⋅⎝-2⋅x + 2⋅╲╱  x  + x + 1  - 1⎠    
                    4⋅⎝-2⋅x + 2⋅╲╱  x  + x + 1  - 1⎠                                                                   

In [92]: f = sqrt(x**2 + x + 1)                                                                                                                

In [93]: f                                                                                                                                     
Out[93]: 
   ____________
  ╱  2         
╲╱  x  + x + 1 

In [94]: d.subs(f, y)                                                                                                                          
Out[94]: 
      2⋅(x + 1/2)      ⎛     x + 1/2⎞     ⎛    2⋅(x + 1/2)⎞              
 -2 + ───────────    2⋅⎜-1 + ───────⎟   3⋅⎜2 - ───────────⎟              
           y           ⎝        y   ⎠     ⎝         y     ⎠   1   x + 1/2
────────────────── - ──────────────── + ─────────────────── - ─ + ───────
2⋅(-2⋅x + 2⋅y - 1)      -x + y + 1                        2   2     2⋅y  
                                        4⋅(-2⋅x + 2⋅y - 1)               

In [95]: ratsimpmodprime(d.subs(f, y), [minpoly(f, y)]).subs(y, f)                                                                             
Out[95]: 
   ____________    
  ╱  2             
╲╱  x  + x + 1  - 1
───────────────────
         x 

看起来ratsimpmodprime 函数未在文档中列出,但您可以在此处查看: https://github.com/sympy/sympy/blob/524fa229306898fded1d477017e0a88048d88c6b/sympy/simplify/ratsimp.py#L33

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-02-20
  • 2020-12-02
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多