Je cherche a implémenter une interpolation cubic en matlab dans un premier temps.
Pour ce faire, j'ai trouvé ce site qui explique pas mal de chose https://www.paulinternet.nl/?page=bicubic
J'ai donc écrit deux fonctions :
- Code: Tout sélectionner
function interpolateDatas = cubicInterpolate(p0,p1,p2,p3,xTarget)
xvect = [-1,0,1,2];
P1 = [p0,p0,p1,p2,p3,p3] ;
if xTarget < xvect(2)
xrequiered = xTarget - xvect(1);
Px = P1(1:4);
elseif( xTarget >= xvect(2) && xTarget < xvect(3) )
xrequiered = xTarget ;
Px = P1(2:5);
elseif xTarget >= xvect(3)
xrequiered = xTarget - 1;
Px = P1(3:6);
end
interpolateDatas = cInterpolate(Px, xrequiered);
end
et
- Code: Tout sélectionner
function f = cInterpolate(p, x)
p0 = p(1);
p1 = p(2);
p2 = p(3);
p3 = p(4);
f = p1 + 0.5 * x.*(p2 - p0 + x.*(2.0*p0 - 5.0*p1 + 4.0*p2 - p3 + x.*(3.0*(p1 - p2) + p3 - p0)));
end
Cela me donne de bon résultat a en croire mes plots.
Malheureusement je ne comprends pas comment faire pour utiliser l'interpolation en dehors de la plage 0:1.
Si j'en crois les explications il faut obligatoirement que la valeur interpolé soit entre 0 et 1. cependant, moi je souhaite pouvoir interpoler n'importe quelle valeur dans un vecteur.
Comment faire ?
Je ne sais pas si j'ai été assez clair, laissez moi savoir si vous avez besoin de précisions.
La finalité serait d'avoir une fonction qui prend en entré un vecteur X et Y et qui a partir de n’importe quelle xi dans la plage de donnée de X, sort une valeur interpoler yi. A l'image de la fonction native de matlab, "interp1"
Cordialement