Advertisement
SilLAwNeD

Scilab, gausseidel function

Nov 5th, 2018
1,146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 1.20 KB | None | 0 0
  1. function [x, k] = gausseidel(A, b, tol, N, x0)
  2.     precision = 1e-10;
  3.     n = size(A,1);
  4.     x = zeros(n, 1);
  5.     xk = zeros(n, 1);
  6.     tolerance = 0;
  7.     x = x0;
  8.     test = 0;
  9.    
  10.     for i = 1:n
  11.         if abs(A(i,i)) < precision then
  12.             error("Coefficient diagonaux trop petit.")
  13.         end
  14.     end
  15.    
  16.     for k = 1:N
  17.         for i = 1:n
  18.             sommeTermesPrec = A(i,1:i-1) * x(1:i-1)
  19.             sommeTermesSuiv = A(i,i+1:n) * x(i+1:n)
  20.            
  21.             // Pour avoir une matrice nulle à la place d'une matrice vide
  22.             // Sur Scilab 6.0+
  23.             if (sommeTermesPrec == []) then
  24.                 sommeTermesPrec = [0]
  25.             end
  26.             if (sommeTermesSuiv == []) then
  27.                 sommeTermesSuiv = [0]
  28.             end
  29.            
  30.             xk = x;
  31.             x(i) = (b(i) - sommeTermesPrec - sommeTermesSuiv) / A(i,i);
  32.         end
  33.        
  34.         tolerance = norm(x - xk) / norm(x)
  35.         if tolerance < tol then
  36.             // On est rentré dans le test
  37.             test = 1;
  38.             break;
  39.         end
  40.     end
  41.    
  42.     if (test == 0) then
  43.         error("Pas de convergence en Nmax itérations.")
  44.     end
  45. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement