Ouf! Grand sujet.
La "bonne" réponse dépend beaucoup sur votre domaine de problème et de divers détails de ce que vous faites.
Interpoler dans plus d'une dimension nécessite de faire quelques choix. Je suppose que vous tracez sur une grille régulière, mais que certains de vos points de grille n'ont pas de données. Grande question: les points manquants sont-ils épars, ou font-ils de gros blobs?
Vous ne pouvez pas ajouter de l'information, de sorte que vous êtes juste essayer d'établir quelque chose qui va regarder OK.
suggestion conceptuellement simple (mais la mise en œuvre peut être un travail):
Pour chaque région sur les données manquantes, identifier tous les points de bord. C'est de trouver les x dans cette figure
oooxxooo
oox..xoo
oox...xo
ox..xxoo
oox.xooo
oooxoooo
où les. Ce sont les points de données manquantes, et les x et les O contiennent des données (pour un seul point manquant, ce sera les quatre voisins les plus proches). Remplissez chaque point de données manquantes avec une moyenne sur les points de contour autour de ce blob. Pour le rendre lisse, le poids de chaque point par 1/d
où d est la distance taxidriver (delta x + delta y) entre les deux points ..
De avant que nous ayons tous les détails:
En l'absence de ce genre d'information, avez-vous essayé directement l'interpolation linéaire? Si vos données sont raisonnablement denses, cela pourrait le faire pour vous, et il est assez simple de coder en ligne lorsque vous en avez besoin.
La prochaine étape est généralement une spline cubique, mais pour cela, vous voudrez probablement récupérer une implémentation existante.
Quand je besoin de quelque chose de plus puissant qu'une interpolation linéaire rapide, j'utilise habituellement ROOT (et de choisir l'une des classes TSpline), mais cela peut être plus frais généraux que vous avez besoin. Comme noté dans les commentaires, ROOT est big, et bien qu'il soit rapide, il essaie de vous forcer à faire les choses de la façon ROOT, de sorte qu'il peut avoir un grand effet sur votre programme.
Une interpolation linéaire entre (ou même extrapolation à partir de) deux points (x1, y1) et (x2, y2) vous donne
y_i = (x_i-x1)*(y2-y1)/(x2-x1)
Informations supplémentaires nécessaires: Quel type de données est-il? Pouvez-vous nous dire quelque chose sur la nature des courbes (c'est-à-dire à quoi elles ressemblent?) – Rook
Les données sont des matrices de valeurs d'intensité à deux dimensions. Je veux créer une image de quelque sorte. C'est un projet d'école. – Sam
Donc, fondamentalement, aucune des réponses ci-dessous a répondu à la question sur la suggestion d'une bibliothèque ou d'une fonction ... parce que j'ai exactement le même problème que l'op. – bakalolo