Problème dinterpolation cubique monotone

Hibou57

Comme-même (tm)
VIB
Y‑a‑t‑il des matheux(ses) ici qui peuvent m’épargner de devenir fou ? :(

Je veux faire une interpolation cubique monotone en utilisant ces trois points de données :

point n°1 : (2.0, 40.0)
point n°2 : (3.0, 2.0)
point n°3 : (4.0, 1.0)

J’ai écrit une fonction en XLISP, et quand je l’applique aux points de données ci‑dessus, voici les résultats que je trouve avec x dans [2.0,4.0] avec un incrément de 0.1 :

f(2.0) = 40
f(2.1) = 36.0335
f(2.2) = 31.808
f(2.3) = 27.4345
f(2.4) = 23.024
f(2.5) = 18.6875
f(2.6) = 14.536
f(2.7) = 10.6805
f(2.8) = 7.232
f(2.9) = 4.3015
f(3.0) = 2
f(3.1) = 0.4015
f(3.2) = -0.568
f(3.3) = -1.0195
f(3.4) = -1.064
f(3.5) = -0.8125
f(3.6) = -0.376
f(3.7) = 0.1345
f(3.8) = 0.608
f(3.9) = 0.9335
f(4.0) = 1

Dans l’intervalle ]3,4[ il y a un sérieux problème, parce que ça ne devrait jamais descendre en dessous de 1.0. Non seulement ça descende en dessous, mais en plus rapidement et ça descend même dans le négatif.

Pour info, les pentes des tangentes aux trois points de données sont :

-38, -19.5, -1

Je crois qu’il y a un problème avec la fonction de base h10 du spline cubique d'Hermite, parce que quand je l’annule, le problème disparait. Mais est‑ce une erreur chez moi ou un erreur de Wikipédia ?

Pour l’algorithme (je l’ai fait en XLISP), j’ai utilisé la description mathématique d’après ces deux pages de Wikipédia :

http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
http://en.wikipedia.org/wiki/Cubic_Hermite_spline
 

Hibou57

Comme-même (tm)
VIB
niveau licence .
Sauf que je ne suis pas en licence et j’ai quitté le lycée en première et que je n’ai fait qu’un an de FAC après, c’est tout :D

est ce que tu peux recopier la ligne de lalgorithme dans lintervalle ]3,4[

L’intervalle de X : [x1,x2] avec x1 = 3 et x2 = 4
L’intervalle de Y : [y1,y2] avec y1 = 2 et y2 = 1
Pente de la tangente en (x1,y1) : a1 = -19.5
Pente de la tangente en (x2,y2) : a2 = -1

h = (delta x1 x2) = x2 - x1 = 1

H, c’est un facteur d’échelle pour ramener l’intervalle [x1,X2] à l’intervalle [0,1]

La variable des h00, h10, h01 et h11 :
t = (delta x1 x) / h = (x - x1) / h

T est une valeur dans l’intervalle [0,1]

Les coefficients de respectivement h00, h10, h01 et h11 :
p0 = y1 = 2
m0 = h * a1
p1 = y2 = 1
m1 = h * a2

L’évaluation :
e1 = p0 * h00(t) = p0 * (2t³ - 3t² + 1)
e2 = m0 * h10(t) = m0 * (t³ - 2t² + t)
e3 = p1 * h01(t) = p1 * (-2t³ + 3t²)
e4 = m1 * h11(t) = m1 * (t³ - t²)

f(x) = e1 + e2 +e3 + e4

Je ne l’ai pas écrit exactement comme ça, les noms de certaines “variables” ne sont pas les mêmes, mais c’est normalement ce qui est calculé.
 
Sauf que je ne suis pas en licence et j’ai quitté le lycée en première et que je n’ai fait qu’un an de FAC après, c’est tout :D



L’intervalle de X : [x1,x2] avec x1 = 3 et x2 = 4
L’intervalle de Y : [y1,y2] avec y1 = 2 et y2 = 1
Pente de la tangente en (x1,y1) : a1 = -19.5
Pente de la tangente en (x2,y2) : a2 = -1

h = (delta x1 x2) = x2 - x1 = 1

H, c’est un facteur d’échelle pour ramener l’intervalle [x1,X2] à l’intervalle [0,1]

La variable des h00, h10, h01 et h11 :
t = (delta x1 x) / h = (x - x1) / h

T est une valeur dans l’intervalle [0,1]

Les coefficients de respectivement h00, h10, h01 et h11 :
p0 = y1 = 2
m0 = h * a1
p1 = y2 = 1
m1 = h * a2

L’évaluation :
e1 = p0 * h00(t) = p0 * (2t³ - 3t² + 1)
e2 = m0 * h10(t) = m0 * (t³ - 2t² + t)
e3 = p1 * h01(t) = p1 * (-2t³ + 3t²)
e4 = m1 * h11(t) = m1 * (t³ - t²)

f(x) = e1 + e2 +e3 + e4

Je ne l’ai pas écrit exactement comme ça, les noms de certaines “variables” ne sont pas les mêmes, mais c’est normalement ce qui est calculé.

il est ou ton 4eme point ?
 

Hibou57

Comme-même (tm)
VIB
Une interpolation cubique avec seulement 3 points o_O
C’est le nom qui est donné sur Wikipédia. Je ne pense pas que le nom dépende du nombre de point de données, mais de la fonction qui permet d’extrapoler entre deux points.

il est ou ton 4eme point ?
L’extrapolation entre deux points ne dépend que de la pente de la tangente choisie pour chacun de ces deux points. Quand je le fait avec quatre points, j’ai toujours le même problème. Quand je le fait avec seulement deux points, comme (3.0, 2.0) (4.0, 1.0), je n’ai plus le problème. Ce qu’il se passe, c’est que la tangente en (2.0, 40.0) influence la valeur de la tangente en (3.0, 2.0). Mais ça ne devrait pas poser de problème normalement.

Ou alors est‑ce que les tangentes ont des valeurs limites pour que l’extrapolation fonctionne ?

Sinon je peux re‑poster la même chose que ci‑dessus, mais quand j’ai quatre points au lieu de trois.

Si je n’y arrive pas, je vais essayer une autre méthode.
Peut‑être ça : http://en.wikipedia.org/wiki/Spline_interpolation
Mais normalement ça devrait marcher.
 

Hibou57

Comme-même (tm)
VIB
Voyooooons, tu connais la réponse.


C'est par la même, l'unique solution qu'admet ce problème :cool:


<=
Si vous êtes 3 à le dire, alors voilà.

Pour le même intervalle, mais quand j&#8217;ai quatre points.

Les points : (1.0, 80.0) (2.0, 40.0) (3.0, 2.0) (4.0, 1.0)

Les pentes des tangentes en ces points : -40, -39, -19.5, -1

Et tous le reste est pareil pour l&#8217;intervalle [3, 4], alors l&#8217;ajout d&#8217;un quatrième point ne change pas l&#8217;interpolation dans l&#8217;intervalle de [3, 4].
 

Hibou57

Comme-même (tm)
VIB
Une interpolation cubique avec seulement 3 points o_O
Je viens de vérifier, et le cube n&#8217;a pas à voir avec le nombre de points, mais avec le degré du polynôme de la fonction de base, celle des parties de la courbe.

http://en.wikipedia.org/wiki/Cubic_Hermite_spline
Wikipédia à dit:
In numerical analysis, a cubic Hermite spline or cubic Hermite interpolator is a spline where each piece is a third-degree polynomial specified in Hermite form
 

parlaba

Toutes les routes mènent là-bas.
Bonsoir,

Voici une tentative de réponse.

Graphiquement :
L'ordonnée du 1er point est trés élevé par rapport aux 2 autres qui eux sont très proche l'un de l'autre.
L'interpolation appliquée au 3 points est tel que la courbe obtenue sera plus proche d'une courbe dite "harmonieuse" qu'une courbe dite "segmentée".

Du point n°1 au point n°2 :
La courbe décroit "violamment". (tangente aux points intérmédiaires très bas)​
Du point n°2 au point n°3 :

La tangente au point n°2 est encore très bas, ajoutez à cela le fait que le point n°3 est proche du point n°2 (en terme de valeur, à contrario avec les point N°1 et n°2), de ce fait et afin d'obtenir une courbe plus "harmonieuse", l'interpolation provoque la " courbure" entre les points n°1 et n°2.​

Le schéma ci-dessous sera surement plus explicite.
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    6.8 KB · Affichages: 36

Hibou57

Comme-même (tm)
VIB
Une interpolation cubique nécessite 4 points ... le degré 3 correspond au degré du polynôme qui résulte de ton interpolation.

Tous ces calculs, c'est pour du son ?
Oui, comment t&#8217;as deviné ? J&#8217;ai rien dit de ça :wazaa:

C&#8217;est pour plusieurs choses, mais ce n&#8217;est pas pour calculer les ondes sonores, c&#8217;est pour des manipulations sur les ondes sonores : ajustement du volume sonore en fonction de la fréquence, d&#8217;après les courbes isophones standards (norme ISO&#8209;FDIS 226 de 2003) et ajustement de l&#8217;amplitude pour correspondre à un volume sonore en fonction de la forme de l&#8217;onde (relation entre RMS et amplitude).

Sinon je continuais à lire, et là il est dit une chose que je soupçonnais :
http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Monotone_cubic_interpolation
Wikipédia à dit:
If a cubic Hermite spline of any of the above listed types is used for interpolation of a monotonic data set, the interpolated function will not necessarily be monotonic, but monotonicity can be preserved by adjusting the tangents.
Je crois que j&#8217;ai une tangente trop raide.

Dans cette page il parle bien d&#8217;ajustement des tangente, mais justement, dans le jeux de points de données de testes, aucun ajustement n&#8217;est nécessaire à en croire ce que dit cette page, et pourtant ça ne marche pas.
http://en.wikipedia.org/wiki/Monotone_cubic_interpolation

Je suis sûr que c&#8217;est un problème avec les tangentes, mais je ne sais pas comment les ajuster alors.
 

Hibou57

Comme-même (tm)
VIB
Bonsoir,

Voici une tentative de réponse.

Graphiquement :
L'ordonnée du 1er point est trés élevé par rapport aux 2 autres qui eux sont très proche l'un de l'autre.
L'interpolation appliquée au 3 points est tel que la courbe obtenue sera plus proche d'une courbe dite "harmonieuse" qu'une courbe dite "segmentée".

Du point n°1 au point n°2 :
La courbe décroit "violamment". (tangente aux points intérmédiaires très bas)​
Du point n°2 au point n°3 :

La tangente au point n°2 est encore très bas, ajoutez à cela le fait que le point n°3 est proche du point n°2 (en terme de valeur, à contrario avec les point N°1 et n°2), de ce fait et afin d'obtenir une courbe plus "harmonieuse", l'interpolation provoque la " courbure" entre les points n°1 et n°2.​

Le schéma ci-dessous sera surement plus explicite.
Oui, c&#8217;est comme ça que je le voyais dans ma tête, mais j&#8217;espérais un miracle quand&#8209;même.

À ton avis, c&#8217;est possible avec ce type de fonction, ou je dois trouver une autre méthode ?

Ton graphique rend encore plus évident que c&#8217;est peut&#8209;être impossible et qu&#8217;il faut peut&#8209;être une autre méthode.

P.S. Merci pour le temps que tu as donné à faire ce graphique :) Tu as utilisé quoi pour le faire ?
 

