Probleme Matlab:Warning: Matrix is singular to working precisio

Fermé
Ano - 12 nov. 2013 à 23:41
Bonjour,

Voila mon code qui réalise l'optimisation sans contrainte par la méthode DFP:



% courbes de niveau
clear all
close all
x=[-1.9;2];
xsol=[1;1];
[xi, yi] = meshgrid(-2.5:0.2:2.5, -1:0.2:6);
figure(1)
hold on
contour(xi, yi, rosen(xi, yi),90);
colorbar
plot3(x(1),x(2),rosen(x(1),x(2)),'b.');
plot3(xsol(1),xsol(2),rosen(xsol(1),xsol(2)),'r.');


err = 2;
epsi = 0.000000000001;
iter = 0;
sol = x;
xk = x;
xkk = x;
rho=0.0015;

B = eye(2);

tic;
while (iter <= 200 && epsi < err)
iter = iter + 1;

d= -B \ diffrosen(xk(1), xk(2)); % Cette ligne lance un warning
xkk = xk + d;
y = diffrosen(xkk(1), xkk(2)) - diffrosen(xk(1), xk(2));
s = xkk -xk;
B = B+((s*s')/(s'*y)) - (B*y*y'*B)/(y'*B*y);
err = norm(xk - xkk);
drawnow;
xk= xkk;
plot3(xk(1),xk(2),rosen(xk(1),xk(2)),'r*-')
end

t=toc;
%Affichage des valeurs
disp('Le temps de calcul est : ');
disp(t);
disp('L erreur est : ');
disp(err);
disp('Nombre d iterations : ');
disp(iter);



le message de warning est : Warning: Matrix is singular to working precision.
> In DFP at 29
Le temps de calcul est :
0.4367

L erreur est :
NaN

Nombre d iterations :
3



Donc je comprend pas pourquoi cela ne marche pas sachant que j'ai réalisé le même code pour la méthode BFGS et qui fonctionne. Merci a vous.