Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 01-12-2009 05:56:41
- juheba
- Membre
- Inscription : 14-11-2009
- Messages : 9
Question - Matlab
Bonjour à tous,
J'ai une autre question que je n'arrive pas à résoudre.
Lorsque je roule le code matlab ci-dessous, la seconde boucle while ne semble pas être prise en compte.
Après certains tests, j'ai pu valider que la condition que j'ai écrit en était la cause, mais je ne sais comment remédier à ce point (probablement que l'évaluation de la condition ne se fait pas bien).
J'ai beau tester plusieurs approches, je n'arrive pas à faire rouler cette seconde boucle. Lorsque j'essai le code à la main, (ligne après ligne) j'obtiens toutefois les réponses désirées.
Pourriez vous m'expliquer pourquoi cette boucle n'est pas prise en compte?
Voici le code:
x=[2.5 3]' % Valeur initiale de x
alpha = .001; % Paramètres d'Armijo
beta = .5; % Paramètres d'Armijo
obj=func(x); % Fonction objectif
g=grad(x); % Gradient de la fonction
k=0; % k = # iterations
% Début de l'algorithme de recherche linéaire
while k < 35
d = -g; % Direction de descente
t = 1; % Paramètre t
newobj = func(x + t*d) % Évalue f(x+t*d)
while newobj <= (obj + alpha*t*g'*d) % Évalue le critère d'arrêt d'Armijo LE PROBLÈME EST ICI
t = t*beta % Incrémente t(k+1)
newobj = func(x + t*d); % Remplace la fonction
end
x = x + t*d % Réevaluation de x(k+1)
obj=newobj; % Réevaluation de la nouvelle valeur de la fonction
g=grad(x); % Réevaluation du gradient
k = k + 1; % Incrémente le compteur k
end
% Output x and k
x, k, obj
Merci encore à vous tous pour votre aide!
J.
Hors ligne
Pages : 1







