Bonjour à tous,
Je souhaiterai optimiser un programme dont le temps de calcul est trop lent à mon goût en supprimant une boucle sur un calcul d’interpolation.
1 2 3 4 5 6 7 8 9 10 11 12 13
| for n=1 :nbre
X=Donnee1(n, : ) %Vecteur X utilisé dans la fonction « interp1(X,Y,Xi) »
Y= [...] % valeurs composant le vecteur Y utilisé dans la fonction « interp1(X,Y,Xi) » même taille que X
Xi= Donnee2(n, : ) %ensemble de valeurs que je souhaite interpoler, Xi dans la fonction « interp1(X,Y,Xi)
Yi= (interp1(X,Y,Xi,'linear','extrap')); % Résultat de linterpolation
Resultfinal=[Resultfinal Yi]; %stockage des résultats de la boucle
end |
En utilisant cette boucle je peux donc interpoler chaque ensemble de valeurs ‘Xi’ avec les vecteurs X et Y sachant que pour chaque mouvement dans la boucle les vecteurs X et Xi vont changer, le vecteur Y lui sera toujours le même. Ce programme fonctionne mais est un peu long.
L’architecture de mon fichier de base fait que je peux obtenir directement tous les vecteurs X et Xi qui composeraient deux matrices.
Mon objectif serait donc d’indexer dans une commande d’interpolation le premier vecteur de la matrice X avec le premier vecteur de la matrice Xi, le second avec le second etc …
1 2 3
| XG= Donnee1 (1:nbre, : ) %matrice contenant tous les vecteurs X
XiG= Donnee2 (1:nbre, : ) %matrice contenant tous les vecteurs Xi
YiG= (interp1(XG,Y,XiG,'linear','extrap')); % XG et XiG étant les matrices contenant les couples (X,Xi) que je voudrais interpoler, YiG une matrice contenant lensemble des interpolations pour chaque duo (X,Xi). |
Pour le moment pour tous les tests que j’ai faits j’ai le message d’erreur :
??? Error using ==> interp1 at 122
X must be a vector.
Existe-il une méthode (soit dans l’écriture de l’indexage, soit avec une autre fonction) qui me permette d’arriver à mes fins ?
Merci d’avance,
Partager