Interpolation 1D avec Matlab (2024)

Tous droits réservés

Comprendre interp1 et savoir choisir ses options

  • Parler des jointures SQL en français
  • Limites de suites et précision limitée - Partie 2

Si vous souhaitez, notamment,

  • rééchantillonner des signaux,
  • estimer une fonction coûteuse en un point à partir des valeurs en d’autres points,
  • tracer des courbes lissées à partir d’un faible nombre de points,

alors vous aller avoir besoin d’interpoler, voire d’extrapoler !

La fonction interp1 de Matlab permet d’effectuer des interpolations et extrapolations à une dimension. Nous verrons dans ce tutoriel comment l’utiliser, et surtout comment choisir ses paramètres en fonction de vos besoins.

  • Syntaxe
  • Exemple travaillé
  • Choisir les options adéquates

Syntaxe

Nous nous concentrerons sur l’usage avec tous les arguments, y compris optionnels.1 Cet usage se résume par la ligne suivante :

1
vq = interp1(x, v, xq, method, extrapolation);

où :

  • x est le vecteur des abscisses des points d’échantillonnage,
  • v est le vecteur des valeurs d’échantillonnage, correspondant à x.
  • xq est le vecteur des abscisses des points dont on souhaite interpoler la valeur,
  • method est la méthode d’interpolation (à choisir notamment entre 'nearest', 'linear', 'pchip' et 'spline'),
  • extrapolation est la stratégie d’extrapolation (soit 'extrap', soit une constante numérique),
  • vq est le vecteur des valeurs interpolées.

Autrement dit, vq = interp1(x, v, xq, method, extrapolation) retourne la valeur vq aux points xq de la fonction valant v aux points x, et dont la valeur en dehors de ces points est calculée en utilisant la méthode d’interpolation method et la stratégie d’extrapolation extrapolation.

  1. Pour les formes raccourcies, voir la documentation officielle.

Exemple travaillé

Pour clarifier les explications de la section précédente, nous allons travailler sur un exemple.

Imaginons que l’on dispose de relevés de l’élévation du soleil dans le ciel toutes les heures entre 9 heures et 19 heures.

12
temps =[9 10 11 12 13 14 15 16 17 18 19];elevation =[28.5 40 50 60 67.5 70 65 56 45.5 35 23];

On souhaite estimer la position du soleil de 8 heures à 20 heures avec une résolution d’un quart d’heure, de sorte que le vecteur de temps que l’on souhaite est le suivant.

Pour estimer l’élévation pour chaque valeur du vecteur précédent, il est nécessaire d’interpoler et d’extrapoler car les données ont seulement une résolution d’une heure et que les relevés n’ont été effectués que de 9 heures à 19 heures.

Pour guider notre choix de méthode d’interpolation et une stratégie d’extrapolation, on examine les informations dont on dispose sur la courbe. On sait que la fonction qui représente l’élévation en fonction du temps est:

  • continue (le soleil ne saute pas de position),
  • à dérivée continue (la vitesse d’élévation ne change pas brutalement),
  • à dérivée seconde continue (si la vitesse d’élévation varie, alors elle varie continûment).

Les informations ci-dessous signifient que la fonction est au moins de classe $C^2$. La méthode d’interpolation 'spline' et la méthode d’extrapolation 'extrap' semblent des choix judicieux (voir la partie suivante pour plus de détails sur le choix d’une méthode d’interpolation).

1
elevationInterp = interp1(temps, elevation, tempsInterp, 'spline', 'extrap');

Visualisons le résultat obtenu !

123456789
figure;scatter(temps, elevation, 'o');hold all;scatter(tempsInterp, elevationInterp, 'x');xlabel('Temps (heures)');ylabel('Élévation (°)');title('Élévation du soleil au cours d''une journée');legend('mesures','interpolation');ylim([0 80]);
Interpolation 1D avec Matlab (1)

Choisir les options adéquates

Choisir les bonnes méthodes d’interpolation et d’extrapolation n’est pas trivial dans la plupart des cas. Cette section vise à vous guider pour choisir en connaissance de cause.

Méthode d’interpolation

nearest

Si vous souhaitez une très grande performance au détriment de la continuité, alors 'nearest' est fait pour vous ! Vous aurez la plus grande rapidité possible, mais la précision peut en pâtir, puisque la fonction d’interpolation n’est pas continue. Vous aurez des marches d’escalier. Elle nécessite au minimum deux points.

Interpolation 1D avec Matlab (2)

Vous retrouverez ci-dessous le script ayant généré le graphique ci-dessus.

 1 2 3 4 5 6 7 8 91011121314151617
f = @(x) abs(exp(-(x-2.5).^2).*(x-2).^3);nSamples = 17;xSamples = linspace(0, 10, nSamples);ySamples = f(xSamples);xInterp = linspace(-1, 11, 10000);yNearest = interp1(xSamples, ySamples, xInterp, 'nearest', NaN);figure;plot(xInterp, f(xInterp), '-m');hold all;stairs(xInterp, yNearest, 'b');scatter(xSamples, ySamples, '.k');xlim([0 10]);grid on;legend('original', 'interpolation','échantillons');xlabel('x');ylabel('y');

