1 function [er,X]=sqrtm_iteration_ordre3(A,X0,epsilon)
\r
4 % sqrtm_iteration_ordre3 : calcul d'une racine carrée de matrice par la méthode de Newton.
\r
7 % *********************************************************
\r
9 % [er,X]=sqrtm_iteration_ordre3(A,X0,epsilon)
\r
10 % calcule les différents itérés de
\r
11 % la méthode d'ordre 3 pour la recherche d'une racine de matrice.
\r
12 % A chaque itération, elle affiche et stocke le résultat X_k ainsi que l'erreur
\r
13 % er(k)=|||X_k^2-A|||.
\r
15 % variables d'entrées :
\r
16 % * A :matrice dont on veut une racine.
\r
17 % * X0 : matrice initiale
\r
18 % * epsilon : paramètre de précision
\r
19 % variables de sortie :
\r
20 % * er: suite des erreurs, définies par er(k)=norm(X_k^2-A).
\r
21 % * X : suite des itérés (matriciels) calculés.
\r
23 % ATTENTION : nombre maximum d'itération défini par nmax
\r
25 % ************ Fonctions auxiliaires utilisées ************
\r
29 % *********************************************************
\r
32 % nombre maximum d'itération défini par nmax
\r
35 % Contrôles d'entrée
\r
38 error('attention, A n''est pas carrée : arrêt du programme');
\r
41 if (norm(sqrtmA*X0-X0*sqrtmA,inf)~=0)
\r
42 disp('attention, la matrice initiale et la racine de A ne commutent pas !!');
\r
46 % Corps d'algorithme
\r
52 test=(norm(x^2-A,inf)~=0);
\r
55 y=(3/8)*x+(3/4)*A*z-(1/8)*A2*(z^3);
\r
56 disp(['itération numéro ',int2str(k)]);
\r
61 test=~((norm(y2-A,inf)==0)|(k>=nmax)|(norm(x-y,inf)<=epsilon));
\r
64 disp(['erreur : ',num2str(erloc)]);
\r
65 disp('appuyez sur une touche pour continuer');
\r
71 disp('attention, n>nmax');
\r