Спасибо за возможность спросить ценный совет. Я новичок в sympy toolkit, и я пытаюсь выполнить несколько сложных интегралов, чтобы протестировать инструмент. В одном из них он возвращается странно долго ...

0
Alex 29 Дек 2020 в 17:59

1 ответ

Лучший ответ

Я думаю, что это результат работы алгоритма «heurisch», который иногда может генерировать сложные на вид решения. Алгоритм использует относительно косвенный подход к поиску элементарной первообразной.

Полный вывод, который я получаю:

In [156]: i = integrate(atan(1/(1-x**2)), x)

In [157]: i
Out[157]: 
                                                                                                                                             
                             ________   ________     ⎛  1   ⎞                                             ________   ________     ⎛  1   ⎞   
              3156404596⋅x⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2 ⋅atan⎜──────⎟                           2231915094⋅√2⋅x⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2 ⋅atan⎜──────⎟   
                                                     ⎜     2⎟                                                                     ⎜     2⎟   
                                                     ⎝1 - x ⎠                                                                     ⎝1 - x ⎠   
- ──────────────────────────────────────────────────────────────────────── + ────────────────────────────────────────────────────────────────
                 ________   ________                   ________   ________                  ________   ________                   ________   
  - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱

                                                                                                                                             
                                                                                                                                             
                                                                                                                                             
                        4 ___   ________    ⎛   2     4 ___     ________       ⎞                    3/4   ________    ⎛   2     4 ___     ___
             1115957547⋅╲╱ 2 ⋅╲╱ 2 - √2 ⋅log⎝4⋅x  - 4⋅╲╱ 2 ⋅x⋅╲╱ √2 + 2  + 4⋅√2⎠         789101149⋅2   ⋅╲╱ 2 - √2 ⋅log⎝4⋅x  - 4⋅╲╱ 2 ⋅x⋅╲╱ √2
──────── - ──────────────────────────────────────────────────────────────────────── + ───────────────────────────────────────────────────────
________                  ________   ________                   ________   ________                  ________   ________                   __
 √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 2231915094⋅√2⋅╲╱ 2

                                                                                                                                             
                                                                                                                                             
                                                                                                                                             
_____       ⎞                     3/4   ________    ⎛   2     4 ___     ________       ⎞                    4 ___   ________    ⎛   2     4 _
 + 2  + 4⋅√2⎠          789101149⋅2   ⋅╲╱ 2 - √2 ⋅log⎝4⋅x  + 4⋅╲╱ 2 ⋅x⋅╲╱ √2 + 2  + 4⋅√2⎠         1115957547⋅╲╱ 2 ⋅╲╱ 2 - √2 ⋅log⎝4⋅x  + 4⋅╲╱ 
───────────────── - ──────────────────────────────────────────────────────────────────────── + ──────────────────────────────────────────────
______   ________                  ________   ________                   ________   ________                  ________   ________            
 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 223191509

                                                                                                                                             
                                                       4 ___   ________     ⎛  1   ⎞                                                3/4   ___
                                             924489502⋅╲╱ 2 ⋅╲╱ 2 - √2 ⋅atan⎜──────⎟                                     653712796⋅2   ⋅╲╱ 2 
__     ________       ⎞                                                     ⎜     2⎟                                                         
2 ⋅x⋅╲╱ √2 + 2  + 4⋅√2⎠                                                     ⎝1 - x ⎠                                                         
────────────────────────── - ──────────────────────────────────────────────────────────────────────── + ─────────────────────────────────────
       ________   ________                  ________   ________                   ________   ________                  ________   ________   
4⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 

                                                                             ⎛   3/4         ________⎞                                       
_____     ⎛  1   ⎞                                      4 ___   ________     ⎜  2   ⋅x     ╲╱ √2 + 2 ⎟                               3/4   __
- √2 ⋅atan⎜──────⎟                           4463830188⋅╲╱ 2 ⋅╲╱ √2 + 2 ⋅atan⎜────────── - ──────────⎟                   3156404596⋅2   ⋅╲╱ √
          ⎜     2⎟                                                           ⎜  ________     ________⎟                                       
          ⎝1 - x ⎠                                                           ⎝╲╱ 2 - √2    ╲╱ 2 - √2 ⎠                                       
─────────────────────────────────── - ──────────────────────────────────────────────────────────────────────── + ────────────────────────────
                ________   ________                  ________   ________                   ________   ________                  ________   __
2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2  + 2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2    - 3156404596⋅╲╱ 2 - √2 ⋅╲╱ √

           ⎛   3/4         ________⎞        
