Contenuto principale

interp1

Interpolazione di dati monodimensionali (ricerca in tabella)

Descrizione

vq = interp1(x,v,xq) restituisce i valori interpolati di una funzione monodimensionale nei punti di query specifici. Per impostazione predefinita, interp1 utilizza l'interpolazione lineare. Il vettore x contiene i punti di campionamento e v contiene i valori corrispondenti v(x). Il vettore xq contiene le coordinate dei punti di query.

Se si dispone di più insiemi di dati campionati nelle stesse coordinate di punti, è possibile passare v come array. Ciascuna colonna dell'array v contiene un insieme diverso di valori di campionamento monodimensionali.

esempio

vq = interp1(x,v,xq,method) specifica un metodo di interpolazione alternativo: 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'v5cubic', 'makima' o 'spline'. Il metodo predefinito è 'linear'.

esempio

vq = interp1(x,v,xq,method,extrapolation) specifica una strategia per valutare i punti che si trovano al di fuori del dominio di x. Impostare extrapolation su 'extrap' quando si desidera utilizzare l'algoritmo method per l'estrapolazione. In alternativa, è possibile specificare un valore scalare; in questo caso, interp1 restituisce tale valore per tutti i punti che si trovano al di fuori del dominio di x.

esempio

vq = interp1(v,xq) restituisce i valori interpolati e presuppone un insieme predefinito di coordinate dei punti di campionamento. I punti predefiniti sono la sequenza di numeri da 1 a n, dove n dipende dalla forma di v:

  • Quando v è un vettore, i punti predefiniti sono 1:length(v).

  • Quando v è un array, i punti predefiniti sono 1:size(v,1).

Utilizza questa sintassi quando la distanza assoluta tra i punti non è rilevante.

esempio

vq = interp1(v,xq,method) specifica uno dei metodi di interpolazione alternativi e utilizza i punti di campionamento predefiniti.

vq = interp1(v,xq,method,extrapolation) specifica una strategia di estrapolazione e utilizza i punti di campionamento predefiniti.

pp = interp1(x,v,method,'pp') restituisce la forma polinomiale per segmento di v(x) utilizzando l'algoritmo method.

Nota

Questa sintassi non è consigliata. Utilizzare invece griddedInterpolant.

Esempi

comprimi tutto

Definire i punti di campionamento x e i corrispondenti valori di campionamento v.

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

Definire i punti di query in modo che siano un campionamento più preciso nell'intervallo di x.

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

Interpolare la funzione nei punti di query e tracciare il risultato.

figure
vq1 = interp1(x,v,xq);
plot(x,v,'o',xq,vq1,':.');
xlim([0 2*pi]);
title('(Default) Linear Interpolation');

Figure contains an axes object. The axes object with title (Default) Linear Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

Ora valutare v negli stessi punti utilizzando il metodo 'spline'.

figure
vq2 = interp1(x,v,xq,'spline');
plot(x,v,'o',xq,vq2,':.');
xlim([0 2*pi]);
title('Spline Interpolation');

Figure contains an axes object. The axes object with title Spline Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

Definire un insieme di valori della funzione.

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

Definire un insieme di punti di query che ricadono tra i punti predefiniti 1:9. In questo caso, i punti predefiniti sono 1:9 perché v contiene 9 valori.

xq = 1.5:8.5;

Valutare v in xq.

vq = interp1(v,xq);

Tracciare il risultato.

figure
plot((1:9),v,'o',xq,vq,'*');
legend('v','vq');

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 v, vq.

Definire un insieme di punti di campionamento.

x = 1:10;

Definire i valori della funzione v(x)=5x+x2i nei punti di campionamento.

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

Definire i punti di query in modo che siano un campionamento più preciso nell'intervallo di x.

xq = 1:0.25:10;

Interpolare v nei punti di query.

vq = interp1(x,v,xq);

Tracciare la parte reale del risultato in rosso e quella immaginaria in blu.

figure
plot(x,real(v),'*r',xq,real(vq),'-r');
hold on
plot(x,imag(v),'*b',xq,imag(vq),'-b');

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

Interpolare i punti di dati temporali.

Si consideri un insieme di dati contenente le letture della temperatura misurate ogni quattro ore. Creare una tabella con i dati relativi a un giorno e tracciare i dati.

