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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 l’interpolation
 
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 …

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 l’ensemble 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,