Bonjour,
J'aurais besoin d'un petit coup de pouce pour appliquer la méthode du gradient conjugué (enfin la méthode du gradient dans un premier cas déjà) à mon cas. J'ai essayé d'appliquer cette méthode à mon problème de minimisation d'une fonction coût mais je n'obtiens pas les résultats attendus. En même temps je n'ai jamais eu de cours sur les techniques d'optimisations et je m'en remet donc à vous pour analyser mes éventuelles erreurs.
Le problème physique et le suivant : j'ai des données de mesure dans le domaine fréquentiel (Amplitude et phase en fonction de la fréquence). Je sais que mon système est un système du deuxième ordre avec une fonction de transfert du type :
Mon but sera de déterminer les paramètres p6, p7 et p2. Il s'agit donc d'une identification paramétrique basée sur la méthode des gradients.
Il faut donc trouver ces paramètres tels que l'écart quadratique entre l'amplitude et la phase du système réel et l'amplitude et la phase du système théorique H(s) soit minimal. Ainsi on aura les paramètres p2, p6, p7.
La fonction coût à minimiser peut donc se mettre de la forme suivante :
le vecteur paramètre à déterminer est le suivant :
avec H(jw,p) la fonction de transfert calculée à partir du modèle pour les paramètres p2, p6 et p7, l'amplitude de la fonction de transfert expérimentale à la fréquence i, la phase expérimentale à la fréquence i. On somme donc toutes les contributions pour tous les points discrets i.
Le gradient de cette fonction s'écrit :
avec
Ces calculs devraient être bons, ils sont issus d'un article scientifique dont le but est de faire la même chose que moi. J'ai par ailleurs reconduits les calculs qui mènent à la fonction coût et au gradient de ce dernier et ça devrait être tout bon. Le problème est maintenant d'implémenter en pratique l'algorithme du gradient conjugué pour ce cas (ceci n'est plus détaillé dans l'article scientifique, seuls les résultats sont ensuite présentés :/).
J'ai programmé un premier algorithme test sous matlab pour avoir si j'arrive à sortir les bonnes valeur p2, p6, p7. Je l'applique donc à cas un cas ou je connais les réels valeurs inconnues pour vérifier que ça marche.
Je procède de la manière suivante :
Je fixe un premier vecteur solution initial (pas trop loin de la vraie solution pour essayer) :
Je met à jour ensuite la valeur du vecteur inconnu de la manière suivante, à chaque itération l :
Je sais qu'il existe des manières de bien choisir la valeur du pas de descente p pour assurer une rapide convergence, mais pour essayer je prend un valeur de p suffisamment faible.
Lorsque j'exécute pour programme, les valeurs du vecteur p inconnu successifs semblent faire n'importe quoi et diverger. Bref j'ai donc du rater quelque chose. Avez-vous une idée de ce qui ne va pas ?
Merci.
PS : lorsque j'exécute un algorithme en utilisant la fonction fminsearch pour minimiser la même fonction cout P, j'arrive bien à converger vers la bonne valeur du vecteur p inconnu. Cette fonction coût est donc bien définie. Le problème est qu'il faut que j'implémente quelque chose de facilement transposable dans un autre code et il m'est donc interdit d'utiliser fminsearch.
-----