Hauptinhalt

interp1

R2026b

Interpolieren von 1D-Daten (Tabellennachschlag)

Beschreibung

vq = interp1(x,v,xq) gibt interpolierte Werte einer 1D-Funktion an bestimmten Abfragepunkten zurück. Standardmäßig verwendet interp1 die lineare Interpolation. Der Vektor x enthält die Stichprobenpunkte und v die zugehörigen Werte: v(x). Der Vektor xq enthält die Koordinaten der Abfragepunkte.

Wenn Sie mehrere Datensätze haben, von denen an denselben Punktkoordinaten Stichproben genommen werden, können Sie v als Array übergeben. Jede Spalte des Arrays v enthält einen unterschiedlichen Satz an 1D-Stichprobenwerten.

Beispiel

vq = interp1(x,v,xq,method) gibt eine alternative Interpolationsmethode an: "linear", "nearest", "next", "previous", "pchip", "cubic", "makima" oder "spline". Die Standard-Interpolationsmethode ist "linear".

Beispiel

vq = interp1(x,v,xq,method,extrapolation) gibt eine Strategie zum Auswerten von Punkten an, die außerhalb des Bereichs von x liegen. Stellen Sie extrapolation auf "extrap", wenn Sie den method-Algorithmus zur Extrapolation verwenden möchten. Sie können alternativ einen Skalarwert angeben. In jenem Fall gibt interp1 diesen Wert für alle Punkte außerhalb des Bereichs von x zurück.

Beispiel

vq = interp1(v,xq) gibt interpolierte Werte zurück und geht von einem Standardsatz von Stichprobenpunktkoordinaten aus. Die Standardpunkte entsprechen den Zahlen von 1 bis n, wobei n von der Form von v abhängt:

  • Wenn „v“ ein Vektor ist, sind die Standardpunkte 1:length(v).

  • Wenn „v“ ein Array ist, sind die Standardpunkte 1:size(v,1).

Verwenden Sie diese Syntax, wenn der absolute Abstand zwischen den Punkten keine Rolle spielt.

Beispiel

vq = interp1(v,xq,method) gibt eine beliebige alternative Interpolationsmethode an und verwendet die Standard-Stichprobenpunkte.

vq = interp1(v,xq,method,extrapolation) gibt eine Extrapolationsstrategie an und verwendet die Standard-Stichprobenpunkte.

pp = interp1(x,v,method,"pp") gibt die stückweise polynomiale Form von v(x) mithilfe des method-Algorithmus zurück.

Hinweis

Diese Syntax wird nicht empfohlen. Verwenden Sie stattdessen griddedInterpolant.

Beispiele

alle reduzieren

Definieren Sie die Stichprobenpunkte x und die zugehörigen Stichprobenwerte v.

x = 0:pi/4:2*pi; 
v = sin(x);

Definieren Sie die Abfragepunkte als feinere Abtastung im Bereich von x.

xq = 0:pi/16:2*pi;

Interpolieren Sie die Funktion an den Abfragepunkten.

figure
vqLinear = interp1(x,v,xq);

Werten Sie anschließend v mithilfe der "spline"-Interpolationsmethode an denselben Punkten aus.

vqSpline = interp1(x,v,xq,'spline');

Visualisieren Sie die interpolierten Daten für jede Interpolationsmethode.

plot(x,v,"o")
hold on
plot(xq,vqLinear)
plot(xq,vqSpline)
xlim([0 2*pi]);
legend("Sample data","Linear interpolation (default)","Spline interpolation")
hold off

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Sample data, Linear interpolation (default), Spline interpolation.

Definieren Sie mehrere Funktionswerte.

v = [0  1.41  2  1.41  0  -1.41  -2  -1.41 0];

Definieren Sie mehrere Abfragepunkte, die zwischen den Standardpunkten 1:9 liegen. In diesem Fall sind 1:9 die Standardpunkte, da v 9 Werte enthält.

xq = 1.5:8.5;

Werten Sie v bei xq aus.

vq = interp1(v,xq);

Erstellen Sie ein Diagramm des Ergebnisses.

plot(1:9,v,"o")
hold on
plot(xq,vq,"*");
legend("Sample data","Query points");
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Sample data, Query points.

Definieren Sie mehrere Stichprobenpunkte.

x = 1:10;

