np.polyfit - unterbestimmte Interpolation

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.
Antworten
Hoxx
User
Beiträge: 2
Registriert: Montag 3. Februar 2014, 13:53

Hi an alle,

bin neu hier und bin auf der Suche nach Hilfe :)

Im Rahmen meiner Bachelorarbeit muss ich unter anderem mit Python Interpolationen durchführen.
Da ich mit ABAQUS arbeite und es dort nicht geschafft habe das Skipy Paket zu integrieren, muss ich auf
np.polyfit zurückgreifen. Habe insgesamt 9 Werte, die interpoliert werden müssen. Das Ergebnis was ich mit dem
Polynom 8-ten Grades bekomme ist aber nur so semi akzeptabel. Erhöhe ich allerdings den Grad auf 15 weicht es nur
minimal von einer Spline-Interpolation ab.

Meine Frage jetzt: Wie genau kommt das Polynom 15-Grades zustande, wenn es mit 9 Punkten unterbestimmt ist?
Arbeitet das np.polyfit mit einem Optimierungsverfahren?

Eine Antwort wäre super.

Grüße
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Herzlich Willkommen im Forum Hoxx,

lese dir doch in Ruhe mal die Dokumentation dazu durch: http://docs.scipy.org/doc/numpy/referen ... lyfit.html

Da werden die meisten deiner Fragen beantwortet. Werte mittels eines Polynoms zu interpolieren hat so seine Probleme, bsp.: http://en.wikipedia.org/wiki/Runge's_phenomenon Muss es denn ein Polynom sein? Außerdem kommt es auch stark darauf an, wie du die Stützstellen auswählst.

Im Generellen rate ich dir zu einer Funktion, die allgemein Werte interpoliert wie z.B. http://docs.scipy.org/doc/scipy/referen ... e.interp1d oder wenn du es noch allgemeiner haben willst kann ich dir http://docs.scipy.org/doc/scipy/referen ... olate.html empfehlen.

Grüße,
anogayales
Hoxx
User
Beiträge: 2
Registriert: Montag 3. Februar 2014, 13:53

Erstmal danke für die Antwort anogayales :)

Es geht mir ja genau um das Problem, dass ich kein Scipy verwenden kann in der Version, also muss ich
ein Polynom verwenden.

Die Erhöhung des Grades bringt aber sehr große Verbesserung mit sich.
Mir geht es also genau darum wie polyfit es schafft ein Polynom 15-Grades bei nur 9 Stützpunkten zu
erstellen.

Gruß
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

In der Doku wird das eigentlich ganz gut beschrieben. Es wird der quadratische Fehler zwischen dem Zielpolynom und deinen Daten minimiert. Achte mal darauf was dir polyfit zurückliefert. Auch wenn das Polynom vom Grad 15 ist, heißt das noch lange nicht, dass auch alle Koeffizienten verwendet werden:

Code: Alles auswählen

In [3]: x = y = range(10)
In [4]: result = polyfit(x,y,15)
C:\Python27\lib\site-packages\numpy\lib\polynomial.py:587: RankWarning: Polyfit
may be poorly conditioned
  warnings.warn(msg, RankWarning)
Out[4]:
array([  8.60993371e-18,  -1.07623505e-16,  -6.02414502e-16,
         4.26914677e-15,   7.93168388e-14,   2.28288771e-13,
        -5.72113102e-12,  -5.65898648e-11,   3.64457113e-10,
         6.25946059e-09,  -7.38740934e-08,   3.25351095e-07,
        -7.10872921e-07,   7.54710893e-07,   9.99999698e-01,
         2.46759479e-15])
In [11]: result > 0.000001
Out[11]:
array([False, False, False, False, False, False, False, False, False,
        True, False], dtype=bool)
In Wirklichkeit wird also nur ein Polynom mit Grad 1 erzeugt. Die gesuchte Funktion hat die Form f(x) = 0.99999698*x.

Falls dich die Theorie interessiert: http://de.wikipedia.org/wiki/Methode_de ... n_Quadrate
Grüße,
anogayales
Antworten