Méthode de Gauss Seidel - scilab
Bonsoir,
Je me permets de vous consulter car je bloque sur une question de mon TP d'analyse numérique.
Dans ce TP, nous devons implémenter la méthode de Jacobi et de Gauss Seidel.
J'ai donc réussi pour la méthode de Jacobi :
Pouvez-vous me donner une piste de réflexion et/ou corriger mon précédent script ?
Merci par avance !
Chaka
Je me permets de vous consulter car je bloque sur une question de mon TP d'analyse numérique.
Dans ce TP, nous devons implémenter la méthode de Jacobi et de Gauss Seidel.
J'ai donc réussi pour la méthode de Jacobi :
function[x,iter] = jacobi(A,b,x0,nmax,tol) n = size(A,1); iter = 0; r = b-A*x0; normb = norm(b); err = norm(r)/normb; x=x0; while err > tol & iter < nmax iter = iter + 1; xnew = zeros(n,1); for i = 1:n xnew(i)=(b(i)-A(i,[1:i-1 i+1:n])*x([1:i-1 i+1:n]))/A(i,i) end x = xnew; r=b-A*x; err = norm(r)/normb; end endfunctionÀ présent, j'ai besoin de modifier ce script pour obtenir la méthode de Jacobi, voici une de mes tentatives :
function[x,iter] = gaussSeidel2(A,b,x0,nmax,tol) n = size(A,1) x0=zeros(n,1) iter = 0; r = b-A*x0; normb = norm(b); err = norm(r)/normb; x=x0; while err > 10^(-8) & iter < 1000 iter = iter + 1; xnew = zeros(n,1); for i = 1:n xnew(i)=(1/A(i,i))*(b(i)-A(i,1:i-1)*xnew(1:i-1)-A(i,i+1:n)*x(i+1:n)) end x = x; r=b-A*x; err = norm(r)/normb; end endfunctionCependant Scilab me renvoie une erreur...
Pouvez-vous me donner une piste de réflexion et/ou corriger mon précédent script ?
Merci par avance !
Chaka
Réponses
-
Je commente juste ton deuxième code pour commencer:
while err > 10^(-8) & iter < 1000
Il faut que tu remplaces $10^{-8}$ et $1000$ par les variables de ta fonction. Deuxième chose ce n'est pas x=x mais x=x_new si je compare à ton premier script. De même pour $r=b-Ax$. De plus, tu peux mettre ces $2$ codes ensemble et choisir une variable de sélection de la méthode.
En regardant la page Wikipédia concernée, j'ai fais un code Octave (ne maitrisant pas scilab) qui te montre l'implémentation de ces méthodes. Tu peux essayer de le convertir en Scilab.function [sol,iter]=meth_jacobi_gauss(A,b,x0,iter_max,seuil_err,choix_meth) %% Paramètres % Nous partons du système Ax=b. La matrice A est décomposée: A=M-N. % Pour la méthode de Jacobi, M=D (matrice diagonale), N=E+F (E matrice % triangulaire inférieure à diagonale nulle et F matrice triangulaire supérieure à diagonale nulle). % Pour la méthode de Gauss-Seidel, M=D-E, N=F. % iter_max: nombre d'itérations maximales (nombre entier positif) % seuil_err: seuil d'erreur maximale (nombre réel positif) % choix_meth=0 (Jacobi), 1 (Gauss-Seidel) %% D=diag(diag(A)); E=tril(A)-D; F=triu(A)-D; %% Vérification taille if (size(A,2)~=size(b,1)) disp('Revoir taille de b'); end if (size(x0,1)~=size(b,1)) disp('Revoir la taille de x0 et b'); end %% Vérification que A est une matrice à diagonale strictement dominante pour avoir convergence S=abs(E)+abs(F); S2=sum(S,2); D2=diag(D); for i=1:size(S2,1) if (D2(i)<S2(i)) disp('A pas à diagonale strictement dominante'); end end %% Choix méthode if (choix_meth==0) M=D; N=-(E+F); elseif (choix_meth==1) M=D+E; N=-F; else disp('Méthode non disponible'); end %% Algorithme B=inv(M)*N; invM=inv(M); sol_pre=x0; for iter=1:iter_max sol_ac=B*sol_pre+invM*b; err=abs(sol_ac-sol_pre); %% Erreur r=D*err; %vecteur résidu r2=r/norm(b); if (r2<repmat(seuil_err,size(r2,1),1)) break; %arrêt de l'algorithme car condition sur l'erreur remplie else sol_pre=sol_ac; %continuer l'itération end end sol=sol_ac; end
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 7 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 52 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres