Rekursive Interpolationsformel: Anfängerprobleme
Verfasst: Montag 29. Oktober 2018, 21:21
Hallo liebe Python-Nutzer,
ich bin Anfänger mit Python und habe ein paar Startschwierigkeiten.
Momentan versuche ich mich an der Programmierung einer rekursiven Formel für lineare Interpolation. Eine sehr einfache Anwendung, aber für mich als Anfänger nicht unproblematisch.
Ich habe einen vorgegebenen Funktionsverlauf durch eine Punktetabelle gegeben. Zwischen diesen Punkten möchte ich nun linear interpolieren. Ich habe eine Liste von x-Werten in meinem Code erstellt, die Python nacheinander in meine Formel einsetzen und mir die entsprechenden y-Werte ausspucken soll.
Die Formel für die Interpolation lautet:
yint = y1 + ((y2-y1)/(x2-x1))*(xint-x1)
Hier sind natürlich auch if-Bedingungen notwendig, damit Python die richtigen Werte für x1, x2, y1, y2 wählt. Denn für einen gesuchten interpolierten Wert yint für xint müssen x1, x2, y1 und y2 natürlich die Werte sein, die das Intervall bilden, in dem mein xint liegt.
Konkret am Beispiel:
x-Werte des Funktionsverlaufs: 1 , 2 , 3 , 4 , 5 , 6
y- Werte des Funktionsverlaufs: 0.8, -0.4, -0.2, 0.3, -0.2, -1
Ich suche jetzt die interpolierte y-Koordinate für meine x-Werte:
1.3, 2.4, 3.7, 4.4, 5.5, 5.8
Ich möchte erreichen, dass Python diese Liste abklappert und mir für jeden x-Wert den interpolierten y-Wert ausspuckt, wobei eine if-Bedingung sicherstellt, dass für die jeweiligen Werte die richtigen Werte für x1, x2, y1, y2 in die Formel eingesetzt werden.
Screenshot meines Codes:
https://ibb.co/jS61fq
In dem gezeigten Code ist die if Bedingung exemplarisch nur für den ersten Wert, xint = 1.3 vorhanden.
Soweit habe ich mit zwei Fehlermeldungen zu kämpfen:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Python kann also einem array mit mehr als einem Element keinen Boolschen Wert zuweisen. Soweit klar, doch wie geht es anders? any und all funktionieren auch nicht so, wie ich es mir vorstelle.
Die zweite Fehlermeldung betrifft die Definition meiner Variablen x1, x2, y1 und y2. Ich habe einmal testweise versucht, die Variablen vor der If-Bedingung aufzuführen und ihnen einfach irgendwelche Werte zuzuweisen, damit Python diese Variablen auf dem Schirm hat, bevor diesen in der If-Bedingung ggf. neue Werte zugewiesen werden. Aber das geht sicher auch eleganter..
An dieser Stelle wäre ich für ein paar Tips bzw. Inspirationen bezgl. meines Codes sehr dankbar.
Viele Grüße
eufrat
ich bin Anfänger mit Python und habe ein paar Startschwierigkeiten.
Momentan versuche ich mich an der Programmierung einer rekursiven Formel für lineare Interpolation. Eine sehr einfache Anwendung, aber für mich als Anfänger nicht unproblematisch.
Ich habe einen vorgegebenen Funktionsverlauf durch eine Punktetabelle gegeben. Zwischen diesen Punkten möchte ich nun linear interpolieren. Ich habe eine Liste von x-Werten in meinem Code erstellt, die Python nacheinander in meine Formel einsetzen und mir die entsprechenden y-Werte ausspucken soll.
Die Formel für die Interpolation lautet:
yint = y1 + ((y2-y1)/(x2-x1))*(xint-x1)
Hier sind natürlich auch if-Bedingungen notwendig, damit Python die richtigen Werte für x1, x2, y1, y2 wählt. Denn für einen gesuchten interpolierten Wert yint für xint müssen x1, x2, y1 und y2 natürlich die Werte sein, die das Intervall bilden, in dem mein xint liegt.
Konkret am Beispiel:
x-Werte des Funktionsverlaufs: 1 , 2 , 3 , 4 , 5 , 6
y- Werte des Funktionsverlaufs: 0.8, -0.4, -0.2, 0.3, -0.2, -1
Ich suche jetzt die interpolierte y-Koordinate für meine x-Werte:
1.3, 2.4, 3.7, 4.4, 5.5, 5.8
Ich möchte erreichen, dass Python diese Liste abklappert und mir für jeden x-Wert den interpolierten y-Wert ausspuckt, wobei eine if-Bedingung sicherstellt, dass für die jeweiligen Werte die richtigen Werte für x1, x2, y1, y2 in die Formel eingesetzt werden.
Screenshot meines Codes:
https://ibb.co/jS61fq
In dem gezeigten Code ist die if Bedingung exemplarisch nur für den ersten Wert, xint = 1.3 vorhanden.
Soweit habe ich mit zwei Fehlermeldungen zu kämpfen:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Python kann also einem array mit mehr als einem Element keinen Boolschen Wert zuweisen. Soweit klar, doch wie geht es anders? any und all funktionieren auch nicht so, wie ich es mir vorstelle.
Die zweite Fehlermeldung betrifft die Definition meiner Variablen x1, x2, y1 und y2. Ich habe einmal testweise versucht, die Variablen vor der If-Bedingung aufzuführen und ihnen einfach irgendwelche Werte zuzuweisen, damit Python diese Variablen auf dem Schirm hat, bevor diesen in der If-Bedingung ggf. neue Werte zugewiesen werden. Aber das geht sicher auch eleganter..
An dieser Stelle wäre ich für ein paar Tips bzw. Inspirationen bezgl. meines Codes sehr dankbar.
Viele Grüße
eufrat