Werten Sie die Funktion v(x)=5x+x2i an den Stichprobenpunkten aus.

v = (5*x)+(x.^2*i);

Definieren Sie die Abfragepunkte als feinere Abtastung im Bereich von x.

xq = 1:0.25:10;

Interpolieren Sie v an den Abfragepunkten.

vq = interp1(x,v,xq);

Plotten Sie den Reellteil des Ergebnisses in Rot und den Imaginärteil in Blau.

plot(x,real(v),"or")
hold on
plot(xq,real(vq),"-r");
plot(x,imag(v),"ob")
plot(xq,imag(vq),"-b");
hold off

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers

Interpolieren Sie zeitgestempelte Datenpunkte.

Erstellen Sie einen Datensatz mit Temperaturwerten, die alle vier Stunden gemessen werden. Erstellen Sie eine Tabelle mit den Daten eines Tages.

Time = (datetime(2016,1,1):hours(4):datetime(2016,1,2))';
Time.Format = "MMM dd, HH:mm";
Temperature = [31 25 24 41 43 33 31]';
WeatherData = table(Time,Temperature)
WeatherData = 7×2 table
        Time         Temperature
    _____________    ___________

    Jan 01, 00:00        31     
    Jan 01, 04:00        25     
    Jan 01, 08:00        24     
    Jan 01, 12:00        41     
    Jan 01, 16:00        43     
    Jan 01, 20:00        33     
    Jan 02, 00:00        31     

Interpolieren Sie den Datensatz, um die Temperaturwerte für jede Minute des Tages vorherzusagen. Verwenden Sie die Interpolationsmethode "spline", da es sich um periodische Daten handelt.

xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';
V = interp1(WeatherData.Time,WeatherData.Temperature,xq,"spline");

Erstellen Sie ein Diagramm der Daten und der interpolierten Werte.

scatter(WeatherData,"Time","Temperature")
hold on
plot(xq,V)
legend("Sample data","Spline interpolation")
hold off

Figure contains an axes object. The axes object with xlabel Time, ylabel Temperature contains 2 objects of type scatter, line. These objects represent Sample data, Spline interpolation.

Definieren Sie die Stichprobenpunkte x und die zugehörigen Stichprobenwerte v.

x = [1 2 3 4 5];
v = [12 16 31 10 6];

Geben Sie die Abfragepunkte xq an, die über den Bereich von x hinausgehen.

xq = [0 0.5 1.5 5.5 6];

Werten Sie v bei xq mithilfe der Interpolationsmethode "pchip" aus.

vq1 = interp1(x,v,xq,"pchip")
vq1 = 1×5

   19.3684   13.6316   13.2105    7.4800   12.5600

Werten Sie v bei xq anschließend mithilfe der Interpolationsmethode "linear" aus.

vq2 = interp1(x,v,xq,"linear")
vq2 = 1×5

   NaN   NaN    14   NaN   NaN

Verwenden Sie dann die Interpolationsmethode "linear" mit der Option "extrap". "pchip" extrapoliert standardmäßig, aber "linear" tut dies nicht.

vq3 = interp1(x,v,xq,"linear","extrap")
vq3 = 1×5

     8    10    14     4     2

Definieren Sie die Stichprobenpunkte x und die zugehörigen Stichprobenwerte v.

x = [-3 -2 -1 0 1 2 3];
v = 3*x.^2;

Geben Sie die Abfragepunkte xq an, die über den Bereich von x hinausgehen.

xq = [-4 -2.5 -0.5 0.5 2.5 4];

Werten Sie dann v bei xq mithilfe der "pchip"-Methode aus und weisen Sie allen Werten außerhalb des Bereichs von x den Wert 27 zu.

vq = interp1(x,v,xq,"pchip",27)
vq = 1×6

   27.0000   18.6562    0.9375    0.9375   18.6562   27.0000

Definieren Sie die Stichprobenpunkte.

x = (-5:5)';

Nehmen Sie Stichproben von drei verschiedenen parabolischen Funktionen an den in x definierten Punkten.

v1 = x.^2;
v2 = 2*x.^2 + 2;
v3 = 3*x.^2 + 4;

Erstellen Sie eine Matrix v, deren Spalten aus den Vektoren v1, v2 und v3 bestehen.

v = [v1 v2 v3];

