
function [Nit,XminIt,valFOit] = SDMom(x0,A,W,alf,a,gam)  
                                        
% ritorna Nit che é il numero di passi in cui converge algoritmo di S.D.M.,
% X= X(k)(X(k)=[Xk-1; Xk] dell'alg.)che = min J(X) e valFO=J(x)= 0.5*x'*(A*x) - x'*a;

[p p]=size(W);
xMin = [];
XminItB=[];
%NitMax=1000000;
NitMax = 1000;
X0(1,1:p/2)=0;
X0(1,(p/2)+1:p)=x0.';         %vett. RIGA! --> deve essere colonn.
V(1:p/2,1)=0;
V((p/2)+1:p,1)=(1-gam)*alf*a; % V= / il sistema dinamico é (W,V) che é a blocchi
zeros(p/2,NitMax); % vettX = []
valFOit = 0;

k=0;
xMin=x0;                       %xMin=Xmin(p/2 +1:p,1);
distX = 1000; % distX=100000
while distX > 100000000000000*3*eps  % ^0.066 con eps =^  2.2204e-016 
    k= k+1;
    X= W*X0' + V;              %X=X(k+1) con X(k+1)=[x_k; x_k+1]
    x=X(p/2 + 1:p,1);          %x = x_k+1
    dis = x - xMin;           
    %dis = X - Xmin;           %d(i) 
    distX = norm(dis);
    X0 = X';                   %X(i)
    vettX(:,k) = X(p/2 + 1:p);
    if k == NitMax
         break;
    end
end
xIt= X(p/2 +1:p,1);
if k == NitMax
     Nit = NitMax;
     disp('attenzione: Nit = NitMax ');
     XminIt=xIt;
     valFOit = 0.5*xIt'*(A*xIt) - xIt'*a;
else
    Nit=k;
    XminIt=xIt;
    valF0it = 0.5*xIt'*(A*xIt)-xIt'*a; 
    
end
   
