Método de Newton para Sistemas de Equações não Lineares

Implementação do método de Newton em Rn, para resolução de sistemas de equações não lineares da forma F(X) = 0, em que X = (x_ 1, ... , x_n) e F = (f_ 1, ... , f_n). A convergência do método é condicional e tipicamente de ordem 2. 
    
 Parâmetros de entrada :

*  F, X : a função vectorial F e o seu argumento X
* X0     : vector que dá a aproximação inicial
* tol      : erro maximo desejado, medido com base da distância entre as duas últimas iteradas.
 * nmax : número máximo de iterações

Parâmetros de saída :
  
  * vector numérico com a solução do problema, correspondendo à última iteração calculada. Se o número máximo de iterações for atingido é emitida mensagem de erro.

Newton[Fs_,X_,X0_, tol_,nmax_]:=Module[{JF,DF,NormaInf,F,oldsol,sol,iter,s,n,y},
n=Length[X];
F[s_]:=Fs/.Table[X[[i]]->s[[i]],{i,1,n}];
DF[s_,i_,j_]:=D[Fs[[i]],X[[j]]]/.Table[X[[k]]->s[[k]],{k,1,n}];
JF[s_]:=Table[DF[s,i,j],{i,1,n},{j,1,n}];
NormaInf[s_]:=Max[Abs[s]];
sol=X0;
oldsol = X0+2*tol;
iter = 0;
While[And[iter≤nmax,NormaInf[sol-oldsol]>tol],
oldsol=sol;
(* determinar y, solução de JF.y = -F *)
y=LinearSolve[JF[oldsol],-F[oldsol]];
sol = sol+y;
iter++
];
Print["Foram realizadas ",iter," iterações"];
If[iter≥nmax,Print["AVISO: Numero máximo de iterações foi atingido"]];
sol
];

Exemplo :

F={x-Cos[0.5*y],y-Sin[0.3*x]};
X={x,y}; X0={0,0};
tol=10^(-12); nmax=1000;
Newton[F,X,X0,tol,nmax]