Interpolation
-
Hallo Forum,
ich habe ein zwei dimensionales Array und möchte in ihm (erstmal nur linear) interpolieren. Eine physikalische Größe ist also von zwei Größen aus dem Array abhängig.
Hat jemand zufällig einen Source herumliegen der beschreibt wie das geht? Gut erklärte mathematische Links sind auch ok.Viele Grüße
Peter
-
Was? Lineare Interpolation?
-
Erstmal nur linear. Du glaubst jetzt ich habe die Wertepaare: (1,2); (2,4); (3,6) und suche jetzt den Wert bei (1.5,x). -> x=3
Es ist aber so:
(1,2,5); (2,4,9); (3,5,13)Und ich suche jetzt (1.223434, 4.342324, x). Was ist nun x?
-
Ist Planet Source eigentlich down? Ich versuch schon seit Stunden diese Datei herunterzuladen...
-
Am einfachsten ist es (denke ich), wenn du mit der Newton-Methode (Dividierenden Differenzen) arbeitest.
-
Helfen tut Dir dabei vielleicht dieser Link:
http://www.informatik.hu-berlin.de/~pischel/studium/numerik/interpolation.html
Da gibts ein Java-Applet Beispiel und auch den Quellcode dazu
-
Du suchst also genauer gesagt bilineare Interpolation. Die funktioniert etwa so:
Du hast x,y:
x1 = floor(x)
y1 = floor(y)
x2 = x1+1
y2 = y1+1
dx = x-x1;
dy = y-y1;
wert = array[x1][y1](1-dx)(1-dy)
wert += array[x2][y1]*dx*(1-dy)
wert += array[x1][y2]*(1-dx)*dy
wert += array[x2][y2]*dx*dyIn "wert" steckt dann der gesuchte Wert drin.
-
Mehrdimensionale Taylor Entwicklung würde mir dazu einfallen...
-
Jo, mehrdimensional und Taylor, das klingt immer gut.
Hat nur leider wenig mit dem Thema zu tun. Es ist nämlich nur eine Matrix mit Werten gegeben über die wir nichts wissen, also insbesondere können wir nicht ableiten.
-
Wer sagt, daß man mit der Taylor Entwicklung immer nur Ableitungen interpolieren soll ?
Vorgehensweise:
z.B. man nehme vier Stützstellen und benutze den Entwicklungspunkt als den zu berechenden interpolierenden Wert... nun gewichtet man diese vier Gleichungen derart, daß sich die Ableitungen eleminieren (das geht natürlich nur begrenzt und ist abhängig von der Anzahl der Stützstellen, der Restterm der Ableitung gibt auch direkt die Ordnung der Interpolation an)...
-
Erstmal vielen Dank für die Antworten. Das von Gregor sieht am einfachsten aus. Werd mich Montag mal dransetzen. (Und ev. den Source dann posten.)
Viele Grüße
Peter
-
Winn schrieb:
Vorgehensweise:
... nun gewichtet man diese vier Gleichungen derart, daß sich die Ableitungen eleminieren ...Woher nimmst Du bei einer diskreten Wertemenge, über die Du nichts weißt die Ableitungen?
-
Ich muß sie nicht wissen...
Definition einer zweidimensionalen Taylor Entwicklung:
T(x,y)=Sum(k=0 bis n) (1/k!)(PartialY*DeltaX + PartialY*DeltaY)^k f(x0,y0)D.h. unter der Benutzung von vier Stützstellen ergibt sich aufgelistet.
T1(x0+h/2,y0+h/2)= f(x0,y0) + f'(nach x)(x0+h/2-x0) + f'(nach y)(y0+h/2-y0) + O(h^2)
T2(x0+h/2,y0-h/2)= f(x0,y0) + f'(nach x)(x0+h/2-x0) + f'(nach y)(y0-h/2-y0) + O(h^2)
T3(x0-h/2,y0+h/2)= f(x0,y0) + f'(nach x)(x0-h/2-x0) + f'(nach y)(y0+h/2-y0) + O(h^2)
T4(x0-h/2,y0-h/2)= f(x0,y0) + f'(nach x)(x0-h/2-x0) + f'(nach y)(y0-h/2-y0) + O(h^2)=>
T1(x0+h/2,y0+h/2)= f(x0,y0) + f'(nach x)(h/2) + f'(nach y)(h/2) + O(h^2)
T2(x0+h/2,y0-h/2)= f(x0,y0) + f'(nach x)(h/2) + f'(nach y)(-h/2) + O(h^2)
T3(x0-h/2,y0+h/2)= f(x0,y0) + f'(nach x)(-h/2) + f'(nach y)(h/2) + O(h^2)
T4(x0-h/2,y0-h/2)= f(x0,y0) + f'(nach x)(-h/2) + f'(nach y)(-h/2) + O(h^2)Aufaddition
=>
T1(x0+h/2,y0+h/2)+ T2(x0+h/2,y0-h/2) + T3(x0-h/2,y0+h/2) + T4(x0-h/2,y0-h/2)=4*f(x0,y0) + O(h^2)h wäre der Abstand der Werte untereinander, der interpolierte Wert liegt dabei genau mittig zwischen den vier Werten... die Berechnung läßt sich auch so aufstellen, wie es Gregor gemacht hat. Es ist das gleiche Prinzip... Die Ableitung die ich nicht wissen brauch, benutze ich also um die Ordnung der Interpolation anzugeben...