Seite 1 von 1

Nicht-Lineare Interpolation

Verfasst: Sonntag 26. März 2017, 19:42
von phischmi
Hallo zusammen,
ich habe einige Wertepaare ermittelt und möchte nun innerhalb dieser Daten weitere Werte interpolieren.
Die X-Werte entsprechen dabei Prozentwerten von 0-100%.
Die Y-Werte habe ich zu fünf X-Werten ermittelt. Die Wertepaare sehen wie folgt aus.

X / Y
0 / 0
25 / 350
50 / 450
75 / 650
100 / 950

Nun möchte ich weitere Y-Werte zu gegebenen X-Werte interpolieren, also z.B. 10%, 40% etc.

Meine Frage nun, wie stelle ich das am elegantesten an?
Gibt es hierzu eine passende Funktion in Python, welche die Y-Werte berechnen kann?

Re: Nicht-Lineare Interpolation

Verfasst: Sonntag 26. März 2017, 23:29
von __deets__
Ich bin da nicht der groesste Experte hier, aber fuer ein "fitting" (das muesste das sein, was du suchst) gibt es zwar viele Moeglichkeiten. Nur ob dir das was hilft, also einen Fehler hat, der kleiner als "nur" linear interpolieren - das kann man so gar nicht sagen. Da solltest du noch ein paar mehr Messungen machen, insbesondere an den Raendern sieht es ja so aus, als ob da grosse Aenderungen stattfinden.

Re: Nicht-Lineare Interpolation

Verfasst: Montag 27. März 2017, 05:11
von Sirius3
@phischmi: es gibt zwar nur eine Art, linear zu interpolieren, aber viele, das nicht-linear zu tun. Die Frage ist nur, was Du willst. Wenn hinter Deinen Werten ein physikalischer Prozess steht, wäre es am besten, die zugehörige Formel anzufitten. Gerne genommen werden Splines, weil die so schön glatte Kurven machen, aber sonst wenig mit Messungen zu tun haben. Schaut man sich die Punkte an, sieht man, dass sich zwischen 0% und 50% die Krümmung ändert. Soll das so sein, oder ist der Wert bei 0% oder 25% falsch?

Re: Nicht-Lineare Interpolation

Verfasst: Montag 27. März 2017, 06:27
von phischmi
Moin,
danke für eure Antworten :)
Ich bin gestern noch auf die Funktion interp1d() gestoßen, die grundsätzlich ja schon mal genau das macht, was ich zu erreichen versuche.

Zur näheren Erklärung:
Bei den y-Werten handelt es sich um die Schritte, welche ein Stepper-Motor stellen muss, um einen definierten Gasfluss (0-100%) an einem Nadelventil einzustellen. Das dürfte die großen Änderungen an den Rändern erklären..
Mehr bzw. genauere Messungen machen keinen Sinn, da ich nur ein analoges Manometer zur Verfügung habe, um den Gasdruck zu messen.

Hätte mir damals mal jemand gesagt, wozu ne Kurvendiskussion so nützlich sein kann... :roll:

Re: Nicht-Lineare Interpolation

Verfasst: Montag 27. März 2017, 17:51
von __deets__
Im Grunde weisst du also nicht, was das Ergebnis sein wird, weil der Verlauf so schon hoch nicht-linear und schwer messbar ist. Alles andere als lineare Interpolation ist da mE mathematisches Globuli einwerfen, aber sowas soll ja ungemein beruhigen :twisted:

Re: Nicht-Lineare Interpolation

Verfasst: Dienstag 28. März 2017, 06:28
von phischmi
So mache ich nun auch und interpoliere zwischen den Messpunkten linear - klappt mit interp1d() ja prima :)
Danke für eure Hilfe!

Re: Nicht-Lineare Interpolation

Verfasst: Mittwoch 2. August 2017, 18:55
von PeterOpa
Vermutlich hast du dies zustande bekommen"
Bild

Ich denke das ein Polynom dritten Grades geeignet ist. Bin dabei es mit machinelearning (tensorflow) zu probieren
die beste nichtlineare interpolation zu finden :)

Re: Nicht-Lineare Interpolation

Verfasst: Donnerstag 3. August 2017, 08:02
von PeterOpa
Durch die gegebenen Punkt kann man ein Polyom 4.ten Grades legen. Das ergibt dann:

Bild

Unten stehen die 5 coefficienten von niedrig nach hoch :)

Re: Nicht-Lineare Interpolation

Verfasst: Donnerstag 3. August 2017, 10:47
von PeterOpa
Das Resultat wenn man noch mehr Punkte hat z.B. dicht bei 0 (etwa 10) und dann ein Polynom höheren Grades durch die gegebenen Punkte
legt, ist SEHR STARK abhängig von den extra Werten (y Werkt bei etwa 10, zu klein ==> schlecht, groß genug => redlich bis gut)

Übrigens, das ganze hab ich als Python-Notebook fix und fertig, welches durch alle gegebenen Punkte ein Polynom legt.
(Grafik müsste man noch etwas anpassen, ist für DIESEN Fall angepasst).

Wer es haben will, muss mich probieren zu erreichen zum 'upload'
Mit Anaconda3 hab ich sympy, mathplotlib und numpy ohne Schwierigkeiten auf W10 installieren koennen. Die Bibliotheken werden
nämlich benutzt.
Vermutlich kann man auch ohne sympy auskommen (ist aber naeher an wie man es evtl. mal gelernt hat):
A*x = b aufloesen nach x wird sympy.linsolve((M,b),vars) mit vars eine Liste von Variablen.

Beispiel (A|b) wurde:

Code: Alles auswählen

[a,
 a + 25*b + 625*c + 15625*d + 390625*e - 350,
 a + 50*b + 2500*c + 125000*d + 6250000*e - 450,
 a + 75*b + 5625*c + 421875*d + 31640625*e - 650,
 a + 100*b + 10000*c + 1000000*d + 100000000*e - 950]