parlaba

Toutes les routes mènent là-bas.
Oui, c’est comme ça que je le voyais dans ma tête, mais j’espérais un miracle quand&#8209;même.

À ton avis, c’est possible avec ce type de fonction, ou je dois trouver une autre méthode ?

Ton graphique rend encore plus évident que c’est peut&#8209;être impossible et qu’il faut peut&#8209;être une autre méthode.

P.S. Merci pour le temps que tu as donné à faire ce graphique :) Tu as utilisé quoi pour le faire ?

J'ai utilisé Excel pour le graphique avec la courbe bleu.
J'ai fai un imprime écran et j'ai rajouté la courbe rouge avec paint. :)
 

Hibou57

Comme-même (tm)
VIB
Le schéma ci-dessous sera surement plus explicite.
Il y a un truc qui me chiffonne. Normalement au dernier point, la tangente est de -1.0, et de visu sur le graphe, elle est plutôt de +1 . Pourtant ton graphe est bon, il correspond au données que je trouve. Alors ça veut dire que le polynôme ne fonctionne pas comme prévu, parce que normalement les tangente de départ et d&#8217;arrivé devraient être vérifiées. Ou alors peut&#8209;être que les coefficients ne sont pas bon.

Je vais y revenir demain, j&#8217;aurai peut&#8209;être trouvé.
 
