Sie sind auf Seite 1von 2

function x = GaussSeidel(A,b,varargin) % % % % % % % Implementacion del metodo Gauss-Seidel para la solucion de sistemas de ecuaciones, tomando como aproximacion inicial x0.

x = GaussSeidel(A,b,x0=zeros,eps=0.001,nrm=Inf) Regresa x, la solucion del sistema Ax=b. El criterio de terminacion es que norm(x-xAnt,nrm)/norm(x,nrm)<eps.

% 21 agosto 2007 % Manuel Valenzuela MAXCICLOS = 1000; MAXPIVOTE = 1; n = size(A,1); x = zeros(n,1); eps = 0.001; nrm = Inf; if length(varargin)>=1 x = varargin{1}; end if length(varargin)>=2 eps = varargin{2}; end if length(varargin)>=3 nrm = varargin{3}; end A = [A b]; if MAXPIVOTE==0 for i=1:n-1 % Encontrar renglon del maximo pivote k = find(abs(A(:,i))==max(abs(A(i:n,i))),1,'last'); if k~=i % Intercambiar renglones rPivote = A(k,:); A(k,:) = A(i,:); A(i,:) = rPivote; end end end b = A(:,n+1); A = A(:,1:n); % Se obtienen el vector c y la matriz T c = b./diag(A); T = zeros(n); for i=1:n T(i,:) = A(i,:)/A(i,i); end T = -T+eye(n); xAnt = x; j = 0; while 1 j = j+1; if j>MAXCICLOS

warning('numero maximo de ciclos excedido') break end for i=1:n x(i) = T(i,:)*x + c(i); end if (norm(x-xAnt,nrm)/norm(x,nrm)<eps) break end xAnt = x; end

Das könnte Ihnen auch gefallen