Integration einer Funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
KathrinL
User
Beiträge: 5
Registriert: Dienstag 15. Mai 2007, 19:05

Integration einer Funktion

Beitragvon KathrinL » Dienstag 15. Mai 2007, 19:10

Hallo,

ich möchte bei Python eine mathematische Funktion in einem bestimmten Bereich integrieren lassen.
Dazu hab ich die Funktion scipy.integrate.quad gefunden:
"
Help on function quad in scipy.integrate:

scipy.integrate.quad = quad(func, a, b, args=(), ...)
Compute a definite integral.

Inputs:

func -- a Python function or method to integrate.
a -- lower limit of integration (use -scipy.integrate.Inf for -infinity).
b -- upper limit of integration (use scipy.integrate.Inf for +infinity).
args -- extra arguments to pass to func.
..."

Was ist das mit "a Python function or method to integrate" gemeint?
Wenn ich mir eine Funktion definiere, zum Beispiel so hier
x=linspace(0., 1., 10)
y=x**2

dann funktioniert
t=quad(y, 0., 1.)
nicht und es gibt die Fehlermeldung:

"First argument must be a callable function."

Was mach ich falsch??

Viele Grüße
Kathrin :-)
BlackJack

Beitragvon BlackJack » Dienstag 15. Mai 2007, 19:44

Damit ist gemeint, dass eine Funktion oder Methode übergeben werden muss, oder wie die Fehlermeldung sagt, etwas "aufrufbares". Beispiel:

Code: Alles auswählen

In [168]: import scipy.integrate

In [169]: def f(x):
   .....:     return x**2
   .....:

In [170]: scipy.integrate.quad(f, 0, 1)
Out[170]: (0.33333333333333331, 3.7007434154171879e-15)
KathrinL
User
Beiträge: 5
Registriert: Dienstag 15. Mai 2007, 19:05

Beitragvon KathrinL » Dienstag 15. Mai 2007, 20:17

Hi BlackJack,

vielen Dank für deine Hilfe! :-)

Kathrin
KathrinL
User
Beiträge: 5
Registriert: Dienstag 15. Mai 2007, 19:05

Beitragvon KathrinL » Dienstag 15. Mai 2007, 20:57

Hmm, leider kann ich die Integrationsfunktion doch nciht so richtig benutzen.

Ich möchte Psi(x) normieren, dabei habe ich Psi allerdings nicht als Funktion, sondern als Array von Zahlen.
Nun möchte ich, dass Int(Abs(Psi)**2)=1

Ich will also als erstes das Integral ausrechnen und dann Psi durch die Wurzel des Ergebnisses teilen.
Wie kann ich das Integral ausrechnen??

viele Grüße
Kathrin
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Dienstag 15. Mai 2007, 22:49

Psi(x)? Normiert auf 1? Kommt mir sehr bekannt vor :)

Was für ein Array von Zahlen hast du denn gegeben?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
KathrinL
User
Beiträge: 5
Registriert: Dienstag 15. Mai 2007, 19:05

Beitragvon KathrinL » Mittwoch 16. Mai 2007, 16:03

Hallo Birkenfeld,

ich habe mir mit der Funktion scipy.linalg.eig Eigenvektoren erstellt.
Bekomme also eine NxN Matrix, wobei v=[:,i] die einzelnen Eigenvektoren sind und die möchte ich nun nicht wie die Routine normieren: sum v[:,i]**2, sondern so, dass das Integral des Betragsquadrats über einen Abschnitt (eigentlich von - bis + unendlich) 1 ergibt. (Brauche ja an sich bloß das Integral, das Normieren ist ja dann einfach. Aber ich kann kein Integral bilden, wenn es keine richtige Funktion ist, sondern nur ein Array...)

Wie kann ich das machen??

viele Grüße
Kathrin
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 16. Mai 2007, 18:12

Hoi Kathrin,

mir ist mathematisch nicht ganz klar worauf Du hinaus willst, aber ggf. hilft Dir scipy.integrate.simps(dein_array) weiter?

Gruß,
Christian
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Beitragvon Goa » Mittwoch 16. Mai 2007, 19:31

Hi KathrinL,

ich habe das Gefühl dass es im Moment eher noch ein mathematisches/physikalisches Problem ist.
Von was genau hast du Eigenvektoren erstellt und was genau steht in der Matrix? Wenn dort die Werte von Psi an verschiedenen Positionen Psi(x_i,y_j) steht dann ist das Integral einfach Sum( abs(Psi)**2) * Deltax * Deltay (Falls die Werte von x und y äquidistant sind, ansonsten musst du die Delta noch in die Summe reinbauen).

Falls die Matrix irgendwas anderes darstellt wird die Sache interessanter, allerdings musst du dann erst noch mehr Infos rauslassen.
KathrinL
User
Beiträge: 5
Registriert: Dienstag 15. Mai 2007, 19:05

Beitragvon KathrinL » Donnerstag 17. Mai 2007, 11:37

Ok,


das mit scipy.integrate.simps funktioniert so, wie ich es will. Vielen Dank für eure Hilfe =)

tschüssi
Kathrin :-)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 22. Mai 2007, 08:45

Hoi Kathrin,

das ist schön, aber Goa & ich waren vielleicht nicht deutlich genug: Wenn jemand richtig geraten hat, dann wirklich, weil zufällig richtig geraten wurde. D. h. wenn Du Pech hast, bekommst Du mit .simps() doch nur scheinbar richtige Daten - das kannst Du jetzt nur Du selber wissen.

Gruß,
Christian

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder