Está en la página 1de 3

function y=GAUSS(A,B)%y=salida, A=, B= entradas

[n n]=size(A);% generar una matriz de n por n del tamaño de A


A=[A';B']' % FORMACION DE DE LA MATRIZ AUMENTADA CON A Y B Y ASEGURANDONOS
QUE SEA COLUMNA
x=zeros(n,1);% GENERAR LA MATRIZ COLUMNA PARA ALMACENAR SOLUCION
for p=1:n %pivote que varia de q hasta n
for k=[1:p-1,p+1:n];%todas las filas a excepcion de la fila pivote
m=-A(k,p)/A(p,p)% factor de multiplicacion al pivote tal que al sumarlo a nuestra fila k haga
ceros la columna q necesito
A(k,:)=A(k,:)+m*A(p,:)% actualizacion de la fila k
end
end
x=A(:,n+1)./diag(A)%sol sera la ultima columna de la matriz A entre la diagonal de A
% FORMA DE EJECUCION
%A=[2 3 -2; 4 -1 3;-3 0 -7]
%B=[10;-1;4]
%GAUSS(A,B)

x=GAUSS([2 3 -2; 4 -1 3;-3 0 -7],[10;-1;4])

function [x] =GJORDAN(a,b)

n=length(b);

% Creamos matriz aumentada

for i=1:n

a(i,n+1)=b(i);

end

[nrow,ncol]=size(a);

% Buscamos pivot mayor

for k=1:nrow

pivot=a(k,k);

il=k;

for l=k+1:nrow

if abs(a(l,k))<abs(pivot)
elseif abs(a(l,k)) >= abs(pivot)

pivot=a(l,k);

il=l;

end

end

% pivot cero significa matriz singular

if pivot ==0

disp('Matriz Singular')

else

% intercambio de filas para obtener el pivot mayor

for ll=1:ncol

temp=a(k,ll);

a(k,ll)=a(il,ll);

a(il,ll)=temp;

end

end

% Normalizar la fila pivot

for j=1:ncol

c(k,j)=a(k,j)/pivot;

end

% Ahora la eliminacion Gauss_Jordan

for i=1:nrow

if i==k

else

for j=1:ncol

c(i,j)=a(i,j)-a(i,k)*c(k,j)

end

end

end
% Ahora ponemos el resultado c() en a()

a=c;

for j=1:nrow

x(j)=a(j,ncol);

end

end

function[x,iter,incr]=Gauss_Seidel(A,b,x0,tol,maxiter)
n=length(b); % generar vector del tamaño de B
M=tril(A); % matriz triangular inferior
U=triu(A,1); % matriz triangular superior
iter=0; % inicio del contador
incr=tol+1; % inicio del error
x=zeros(n,1);% generacion de un vector de zeros de n filas y una columna
while iter<=maxiter && incr>tol % condiciones para seguir iterando
d=b-U*x0; %vector de terminos independientes
x(1)=d(1)/M(1,1); % primera ecuacion
for k =2:n
x(k,1)=(d(k)-M(k,1:k-1)*x(1:k-1,1))/M(k,k);% esttoy resolviendo como producto escalar
end

incr=norm(x-x0,inf)/norm(x,inf);% actualizacion del error

iter= iter+1;% actualizacion de iteraciones


x0=x;% los puntos actuales son los anteriores para la proxima iteracion
end
if iter>maxiter
disp('el metodo no converge para este número de iteraciones')

end

% A=[ 10 -1 2 0 ;-1 11 -1 3 ;2 -1 10 -1 ;0 3 -1 8] matriz de A


% b=[6 25 -11 15]' matriz de terminos independientes

También podría gustarte