2017-09-21 5 views
0

Je suis en train d'exécuter l'exemple suivant dans sympysympy ne calculer cette intégrale

import sympy as sp 
from sympy.parsing.sympy_parser import parse_expr 

n, L, x = sp.symbols('n L x')  
sp.integrate(sp.cos(sp.pi*x/L)**2, (x, -L/2, L/2)) 

Pour une raison quelconque, il ne résout pas réellement cette intégrale. Il imprime juste l'intégrale originale.

>>> sp.integrate(sp.cos(sp.pi*x/L)**2, (x, -L/2, L/2)) 
    L 
    - 
    2 
/
| 
|  2/pi*x\ 
| cos |----| dx 
|  \ L/
| 
/
-L 
--- 
2 

Wolfram Alpha, on the other hand, does not have this issue.

+1

Quelle est exactement votre question? –

+0

N'appréciez pas le sarcasme. Évidemment, cette intégrale est calculable, et SymPy ne le fait pas. Pourquoi est-ce le cas? – ReckoningReckoner

+0

Il n'y avait pas de sarcasme. Je peux penser à d'autres questions que vous pourriez poser. Vous avez plus de chances d'obtenir de bonnes réponses ici si vous posez vos questions de manière explicite et claire. Cela aide aussi à éviter de critiquer les personnes qui essaient de vous aider. Vous voudrez peut-être supprimer votre commentaire et ajouter les informations pertinentes à votre question principale. –

Répondre

1

Il semble un peu ennuyeux, mais sympy n'évalue pas l'intégrale parce qu'elle ne sait pas assez sur L. Plus précisément, il laisse la porte ouverte à la possibilité L=0, ce qui ferait des ravages sur votre integrand. Pour surmonter cela, nous avons simplement besoin d'informer sympy que L n'est pas zéro. La façon la plus simple de le faire est de passer un argument à symbols pendant l'instanciation:

import sympy as sp 
n, x = sp.symbols('n x')  
L = sp.symbols('L', nonzero=True) 
sp.integrate(sp.cos(sp.pi*x/L)**2, (x, -L/2, L/2)) 
#>>> L/2