______     ⎜  2   ⋅x     ╲╱ √2 + 2 ⎟        
2 + 2 ⋅atan⎜────────── - ──────────⎟        
           ⎜  ________     ________⎟        
           ⎝╲╱ 2 - √2    ╲╱ 2 - √2 ⎠        
────────────────────────────────────────────
______                   ________   ________
2 + 2  + 2231915094⋅√2⋅╲╱ 2 - √2 ⋅╲╱ √2 + 2 

Мы можем упростить это:

In [158]: i2 = powsimp(radsimp(i), deep=True)

In [159]: i2
Out[159]: 
                                                                                                                                          3/4
                                                                                                                                         2   
                   4 ___   ________    ⎛   2     4 ___     ________       ⎞   4 ___   ________    ⎛   2     4 ___     ________       ⎞       
        ⎛  1   ⎞   ╲╱ 2 ⋅╲╱ 2 - √2 ⋅log⎝4⋅x  - 4⋅╲╱ 2 ⋅x⋅╲╱ √2 + 2  + 4⋅√2⎠   ╲╱ 2 ⋅╲╱ 2 - √2 ⋅log⎝4⋅x  + 4⋅╲╱ 2 ⋅x⋅╲╱ √2 + 2  + 4⋅√2⎠       
- x⋅atan⎜──────⎟ - ──────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────── - ────
        ⎜ 2    ⎟                              4                                                          4                                   
        ⎝x  - 1⎠                                                                                                                             

   ________     ⎛  1   ⎞   4 ___   ________     ⎛  1   ⎞                                                                           
⋅╲╱ 2 - √2 ⋅atan⎜──────⎟   ╲╱ 2 ⋅╲╱ 2 - √2 ⋅atan⎜──────⎟                                                                           
                ⎜ 2    ⎟                        ⎜ 2    ⎟                                                                           
                ⎝x  - 1⎠                        ⎝x  - 1⎠   4 ___   ________     ⎛   3/4     ________   4 ___     ________         ⎞
──────────────────────── - ───────────────────────────── + ╲╱ 2 ⋅╲╱ √2 + 2 ⋅atan⎝- 2   ⋅x⋅╲╱ 2 - √2  - ╲╱ 2 ⋅x⋅╲╱ 2 - √2  + 1 + √2⎠
         2                               2                                                                                         

In [160]: i2.collect(i2.atoms(log, atan))
Out[160]: 
⎛      3/4   ________   4 ___   ________⎞                4 ___   ________    ⎛   2     4 ___     ________       ⎞   4 ___   ________    ⎛   2
⎜     2   ⋅╲╱ 2 - √2    ╲╱ 2 ⋅╲╱ 2 - √2 ⎟     ⎛  1   ⎞   ╲╱ 2 ⋅╲╱ 2 - √2 ⋅log⎝4⋅x  - 4⋅╲╱ 2 ⋅x⋅╲╱ √2 + 2  + 4⋅√2⎠   ╲╱ 2 ⋅╲╱ 2 - √2 ⋅log⎝4⋅x 
⎜-x - ─────────────── - ────────────────⎟⋅atan⎜──────⎟ - ──────────────────────────────────────────────────────── + ─────────────────────────
⎝            2                 2        ⎠     ⎜ 2    ⎟                              4                                                        
                                              ⎝x  - 1⎠                                                                                       

     4 ___     ________       ⎞                                                                           
 + 4⋅╲╱ 2 ⋅x⋅╲╱ √2 + 2  + 4⋅√2⎠   4 ___   ________     ⎛   3/4     ________   4 ___     ________         ⎞
─────────────────────────────── + ╲╱ 2 ⋅╲╱ √2 + 2 ⋅atan⎝- 2   ⋅x⋅╲╱ 2 - √2  - ╲╱ 2 ⋅x⋅╲╱ 2 - √2  + 1 + √2⎠
  4    

Мы можем проверить результат, дифференцируя (хотя опять же необходимо некоторое упрощение):

In [190]: cancel(cancel(i2.diff(x), extension=True))
Out[190]: 
     ⎛  1   ⎞
-atan⎜──────⎟
     ⎜ 2    ⎟
     ⎝x  - 1⎠

Это то же самое, что и исходное подынтегральное выражение, за исключением удаления знака минус (atan(-y) = -atan(y)).

Wolfram Alpha дает более простой результат, хотя он использует комплексные числа даже в том случае, если интеграл действительный: https://www.wolframalpha.com/input/?i=integrate%28atan%281%2F%281-x**2%29%29%2C+x%29

0
Oscar Benjamin 29 Дек 2020 в 17:07