Definieren Sie mehrere Abfragepunkte xq als feinere Abtastung im Bereich von x.

xq = -5:0.1:5;

Werten Sie alle drei Funktionen bei xq aus und erstellen Sie ein Diagramm der Ergebnisse. Die Kreismarker im Diagramm entsprechen v und die durchgezogenen Linien entsprechen vq.

vq = interp1(x,v,xq,"pchip");
plot(x,v,"o")
hold on
plot(xq,vq)
xticks([-5:5])
hold off

Figure contains an axes object. The axes object contains 6 objects of type line. One or more of the lines displays its values using only markers

Eingabeargumente

alle reduzieren

Stichprobenpunkte, angegeben als Zeilen- oder Spaltenvektor reeller Zahlen. Die Werte in x müssen verschieden sein. Die Länge von x muss einer der folgenden Anforderungen entsprechen:

  • Wenn v ein Vektor ist, muss length(x) gleich length(v) sein.

  • Wenn v ein Array ist, muss length(x) gleich size(v,1) sein.

Beispiel: [1 2 3 4 5 6 7 8 9 10]

Beispiel: 1:10

Beispiel: [3 7 11 15 19 23 27 31]'

Datentypen: single | double | duration | datetime

Stichprobenwerte, angegeben als Vektor, Matrix oder Array aus reellen oder komplexen Zahlen. Wenn v eine Matrix oder ein Array ist, enthält jede Spalte einen unabhängigen Satz von 1D-Werten.

Wenn v komplexe Zahlen enthält, interpoliert interp1 die Reell- und Imaginärteile unabhängig voneinander.

Wenn v eine Ganzzahl enthält, muss die Interpolationsmethode “nearest”, “next” oder “previous” sein.

Beispiel: rand(1,10)

Beispiel: rand(10,1)

Beispiel: rand(10,3)

Datentypen: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration | datetime
Unterstützung komplexer Zahlen: Ja

Abfragepunkte, angegeben als Skalar, Vektor, Matrix oder Array aus reellen Zahlen.

Beispiel: 5

Beispiel: 1:0.05:10

Beispiel: (1:0.05:10)'

Beispiel: [0 1 2 7.5 10]

Datentypen: single | double | duration | datetime

Interpolationsmethode, angegeben als eine der in dieser Tabelle aufgeführten Optionen.

Interpolationsmethode

Beschreibung

Kontinuierlich

Kommentare

"linear"

Lineare Interpolation. Der interpolierte Wert an einem Abfragepunkt basiert auf linearer Interpolation der Werte an angrenzenden Rasterpunkten in der jeweiligen Dimension. Dies ist die Standard-Interpolationsmethode.

C0

  • Erfordert mindestens zwei Punkte

  • Erfordert mehr Speicherkapazität und Rechenzeit als nächster Nachbar

"nearest"

Interpolation des nächsten Nachbars. Der interpolierte Wert an einem Abfragepunkt entspricht dem Wert am nächsten Stichprobenpunkt im Raster. Wenn zwei Stichprobenpunkte im Raster abstandsgleich sind, entspricht der interpolierte Wert an einem Abfragepunkt dem Wert am folgenden Stichprobenpunkt im Raster.

Diskontinuierlich

  • Erfordert mindestens zwei Punkte

  • Moderate Speicheranforderungen

  • Kürzeste Rechenzeit

"next"

Interpolation des folgenden Nachbars. Der interpolierte Wert an einem Abfragepunkt entspricht dem Wert am folgenden Stichprobenpunkt im Raster.

Diskontinuierlich

  • Erfordert mindestens zwei Punkte

  • Identische Speicheranforderungen und Rechenzeit wie bei "nearest"

"previous"

Interpolation des vorherigen Nachbars. Der interpolierte Wert an einem Abfragepunkt entspricht dem Wert am vorherigen Stichprobenpunkt im Raster.

Diskontinuierlich

  • Erfordert mindestens zwei Punkte

  • Identische Speicheranforderungen und Rechenzeit wie bei "nearest"

"pchip"

Formerhaltende stückweise kubische Interpolation. Der interpolierte Wert an einem Abfragepunkt basiert auf einer formerhaltenden stückweisen kubischen Interpolation der Werte an angrenzenden Rasterpunkten.