linear

La méthode 'linear' fournit une fonction d’interpolation continue. C’est un bon compromis entre performance et précision. Elle fournit une fonction linéaire par morceau, avec des cassures aux points de données. C’est la méthode à choisir si vous n’avez pas de contrainte particulière de continuité ou de performance. Elle nécessite au minimum deux points.

Interpolation 1D avec Matlab (3)

Vous retrouverez ci-dessous le script ayant généré le graphique ci-dessus.

 1 2 3 4 5 6 7 8 91011121314151617
f = @(x) abs(exp(-(x-2.5).^2).*(x-2).^3);nSamples = 17;xSamples = linspace(0, 10, nSamples);ySamples = f(xSamples);xInterp = linspace(-1, 11, 10000);yNearest = interp1(xSamples, ySamples, xInterp, 'linear', NaN);figure;plot(xInterp, f(xInterp), '-m');hold all;stairs(xInterp, yNearest, 'b');scatter(xSamples, ySamples, '.k');xlim([0 10]);grid on;legend('original', 'interpolation','échantillons');xlabel('x');ylabel('y');

pchip

Pour avoir une fonction d’interpolation à dérivée continue, il faut passer à la méthode 'pchip', qui se base sur des splines cubiques de Hermite. Cette méthode présente l’avantage de préserver la forme : sur chaque intervalle, la fonction d’interpolation est monotone, et donc ne dépasse pas les points de données. Par contre, les crêtes peuvent être coupées. Elle nécessite au minimum quatre points.

Interpolation 1D avec Matlab (4)
 1 2 3 4 5 6 7 8 91011121314151617
f = @(x) abs(exp(-(x-2.5).^2).*(x-2).^3);nSamples = 17;xSamples = linspace(0, 10, nSamples);ySamples = f(xSamples);xInterp = linspace(-1, 11, 10000);yNearest = interp1(xSamples, ySamples, xInterp, 'pchip', NaN);figure;plot(xInterp, f(xInterp), '-m');hold all;stairs(xInterp, yNearest, 'b');scatter(xSamples, ySamples, '.k');xlim([0 10]);grid on;legend('original', 'interpolation','échantillons');xlabel('x');ylabel('y');

spline

La méthode 'spline' est la plus lisse fournie par Matlab. Il s’agit d’un interpolateur à dérivée seconde continue. La fonction d’interpolation est ainsi très lisse, et permet de représenter assez bien les pics. Elle a malheureusem*nt tendance à créer des ondulations1 si les données forment des plateaux. Elle nécessite au minimum quatre points.

Interpolation 1D avec Matlab (5)

Vous retrouverez ci-dessous le script ayant généré le graphique ci-dessus.

 1 2 3 4 5 6 7 8 91011121314151617
f = @(x) abs(exp(-(x-2.5).^2).*(x-2).^3);nSamples = 17;xSamples = linspace(0, 10, nSamples);ySamples = f(xSamples);xInterp = linspace(-1, 11, 10000);yNearest = interp1(xSamples, ySamples, xInterp, 'spline', NaN);figure;plot(xInterp, f(xInterp), '-m');hold all;stairs(xInterp, yNearest, 'b');scatter(xSamples, ySamples, '.k');xlim([0 10]);grid on;legend('original', 'interpolation','échantillons');xlabel('x');ylabel('y');

Synthèse

Le tableau ci-dessous résume les caractéristiques des différentes méthodes d’interpolation.

MéthodeRapiditéEmpreinte mémoireLocalitéContinuitéNombre minimum de points
nearesttrès grandefaiblegrandeNA2
lineargrandemoyennegrandeC02
pchipmoyennegrandemoyenneC14
splinefaibletrès grandefaibleC24

Autres méthodes

Matlab propose d’autres méthodes d’interpolation, je vous laisse regarder en détail la documentation.

Extrapolation

L’extrapolation est un sujet délicat. Dans la majorité des cas, je conseille d’éviter les extrapolation. Si vous êtes forcé à le faire, interp1 propose deux méthodes.

A partir de la méthode d’interpolation ('extrap')

La première consiste à extrapoler en se basant sur la méthode d’interpolation. Pour cela, il faut utiliser le paramètre 'extrap'.

Interpolation 1D avec Matlab (6)

Vous retrouverez ci-dessous le script ayant généré le graphique ci-dessus.

 1 2 3 4 5 6 7 8 91011121314151617
f = @(x) abs(exp(-(x-2.5).^2).*(x-2).^3);nSamples = 17;xSamples = linspace(0, 10, nSamples);ySamples = f(xSamples);xInterp = linspace(-1, 11, 10000);yNearest = interp1(xSamples, ySamples, xInterp, 'spline', 'extrap');figure;plot(xInterp, f(xInterp), '-m');hold all;stairs(xInterp, yNearest, 'b');scatter(xSamples, ySamples, '.k');xlim([-1 11]);grid on;legend('original', 'interpolation','échantillons');xlabel('x');ylabel('y');

