2014-01-22 5 views
5

Ich habe eine Reihe von Daten, zum Beispiel:gestreute Dateninterpolation

X Y Z 

1 3 7 

2 5 8 

1 4 9 

3 6 10 

Ich möchte Z für X=2.5 und Y=3.5 zu interpolieren. Wie mache ich es? Ich kann interp2 hier nicht verwenden, weil X und Y nicht streng monoton (steigend oder fallend) sind.

Antwort

4

Es scheint, wie griddata ist die Funktion, die Sie suchen:

z = griddata([1 2 1 3], [3 5 4 6], [7 8 9 10], 2.5, 3.5, 'nearest') 
+0

ja, das funktioniert. Danke vielmals. Ist es nicht möglich, dafür lineare Interpolation zu verwenden? – user3222217

+0

weil, wenn ich betrete z = Rasterdaten ([1 2 1 3], [3 5 4 6], [7 8 9 10], 2,5, 3,5, 'linear') Die Antwort, die ich bekomme, ist Nan – user3222217

+0

also vielleicht sind Ihre Daten nicht linear? – Adiel

8

Die derzeit bevorzugte Art und Weise gestreute Daten Interpolation durchzuführen über die scatteredInterpolant Objektklasse ist:

>> F = scatteredInterpolant([1 2 1 3].',[3 5 4 6].',[7 8 9 10].','linear') %' 
F = 
    scatteredInterpolant with properties: 

       Points: [4x2 double] 
       Values: [4x1 double] 
       Method: 'linear' 
    ExtrapolationMethod: 'linear' 
>> Zi = F(2.5,3.5) 
Zi = 
    6.7910 

Alternative Syntax,

>> P = [1 3 7; 2 5 8; 1 4 9; 3 6 10]; 
>> F = scatteredInterpolant(P(:,1:2),P(:,3),'linear') 

Für die Vorteile von scatteredInterpolant über griddata siehe this MathWorks page on Interpolating Scattered Data. Zusätzlich zu syntaktischen Unterschieden gibt es zwei Hauptvorteile, nämlich Extrapolation und natürliche Nachbarinterpolation. Wenn Sie neue Daten mit demselben Interpolant interpolieren möchten, haben Sie auch den Vorteil, dass Sie die beim Erstellen des Interpolant-Objekts berechnete Triangulation erneut verwenden.