Polynom anfitten

05/09/2009 - 22:42 von Roland Damm | Report spam
Moin,

folgendes Problem: Gegeben sind ein paar Werte (nennen wir sie
Messwerte) der Funktion fi(xi,yi).
Also eine Funktion f(x,y) von der für N verschiedene nicht in
einem reglemàßigem Gitter angeordnete Punkte die Werte bekannt
sind.

Wie fittet man daran ein Polynom an? Genauer gesagt, soll das
Polynom die Form haben:
p(x,y) = p0 + px*x + py*y + px2*x^2 + py2*y^2 + pxy*x*y

Eventuell noch mehr Terme, aber bei der Fragestellung ist die
Anzahl der Terme fest.

Ich meine hier mal eine Methode dafür gelesen zu haben, die
verblüffend einfach ist. Nur eine Matritzenmultiplikation, mehr
nicht. Aber ich habe die Sache nicht mehr so Erinnerung, als
dass ich es rekonstruieren könnte.

Ich meine es ging so in der Art wie eine Korrelationsrechnung
zwischen den gegebenen Punkten und den einzelnen Termen des
Polynoms. Funktioniert aber nicht so einfach, weil die einzelnen
Terme des Polynoms nicht orthogonal sind.

Es geht darum, dieses Verfahren zu verstehen:
http://de.wikipedia.org/wiki/Smooth...rodynamics

Da ist am Ende der Seite bezüglich Viskositàt recht flüchtig die
Rede von einem Tensor, den man einfach so dazuddiert, das ergibt
so wie es da steht IMO erst mal keinen Sinn.

Also dachte ich mir, man müsste bei einer Strömungssimulation
doch das Strömungsfeld aus den bekannten Punkten extrahieren
können - per Polynomfit halt - um dann damit recht gut die
Verhàltnisse am fraglichen Ort berechnen zu können.
Die Wiki-Seite erklàrt die Sache leider für meinen Geschmack
nicht sehr gut, da stimmen bei mindestens einer Formel schon mal
die Einheiten nicht:-) (ich weiß, so was unsinniges kümmert nur
Ings, keine Mathematiker..)

Aber wo ich schon diese Seite erwàhnte, da wird des öfteren über
eine Reihe von Punkten summiert, wobei jeder einzelne Punkt
b.z.w. die aus ihm resultierenden Ergebnisse mit einem
Gewichtungsfaktor multipliziert wird (w_ab). IMO müsste man am
Ende jeweils noch durch die Summe der Gewichtungsfaktoren
teilen, denn wie viele Faktoren und von welcher Größer benutzt
wurden, ist ja relativ zufàllig, deren Summe wird nicht normiert
sein. Richtig? Muss man die Gewichtugnsfaktoren auf eine Summe
von 1 normieren? Oder muss man das aus komischen Gründen nicht?

CU Rollo
 

Lesen sie die antworten

#1 Bastian Erdnüß
06/09/2009 - 01:17 | Warnen spam
On 5 Sep., 22:42, Roland Damm wrote:

Moin,

folgendes Problem: Gegeben sind ein paar Werte (nennen wir sie
Messwerte) der Funktion fi(xi,yi).
Also eine Funktion f(x,y) von der für N verschiedene nicht in
einem reglemàßigem Gitter angeordnete Punkte die Werte bekannt
sind.

Wie fittet man daran ein Polynom an? Genauer gesagt, soll das
Polynom die Form haben:
p(x,y) = p0 + px*x + py*y + px2*x^2 + py2*y^2 + pxy*x*y

Eventuell noch mehr Terme, aber bei der Fragestellung ist die
Anzahl der Terme fest.

Ich meine hier mal eine Methode dafür gelesen zu haben, die
verblüffend einfach ist. Nur eine Matritzenmultiplikation, mehr
nicht. Aber ich habe die Sache nicht mehr so Erinnerung, als
dass ich es rekonstruieren könnte.



Ich glaube ich weiß was du meinst. Dein Polynom ist eine lineare
Gleichung in den Parametern. Hast du also N Gleichungen der Form

1*p0 + x1*px + y1*py + x1^2*px2 + y1^2*py2 + x1*y1*pxy = p1
1*p0 + x2*px + y2*py + x2^2*px2 + y2^2*py2 + x2*y2*pxy = p2
: : : : : : :
1*p0 + xN*px + yN*py + xN^2*px2 + yN^2*py2 + xN*yN*pxy = pN ,

kannst du diese in Matrix-Vektor-Form als

[ 1 x1 y1 x1^2 y1^2 x1*y1 ] [ p1 ]
[ 1 x2 y2 x2^2 y2^2 x2*y2 ] [ p0 ] [ p2 ]
[ 1 x3 y3 x3^2 y3^2 x3*y3 ] [ px ] [ p3 ]
[ 1 x4 y4 x4^2 y4^2 x4*y4 ] [ py ] [ p4 ]
[ 1 x5 y5 x5^2 y5^2 x5*y5 ] * [ px2 ] = [ p5 ]
[ 1 x6 y6 x6^2 y6^2 x6*y6 ] [ py2 ] [ p6 ]
[ : : : : : : ] [ pxy ] [ : ]
[ 1 xN yN xN^2 yN^2 xN*yN ] [ pN ]

oder kurz als

M * p = q

schreiben; mit einer bekannten Nx6-Matrix M, einem unbekannten 6-
Vektor p und einem bekannten N-Vektor q.

Wenn N > 6 ist handelt es sich dabei um ein überbestimmtes lineares
Gleichungssystem. Das kann man von links mit M^T (M transponiert)
multiplizieren und erhàlt

M^T * M * p = M^T * q
<==> A * p = y

mit A = M^T * M, einer 6x6-Matrix und y = M^T, einem 6-Vektor. Wenn
mich nicht alles tàuscht ist A genau dann invertierbar, wenn M
mindestens 6 linear unabhàngige Zeilen enthàlt und in dem Fall ist
dann

p = A^(-1) * q

die optimale Lösung zu deinen gesuchten Parametern

[ p0 ]
[ px ]
[ py ]
p = [ px2 ] .
[ py2 ]
[ pxy ]

Optimal, im Sinne das die Fehlerquadrate minimiert weden. D. h. die
Summe

sum[n=1..N] [pn - p(xn,yn)]^2

wird minimal.

Bastian

Ähnliche fragen