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
Integration einer Funktion
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)
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
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
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Psi(x)? Normiert auf 1? Kommt mir sehr bekannt vor
Was für ein Array von Zahlen hast du denn gegeben?
Was für ein Array von Zahlen hast du denn gegeben?
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
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
Hoi Kathrin,
mir ist mathematisch nicht ganz klar worauf Du hinaus willst, aber ggf. hilft Dir scipy.integrate.simps(dein_array) weiter?
Gruß,
Christian
mir ist mathematisch nicht ganz klar worauf Du hinaus willst, aber ggf. hilft Dir scipy.integrate.simps(dein_array) weiter?
Gruß,
Christian
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.
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.
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
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