Seite 1 von 1
Integration über Arrays
Verfasst: Montag 7. Oktober 2019, 13:23
von JeanC
Hallo zusammen
Ich über mich gerade in der Integration mit Python. Wie ich mit Funktionen integriere ist mir bewusst, jedoch weiss ich nicht, wie ich integrieren soll, wenn mir nicht die Funktion, sondern nur die Werte und Funktionswerte in Arrays gegeben sind.
Code: Alles auswählen
import scipy
x = [0, 1, 2, 3, 4, 5]
y = [0, 1, 4, 9, 16, 25]
res, err = scipy.integrate.quad(??, x[0], x[-1])
Hat jemand eien Idee?
Gruss,
Jean
Re: Integration über Arrays
Verfasst: Montag 7. Oktober 2019, 13:31
von Sirius3
Dann kannst Du gar nicht integrieren, sondern nur die Trapez-Summe bilden.
Re: Integration über Arrays
Verfasst: Montag 7. Oktober 2019, 13:35
von JeanC
So etwas hatte ich schon vermutet, da ja der Verlauf zwischen den Punkten nicht eindeutig ist, wenn ich nicht wüsste, dass sich die Funktion x**2 dahinter verbirgt. Hab es jetzt so gelöst:
Code: Alles auswählen
x = [0, 1, 2, 3, 4, 5, 6]
y = [0, 1, 4, 9, 16, 25, 36]
def trapez_summe(x, y):
teilflächen = []
elemente = len(x)
for idx, i in enumerate(x):
if idx < (elemente - 1):
fläche = (x[i+1] - x[i])*(y[i] + y[i+1])/2.0
teilflächen.append(fläche)
return sum(teilflächen)
print(trapez_summe(x, y))
Da ich aus der Ruby-Welt komme, würde ich mich über Tipps freuen, ob es so in der Python-Welt gemacht wird.
Re: Integration über Arrays
Verfasst: Montag 7. Oktober 2019, 14:17
von __deets__
Sieht an sich gut aus, ich persoenlich wuerde in diesem Fall allerdings die Summe einfach direkt bilden. Also "gesamtsumme = 0" und "gesamtsumme += fläche".
Re: Integration über Arrays
Verfasst: Montag 7. Oktober 2019, 16:42
von Sirius3
Es ist ja eher Zufall, dass man die Werte in `x` auch als Index benutzen kann. Das ist also ein Programmierfehler, `i` so zu verwenden. Man sollte sowieso nicht mit Indices hantieren. Auch die if-Abfrage ist unschön.
Statt dessen gibt es zip:
Code: Alles auswählen
def trapez_summe(x, y):
flaeche = 0
for xa, xb, ya, yb in zip(x[1:], x, y[1:], y):
flaeche += (xa - xb) * (ya + yb) / 2
return flaeche
bzw.
Code: Alles auswählen
def trapez_summe(x, y):
return sum(
(xa - xb) * (ya + yb) / 2
for xa, xb, ya, yb in zip(x[1:], x, y[1:], y)
)
Re: Integration über Arrays
Verfasst: Mittwoch 9. Oktober 2019, 11:37
von JeanC
Herzlichen Dank für eure kompetente Hilfe!