A

AncienMembre

Non connecté
Y&#8209;a&#8209;t&#8209;il des matheux(ses) ici qui peuvent m’épargner de devenir fou ?

Je veux faire une interpolation cubique monotone en utilisant ces trois points de données :

point n°1 : (2.0, 40.0)
point n°2 : (3.0, 2.0)
point n°3 : (4.0, 1.0)

J’ai écrit une fonction en XLISP, et quand je l’applique aux points de données ci&#8209;dessus, voici les résultats que je trouve avec x dans [2.0,4.0] avec un incrément de 0.1 :

f(2.0) = 40
f(2.1) = 36.0335
f(2.2) = 31.808
f(2.3) = 27.4345
f(2.4) = 23.024
f(2.5) = 18.6875
f(2.6) = 14.536
f(2.7) = 10.6805
f(2.8) = 7.232
f(2.9) = 4.3015
f(3.0) = 2
f(3.1) = 0.4015
f(3.2) = -0.568
f(3.3) = -1.0195
f(3.4) = -1.064
f(3.5) = -0.8125
f(3.6) = -0.376
f(3.7) = 0.1345
f(3.8) = 0.608
f(3.9) = 0.9335
f(4.0) = 1

Dans l’intervalle ]3,4[ il y a un sérieux problème, parce que ça ne devrait jamais descendre en dessous de 1.0. Non seulement ça descende en dessous, mais en plus rapidement et ça descend même dans le négatif.

Pour info, les pentes des tangentes aux trois points de données sont :

-38, -19.5, -1

Je crois qu’il y a un problème avec la fonction de base h10 du spline cubique d'Hermite, parce que quand je l’annule, le problème disparait. Mais est&#8209;ce une erreur chez moi ou un erreur de Wikipédia ?

Pour l’algorithme (je l’ai fait en XLISP), j’ai utilisé la description mathématique d’après ces deux pages de Wikipédia :

http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
http://en.wikipedia.org/wiki/Cubic_Hermite_spline

:eek:

...

Vive le Bac L ! :D
 
Y&#8209;a&#8209;t&#8209;il des matheux(ses) ici qui peuvent m&#8217;épargner de devenir fou ? :(

Je veux faire une interpolation cubique monotone en utilisant ces trois points de données :

point n°1 : (2.0, 40.0)
point n°2 : (3.0, 2.0)
point n°3 : (4.0, 1.0)

J&#8217;ai écrit une fonction en XLISP, et quand je l&#8217;applique aux points de données ci&#8209;dessus, voici les résultats que je trouve avec x dans [2.0,4.0] avec un incrément de 0.1 :

f(2.0) = 40
f(2.1) = 36.0335
f(2.2) = 31.808
f(2.3) = 27.4345
f(2.4) = 23.024
f(2.5) = 18.6875
f(2.6) = 14.536
f(2.7) = 10.6805
f(2.8) = 7.232
f(2.9) = 4.3015
f(3.0) = 2
f(3.1) = 0.4015
f(3.2) = -0.568
f(3.3) = -1.0195
f(3.4) = -1.064
f(3.5) = -0.8125
f(3.6) = -0.376
f(3.7) = 0.1345
f(3.8) = 0.608
f(3.9) = 0.9335
f(4.0) = 1

Dans l&#8217;intervalle ]3,4[ il y a un sérieux problème, parce que ça ne devrait jamais descendre en dessous de 1.0. Non seulement ça descende en dessous, mais en plus rapidement et ça descend même dans le négatif.

Pour info, les pentes des tangentes aux trois points de données sont :

-38, -19.5, -1

Je crois qu&#8217;il y a un problème avec la fonction de base h10 du spline cubique d'Hermite, parce que quand je l&#8217;annule, le problème disparait. Mais est&#8209;ce une erreur chez moi ou un erreur de Wikipédia ?

Pour l&#8217;algorithme (je l&#8217;ai fait en XLISP), j&#8217;ai utilisé la description mathématique d&#8217;après ces deux pages de Wikipédia :

http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
http://en.wikipedia.org/wiki/Cubic_Hermite_spline
pourquoi ne pas rajouter deux points (total six points) et faire deux fonctions d interpolation mais qui reste lisse au milieu (ou même le faire sur 5 points avec un point au milieu)
 

Hibou57

Comme-même (tm)
VIB
pourquoi ne pas rajouter deux points (total six points) et faire deux fonctions d interpolation mais qui reste lisse au milieu (ou même le faire sur 5 points avec un point au milieu)
C’est déjà une fonction par morceaux sur l’ensemble. Si je te comprend bien, tu suggère d’ajouter d’autres points entre ces deux points, pour re&#8209;découper ce segment en particulier. Ça peut être une solution, mais elle ne conviendra pas en pratique, parce que en pratique il n’y aura pas d’intervention possible, et ça devra marcher tout seul.

Je penserai à ne pas être égoïste quand j’aurai la solution, je dirai comment je l’ai résolu.
 
Y&#8209;a&#8209;t&#8209;il des matheux(ses) ici qui peuvent m’épargner de devenir fou ? :(

Je veux faire une interpolation cubique monotone en utilisant ces trois points de données :

point n°1 : (2.0, 40.0)
point n°2 : (3.0, 2.0)
point n°3 : (4.0, 1.0)

J’ai écrit une fonction en XLISP, et quand je l’applique aux points de données ci&#8209;dessus, voici les résultats que je trouve avec x dans [2.0,4.0] avec un incrément de 0.1 :

f(2.0) = 40
f(2.1) = 36.0335
f(2.2) = 31.808
f(2.3) = 27.4345
f(2.4) = 23.024
f(2.5) = 18.6875
f(2.6) = 14.536
f(2.7) = 10.6805
f(2.8) = 7.232
f(2.9) = 4.3015
f(3.0) = 2
f(3.1) = 0.4015
f(3.2) = -0.568
f(3.3) = -1.0195
f(3.4) = -1.064
f(3.5) = -0.8125
f(3.6) = -0.376
f(3.7) = 0.1345
f(3.8) = 0.608
f(3.9) = 0.9335
f(4.0) = 1

Dans l’intervalle ]3,4[ il y a un sérieux problème, parce que ça ne devrait jamais descendre en dessous de 1.0. Non seulement ça descende en dessous, mais en plus rapidement et ça descend même dans le négatif.

Pour info, les pentes des tangentes aux trois points de données sont :

-38, -19.5, -1

Je crois qu’il y a un problème avec la fonction de base h10 du spline cubique d'Hermite, parce que quand je l’annule, le problème disparait. Mais est&#8209;ce une erreur chez moi ou un erreur de Wikipédia ?

Pour l’algorithme (je l’ai fait en XLISP), j’ai utilisé la description mathématique d’après ces deux pages de Wikipédia :

http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
http://en.wikipedia.org/wiki/Cubic_Hermite_spline
C'est le code pour entrer dans la maison blanche ?
 
C&#8217;est déjà une fonction par morceaux sur l&#8217;ensemble. Si je te comprend bien, tu suggère d&#8217;ajouter d&#8217;autres points entre ces deux points, pour re&#8209;découper ce segment en particulier. Ça peut être une solution, mais elle ne conviendra pas en pratique, parce que en pratique il n&#8217;y aura pas d&#8217;intervention possible, et ça devra marcher tout seul.

Je penserai à ne pas être égoïste quand j&#8217;aurai la solution, je dirai comment je l&#8217;ai résolu.
en fait d après ce que j ai compris dans cet article, c est tjs une fonction pour 3 points,donc si tu a quarte points c est impossible de le faire ( avec cette méthode d interpolation , peut être les autres ca marcherais mieux, comme interpolation de lagrange) il faut une autre fonction.
 

Pièces jointes

  • lecture13.pdf
    105.1 KB · Affichages: 24
Haut