x = (datetime(2016,1,1):hours(4):datetime(2016,1,2))';
x.Format = 'MMM dd, HH:mm';
T = [31 25 24 41 43 33 31]';
WeatherData = table(x,T,'VariableNames',{'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     

plot(WeatherData.Time, WeatherData.Temperature, 'o')

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

Interpolare l'insieme di dati per prevedere la lettura della temperatura durante ogni minuto della giornata. Poiché si tratta di dati periodici, utilizzare il metodo di interpolazione 'spline'.

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

Tracciare i punti interpolati.

hold on
plot(xq,V,'r')

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

Definire i punti di campionamento x e i corrispondenti valori di campionamento v.

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

Specificare i punti di query xq, che si estendono oltre il dominio di x.

xq = [0 0.5 1.5 5.5 6];

Valutare v in xq utilizzando il metodo 'pchip'.

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

   19.3684   13.6316   13.2105    7.4800   12.5600

Poi, valutare v in xq utilizzando il metodo 'linear'.

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

   NaN   NaN    14   NaN   NaN

Ora, utilizzare il metodo 'linear' con l'opzione 'extrap'.

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

     8    10    14     4     2

'pchip' effettua l'estrapolazione per impostazione predefinita, mentre 'linear' non la esegue.

Definire i punti di campionamento x e i corrispondenti valori di campionamento v.

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

Specificare i punti di query xq, che si estendono oltre il dominio di x.

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

Ora valutare v in xq utilizzando il metodo 'pchip' e assegnare qualsiasi valore che si trova al di fuori del dominio di x al valore 27.

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

   27.0000   18.6562    0.9375    0.9375   18.6562   27.0000

Definire i punti di campionamento.

x = (-5:5)';

Campionare tre diverse funzioni paraboliche nei punti definiti in x.

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

Creare la matrice v, le cui colonne sono i vettori v1, v2 e v3.

v = [v1 v2 v3];

Definire un insieme di punti di query xq, in modo che siano un campionamento più preciso nell'intervallo di x.

xq = -5:0.1:5;

Valutare tutte e tre le funzioni in xq e tracciare i risultati.

vq = interp1(x,v,xq,'pchip');
figure
plot(x,v,'o',xq,vq);

h = gca;
h.XTick = -5:5;

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

I cerchi nel grafico rappresentano v, mentre le linee continue rappresentano vq.

Argomenti di input

comprimi tutto

Punti di campionamento, specificati come vettore riga o vettore colonna di numeri reali. I valori in x devono essere distinti. La lunghezza di x deve soddisfare uno dei seguenti requisiti:

  • Se v è un vettore, length(x) deve essere uguale a length(v).

  • Se v è un array, length(x) deve essere uguale a size(v,1).

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

Esempio 1:10

Esempio [3 7 11 15 19 23 27 31]'

Tipi di dati: single | double | duration | datetime

Valori di campionamento, specificati come vettore, matrice o array di numeri reali o complessi. Se v è una matrice o un array, allora ogni colonna contiene un insieme separato di valori monodimensionali.

Se v contiene numeri complessi, interp1 interpola separatamente le parti reali e quelle immaginarie.

Esempio rand(1,10)

Esempio rand(10,1)

Esempio rand(10,3)

Tipi di dati: single | double | duration | datetime
Supporto numeri complessi:

Punti di query, specificati come scalare, vettore, matrice o array di numeri reali.

Esempio 5

Esempio 1:0.05:10

Esempio (1:0.05:10)'

Esempio [0 1 2 7.5 10]

Tipi di dati: single | double | duration | datetime

Metodo di interpolazione, specificato come una delle opzioni riportate in questa tabella.

Metodo

Descrizione

Continuità

Commenti

'linear'

Interpolazione lineare. Il valore interpolato in un punto di query si basa sull'interpolazione lineare dei valori nei punti della griglia adiacenti in ciascuna dimensione rispettiva. Si tratta del metodo di interpolazione predefinito.

C0

  • Richiede la presenza di almeno 2 punti

  • Richiede più memoria e tempo di calcolo rispetto al metodo del vicino più prossimo

'nearest'

Interpolazione al vicino più prossimo. Il valore interpolato in un punto di query è il valore nel punto di campionamento della griglia più vicino.

Discontinuo

  • Richiede la presenza di almeno 2 punti

  • Requisiti di memoria contenuti

  • Tempo di calcolo più rapido

'next'

Interpolazione al vicino successivo. Il valore interpolato in un punto di query è il valore nel punto di campionamento della griglia successivo.

Discontinuo

  • Richiede la presenza di almeno 2 punti

  • Stessi requisiti di memoria e tempo di calcolo di 'nearest'

'previous'

Interpolazione al vicino precedente. Il valore interpolato in un punto di query è il valore nel punto di campionamento della griglia precedente.

Discontinuo

  • Richiede la presenza di almeno 2 punti

  • Stessi requisiti di memoria e tempo di calcolo di 'nearest'

'pchip'

Interpolazione cubica per segmento con conservazione della forma. Il valore interpolato in un punto di query si basa sull'interpolazione cubica per segmento, con conservazione della forma, dei valori nei punti della griglia adiacenti.

C1

  • Richiede la presenza di almeno 4 punti

  • Richiede più memoria e tempo di calcolo rispetto a 'linear'

'cubic'

Convoluzione cubica utilizzata in MATLAB® 5.

C1

  • Richiede la presenza di almeno 3 punti

  • I punti devono avere una spaziatura uniforme

  • Questo metodo ricorre all'interpolazione 'spline' per dati con spaziatura irregolare

  • Requisiti di memoria e tempo di calcolo simili a quelli di 'pchip'

'v5cubic'

Equivale a 'cubic'.

C1

'makima'

Interpolazione cubica modificata di Akima basata sul metodo di Hermite. Il valore interpolato in un punto di query si basa su una funzione per segmento di polinomi con grado massimo pari a tre. La formula di Akima è modificata per evitare sovraelongazioni.

C1

  • Richiede la presenza di almeno 2 punti

  • Produce meno ondulazioni rispetto a 'spline', ma non appiattisce in modo così incisivo come 'pchip'

  • Il calcolo è più oneroso rispetto a 'pchip', ma usualmente inferiore a 'spline'

  • I requisiti di memoria sono simili a quelli di 'spline'

'spline'

Interpolazione spline utilizzando condizioni finali non nodali. Il valore interpolato in un punto di query si basa su un'interpolazione cubica dei valori nei punti della griglia adiacenti in ciascuna dimensione rispettiva.

C2

  • Richiede la presenza di almeno 4 punti, ricorrendo all'interpolazione lineare o quadratica se vengono forniti rispettivamente 2 punti o 3 punti

  • Richiede più memoria e tempo di calcolo rispetto a 'pchip'

Strategia di estrapolazione, specificata come 'extrap' o valore scalare reale.

  • Specificare 'extrap' quando si desidera che interp1 valuti dei punti che si trovano al di fuori del dominio utilizzando lo stesso metodo impiegato per l'interpolazione.

  • Specificare un valore scalare quando si desidera che interp1 restituisca un valore costante specifico per i punti che si trovano al di fuori del dominio.

Il comportamento predefinito dipende dagli argomenti di input:

  • Se si specificano i metodi di interpolazione 'pchip', 'spline' o 'makima', il comportamento predefinito è 'extrap'.

  • Per impostazione predefinita, tutti gli altri metodi di interpolazione restituiscono NaN per i punti di query che si trovano al di fuori del dominio.

Esempio 'extrap'

Esempio 5

Tipi di dati: char | string | single | double

Argomenti di output

comprimi tutto

Valori interpolati, restituiti come scalare, vettore, matrice o array. La grandezza di vq dipende dalla forma di v e xq.

Forma di vForma di xqGrandezza di VqEsempio
VettoreVettoresize(xq)Se size(v) = [1 100]
e size(xq) = [1 500],
allora size(vq) = [1 500].
VettoreMatrice
o array N-D
size(xq)Se size(v) = [1 100]
e size(xq) = [50 30],
allora size(vq) = [50 30].
Matrice
o array N-D
Vettore[length(xq) size(v,2),...,size(v,n)]Se size(v) = [100 3]
e size(xq) = [1 500],
allora size(vq) = [500 3].
Matrice
o array N-D
Matrice
o array N-D
[size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)]Se size(v) = [4 5 6]
e size(xq) = [2 3 7],
allora size(vq) = [2 3 7 5 6].

Polinomio per segmento, restituito come struttura che è possibile passare alla funzione ppval per la valutazione.

Ulteriori informazioni

comprimi tutto

Riferimenti

[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.

Funzionalità estese

espandi tutto

Cronologia versioni

Introduzione prima di R2006a

espandi tutto