2012-08-29 10 views
5

Ich möchte exp (- (x^2 + y^2)) in Python mit Sympy-Bibliothek integrieren. (- (x^2)) Ich konnte das Integral von exp findenSymbolische Integration in Python mit Sympy

>>> B1 = sympy.exp(-alpha1 * (r1_x**2)) 
>>> p = integrate(B1,r1_x) 
>>> p 
pi**(1/2)*erf(alpha1**(1/2)*r1_x)/(2*alpha1**(1/2)) 

Aber wenn ich will exp versuchen zu integrieren (- (x^2 + y^2))

>>> B1 = sympy.exp(-alpha1 * (r1_x**2 + r1_y**2)) 
>>> p = integrate(B1,r1_x) 
>>> p 
Integral(exp(-alpha1*(r1_x**2 + r1_y**2)), r1_x) 

Es gibt keine Ausgabe und Python kann nicht das Integral nehmen!

+1

Im Allgemeinen gibt es für dieses Integral keine geschlossene Lösung. – unutbu

Antwort

3

sympy nicht immer jede Form erkennen, und so manchmal muss man es ein wenig Hilfe geben:

>>> import sympy 
>>> alpha1, r1_x, r1_y = sympy.var("alpha1 r1_x r1_y") 
>>> B1 = sympy.exp(-alpha1 * (r1_x**2 + r1_y**2)) 
>>> B1.integrate(r1_x) 
Integral(exp(-alpha1*(r1_x**2 + r1_y**2)), r1_x) 
>>> B1.expand(alpha1) 
exp(-alpha1*r1_x**2)*exp(-alpha1*r1_y**2) 
>>> B1.expand(alpha1).integrate(r1_x) 
sqrt(pi)*exp(-alpha1*r1_y**2)*erf(sqrt(alpha1)*r1_x)/(2*sqrt(alpha1)) 
+0

Danke, gibt es einen allgemeinen Weg dafür? Da die Gleichung hier einfach ist, was sollte ich für empfindliche Gleichungen tun? – Hesam

+1

Nicht, dass ich weiß; und bereit sein zu experimentieren. Entschuldigung, der Überbringer schlechter Nachrichten zu sein! – DSM

+1

'B1.expand (alpha1)' sollte einfach 'B1.expand()' sein. Die Argumente von expand sind nur Hinweise. – asmeurer

6

(Ich bin der leitende Entwickler von SymPy)

DSM ist richtig, dass Sie kann dies erreichen, indem er expand aufruft, und dass es keine allgemeine Möglichkeit gibt, dies zu tun (weil Integrale im Allgemeinen keine geschlossenen Formen haben).

Ich wollte nur darauf hinweisen, dass, wenn SymPy nicht ein Integral, das eine geschlossene Form hat, tun kann, betrachten wir dies als einen Fehler, und Sie können es gerne bei http://code.google.com/p/sympy/issues melden.

+0

Eigentlich habe ich versucht, mit Python, Matlab und Mathematica zu lösen und ich habe das Gefühl, dass diese Software verschiedene Algorithmen zur Auswertung von Integralen haben. Jedenfalls bevorzuge ich Python, da ich es von meinem C++ Programm aus aufrufen möchte. – Hesam