Avec une valeur numérique constante

Autrement, il est possible de spécifier une valeur qui sera utilisée pour tous les points tombant en dehors de l’étendue des $x_i$.

Interpolation 1D avec Matlab (7)

Vous retrouverez ci-dessous le script ayant généré le graphique ci-dessus.

 1 2 3 4 5 6 7 8 91011121314151617
f = @(x) abs(exp(-(x-2.5).^2).*(x-2).^3);nSamples = 17;xSamples = linspace(0, 10, nSamples);ySamples = f(xSamples);xInterp = linspace(-1, 11, 10000);yNearest = interp1(xSamples, ySamples, xInterp, 'spline', 0);figure;plot(xInterp, f(xInterp), '-m');hold all;stairs(xInterp, yNearest, 'b');scatter(xSamples, ySamples, '.k');xlim([-1 11]);grid on;legend('original', 'interpolation','échantillons');xlabel('x');ylabel('y');

Cette utilisation correspond parfois à un cas où l’on ne contrôle pas parfaitement les données d’entrées (paramètres de l’utilisateur, sortie d’un autre script, etc). Il est dans ce cas intéressant de marquer ces valeurs grâce à la valeur spéciale NaN.

  1. Il s’agit d’un phénomène similaire au phénomène de Gibbs et au phénomène de Runge.

Vous savez désormais comment interpoler à une dimension avec Matlab, ainsi que choisir au mieux les paramètres en fonction de votre problème et de vos données.

Si êtes curieux et souhaitez en apprendre plus, les quelques liens suivant devraient élargir vos horizons.

Références

Sur le fonctionnement de Matlab

Sur l’interpolation au plus proche

  • Une implémentation simpliste en Python de l’interpolation au plus proche.

Sur l’interpolation linéaire

Sur l’interpolation cubique de type pchip

Sur l’interpolation cubique de type spline

  • Parler des jointures SQL en français
  • Limites de suites et précision limitée - Partie 2

Aucun commentaire

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte

Interpolation 1D avec Matlab (2024)

References

Top Articles
Sugar Caffeine Withdrawal - Nutrition | NoahStrength.com
Apex Legends™: Shockwave Patch Notes
Hotels
Research Tome Neltharus
Faint Citrine Lost Ark
³µ¿Â«»ÍÀÇ Ã¢½ÃÀÚ À̸¸±¸ ¸íÀÎ, ¹Ì±¹ Ķ¸®Æ÷´Ï¾Æ ÁøÃâ - ¿ù°£ÆÄ¿öÄÚ¸®¾Æ
Meer klaarheid bij toewijzing rechter
Boggle Brain Busters Bonus Answers
41 annonces BMW Z3 occasion - ParuVendu.fr
Irving Hac
Top Golf 3000 Clubs
Bubbles Hair Salon Woodbridge Va
fltimes.com | Finger Lakes Times
People Portal Loma Linda
Vcuapi
Bad Moms 123Movies
The Superhuman Guide to Twitter Advanced Search: 23 Hidden Ways to Use Advanced Search for Marketing and Sales
Are They Not Beautiful Wowhead
My.tcctrack
The Grand Canyon main water line has broken dozens of times. Why is it getting a major fix only now?
CVS Near Me | Columbus, NE
Scout Shop Massapequa
Tyler Sis University City
Rqi.1Stop
Wbiw Weather Watchers
Self-Service ATMs: Accessibility, Limits, & Features
Vegito Clothes Xenoverse 2
Chime Ssi Payment 2023
3Movierulz
Kimoriiii Fansly
Coindraw App
Goodwill Of Central Iowa Outlet Des Moines Photos
Safeway Aciu
Hobby Lobby Hours Parkersburg Wv
Gopher Hockey Forum
Fridley Tsa Precheck
Ultra Clear Epoxy Instructions
Most popular Indian web series of 2022 (so far) as per IMDb: Rocket Boys, Panchayat, Mai in top 10
Garrison Blacksmith's Bench
Timothy Kremchek Net Worth
Instafeet Login
Dollar Tree's 1,000 store closure tells the perils of poor acquisitions
craigslist | michigan
Cookie Clicker The Advanced Method
Metro Pcs Forest City Iowa
Jasgotgass2
Citibank Branch Locations In Orlando Florida
Lake Andes Buy Sell Trade
Sofia With An F Mugshot
Willkommen an der Uni Würzburg | WueStart
E. 81 St. Deli Menu
Latest Posts
Article information

Author: Kieth Sipes

Last Updated:

Views: 6012

Rating: 4.7 / 5 (67 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Kieth Sipes

Birthday: 2001-04-14

Address: Suite 492 62479 Champlin Loop, South Catrice, MS 57271

Phone: +9663362133320

Job: District Sales Analyst

Hobby: Digital arts, Dance, Ghost hunting, Worldbuilding, Kayaking, Table tennis, 3D printing

Introduction: My name is Kieth Sipes, I am a zany, rich, courageous, powerful, faithful, jolly, excited person who loves writing and wants to share my knowledge and understanding with you.