C1

  • Erfordert mindestens vier Punkte

  • Erfordert mehr Speicherkapazität und Rechenzeit als "linear"

"cubic"

Kubische Faltung. Alternativ können Sie die Interpolationsmethode "v5cubic" angeben, die sich identisch verhält.

C1

  • Erfordert mindestens drei Punkte

  • Die Punkte müssen einen gleichmäßigen Abstand haben

  • Bei Daten mit ungleichmäßigen Abständen fällt diese Interpolationsmethode auf die "spline"-Interpolation zurück

  • Ähnliche Speicheranforderungen und Rechenzeit wie "pchip"

"makima"

Abgeänderte Akima-Interpolation der kubischen Hermite-Interpolation. Der interpolierte Wert an einem Abfragepunkt basiert auf einer stückweisen Polynomfunktion höchstens dritten Grades. Die Akima-Formel wird abgeändert, um Overshoots zu vermeiden.

C1

  • Erfordert mindestens zwei Punkte

  • Erzeugt weniger Schwingungen als "spline", flacht aber weniger aggressiv ab als "pchip"

  • Die Berechnung ist teurer als "pchip", aber üblicherweise kleiner als "spline"

  • Die Speicheranforderungen sind denen von "spline" ähnlich

"spline"

Spline-Interpolation mithilfe der Endbedingungen „kein Knoten“. Der interpolierte Wert an einem Abfragepunkt basiert auf kubischer Interpolation der Werte an angrenzenden Rasterpunkten in der jeweiligen Dimension.

C2

  • Erfordert mindestens vier Punkte, fällt auf lineare oder quadratische Interpolation zurück, wenn zwei beziehungsweise drei Punkte angegeben werden

  • Erfordert mehr Speicherkapazität und Rechenzeit als "pchip"

Extrapolationsstrategie, angegeben als "extrap" oder reeller Skalarwert.

  • Geben Sie "extrap" an, wenn Sie möchten, dass interp1 Punkte außerhalb des Bereichs anhand derselben Methode auswertet, die auch für die Interpolation verwendet wird.

  • Geben Sie einen Skalarwert an, wenn Sie möchten, dass interp1 für Punkte außerhalb des Bereichs einen konstanten Wert zurückgibt.

Das Standardverhalten hängt von den Eingabeargumenten ab:

  • Wenn Sie die Interpolationsmethoden "pchip", "spline" oder "makima" angeben, ist das Standardverhalten "extrap".

  • Alle anderen Interpolationsmethoden geben für Abfragepunkte außerhalb des Bereichs standardmäßig NaN zurück.

Beispiel: "extrap"

Beispiel: 5

Datentypen: char | string | single | double

Ausgabeargumente

alle reduzieren

Interpolierte Werte, zurückgegeben als Skalar, Vektor, Matrix oder Array. Die Größe von vq hängt von der Form von v und xq ab.

Form von vForm von xqGröße von VqBeispiel
VektorVektorsize(xq)Wenn size(v) = [1 100]
und size(xq) = [1 500],
dann size(vq) = [1 500].
VektorMatrix
oder N-dimensionales Array
size(xq)Wenn size(v) = [1 100]
und size(xq) = [50 30],
dann size(vq) = [50 30].
Matrix
oder N-dimensionales Array
Vektor[length(xq) size(v,2),...,size(v,n)]Wenn size(v) = [100 3]
und size(xq) = [1 500],
dann size(vq) = [500 3].
Matrix
oder N-dimensionales Array
Matrix
oder N-dimensionales Array
[size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)]Wenn size(v) = [4 5 6]
und size(xq) = [2 3 7],
dann size(vq) = [2 3 7 5 6].

Stückweises Polynom, zurückgegeben als Struktur, die Sie zur Auswertung an die ppval-Funktion übergeben können.

Mehr über

alle reduzieren

Referenzen

[1] Akima, Hiroshi. "A new method of interpolation and smooth curve fitting based on local procedures." Journal of the ACM (JACM) , 17.4, 1970, pp. 589-602.

[2] Akima, Hiroshi. "A method of bivariate interpolation and smooth surface fitting based on local procedures." Communications of the ACM , 17.1, 1974, pp. 18-20.

Erweiterte Fähigkeiten

alle erweitern

Versionsverlauf

Eingeführt vor R2006a

alle erweitern