Interpolation en cloche

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J'ai un certain nombre de jeux de données de 3 lignes. Par exemple

1
2
3
0 0
0.5 0.95
1 0.21

J'ai besoin de faire une jolie interpolation en cloche dessus. J'essaie de le faire ne utilisant xmgrace, mais je suis ouvert à d'autre logiciels, si ils sont gratuits, sous linux, et permettent l'exportation en format vectoriel.

Donc j'ai essayé tout bêtement un "cubic spline", mais les dérivées aux bornes ne sont pas ce que je veux. J'ai aussi essayé une fonction du type (avec le 0.5 qui correspond au maximum au milieu de mon jeu de données)

$$ y=A_0+A_1\cdot x +A_2\cdot exp \left(-A_3\cdot (x-0.5)^2\right) $$

mais le logiciel ne semble pas réussir à me donner une réponse (4 paramètres pour seulement trois points ? Ça pourrait être le problème).

D'où ma question. Connaîtriez-vous un moyen de faire ce que je veux ? Si possible, j'aimerais pouvoir imposer des limites à $A_3$, pour éviter une cloche trop large ou trop étroite.

Merci d'avance

Je suis d'accord, mais je n'avais pas d'idée pour une cloche dont les deux extrêmité n'auraient pas la même valeur (comme dans mon exemple), et dont le point intermédiaire serait le maximum. Du coup, j'ai "triché".

Cette forme me conviendrait. Quelque chose de plus "clochique" également. Je ne suis pas très difficile, ce n'est qu'une question d'esthétique, pour une représentation graphique. J'ai les données utiles de manière exacte déjà.

Il y a un point qui n'est pas clair dans ton message (voire plusieurs).

Tu parles de 3 points, et aussi de plusieurs points. Quelles sont les contraintes, et quels sont les données que tu veux approcher. Dans mon idée, tu as plein de points, qui sont plus ou moins disposés en cloche, et tu cherche une cloche qui approche au mieux tes différents points (sans passer nécessairement par tous les points). La cloche obtenue devant en plus avoir son sommet au point d'abscisse 0.5. Et tu chercherais donc à minimiser la distance moyenne entre les points et la courbe retenue (comme quand on dessine une droite de régression à partir d'un nuage de points).

Autre option, tu as plein de triplets, et pour chaque triplet, tu veux une cloche qui passe exactement par ces 3 points. On aurait donc autant de cloches que de triplets. Pour le triplet donné en exemple, il faudra soit une fausse cloche (la forme générale que tu proposais), soit une cloche dont le centre ne serait pas en 0.5 mais plutôt en 0.4. De plus, dans une cloche 'classique', toutes les valeurs des Y sont strictement positives, il faudrait donc introduire une constante, comme tu l'avais fait.

C'est l'autre option.

J'ai 64 triplets. Je sais que le point au milieu doit être le sommet. Le comportement physique serait plus proche de deux demi-cloches, pour garder les dérivées nulles aux extrêmités, mais comme ce n'est pas important d'être précis ici (sinon, je calculerais 5 ou 10 points intermédiaires), je suis pleinement satisfait avec ma "fausse cloche". Le problème c'est que mon logiciel ne parvient pas à faire l'interpolation correctement. En fixant manuellement A3, il y parvient, et c'est probablement ce que je vais faire.

Mais soit, disons que j'utilise cette équation. Sur xmgrace, pour chaque jeu de donnée, il faut que j'en crée un de plus moi-même, que j'entre l'équation, que je fasse l'interpolation vers le jeu recemment créé. Je suis juste fainénant, et je me demandais si vous connaissiez un programme permettant de le faire automatiquement pour tous les cas. J'en avais profité pour demander si vous connaissiez une meilleure équation, ou un programme qui fasse un cubic spline en acceptant des conditions aux limites, mais c'est secondaire.

De manière générale si tu as 3 points, tu dois avoir 3 variables. Avec 4 variables, il y a en général une infinité de solutions. Ici, avec la forme générale que tu as proposée, et avec les données initiales, tu trouves très vite que A1 = 0.21, ensuite, tu dois effectivement fixer A0 A2 ou A3. le mieux est de fixer A3, et de chercher A0 et A2.

J'arrive après la bataille mais je donne quand même une solution qui marche et qui est très généralisable:

Les "vrai" splines cubiques. Tu définis une fonction par morceau (polynôme de degré 3) qui interpole 2 points. Pour ca il te faut connaitre en plsu de l'abscisse et ordonnée des points la dérivée au niveau des points.

Ça correspond exactement ce que tu cherches:

Tu cherches une fonction qui passe par tes 3 points et dont la dérivée est nulle au niveau du premier et 2eme point. Il faut juste faire une hypothèse sur la dérivé au niveau du 2eme point ou définir l'abscisse ou s'annule le second polynôme.

Au final ce sont des système d’équation linéaire à 4 inconnu à résoudre, mathematica, matlab ou n'importe quel logiciel de calcul fait l'affaire. Voila ce que j'obtiens pour tes données :

Spline cubique

Là, la dérivée est nulle en chaque point.

+2 -0
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