You are on page 1of 12

DESCOMPOSICION LU USANDO GAUSS

El siguiente algoritmo calcula la descomposición LU de la matriz A.

clc;
disp('\n descomposicion LU usando Gauss\n');
clear;
disp( '\n Ingrese su matriz A \n\n');
A=input('A= ');
B=A;
[n,m]=size(A);
mm=min(n,m);
nn=max (n,m);
for i=1:n
for j=1:n
if i==j
IN(i,j)=1;
else
IN(i,j)=0;
end;
end;
end;
L=IN;
for i=1:mm
E=IN;
EE=IN;
for j=i+1:n
E(j,i)=-A(j,i) /A(i,i);
EE(j,i)=-E(j,i);
end;
A=E*A;
L=L*EE;
end;
U=A; A=B;
A
L
U
METODO DE GAUSS CON PIVOTEO PARCIAL

clc; tem=P(i,j);
disp(' metodo de gauss con pivot parcial P(i,j)=P(k,j);
\n\n'); P(k,j)=tem;
clear; end;
disp(' ingrese su matriz '); end;
A=input('A='); A=P*A;
B=A; for j=i+1:n
[n,m]=size(A); E(j,i)=-A(j,i)/A(i,i);
mm=min(n,m); EE(j,i)= -E(j,i);
nn=max(n,m); end;
for i=1:n PP=P*PP;
for j=1:n A=E*A;
if i==j L=L*P*EE;
ID(i,j)=1; M=E*P*M;
else end;
ID(i,j)=0; U=A;
end; A=B
end; M
end; P=PP
L=ID; M=ID; PP=ID; LL=L
for i=1:mm L=P*L
E=ID; EE=ID; P=ID; U
tem=A(i,i); k=i;
for j=1:n
if abs(tem)< abs(A(j,i))
tem=A(j,i);
k=j;
end;
end;
if(k~=i)
for j=1:n
METODO DE GAUSS CON PIVOTEO COMPLETO

clc; k=i:
disp('metodo de gauss pivoteo h=t:
completo\n'); end;
clear; end;
disp('\n ingrese su matriz \n\n'); end;
A=input('A='); if(k~=i)
B=A; for j=1:n
[n,m]=size(A); tem=P(i,j);
mm=min(n,m); P(i,j)=P(k,j);
nn=max(n,m); P(k,j)=tem;
for i=1:n U~P <+bUN ib P~-,I;
for j=1:n f(h~=i)
if i==j for j=i:m
IN(i,j)=1; tem=Q(j,i);
else Q(j,i)=Q(j,h);
IN(i,j)=0; Q(j,h)=tem;
end; end;
end; end;
end; A=P*A*Q;
for i=1:m M=P*M;
for j=1:m QT=QT*Q
if i==j for j=i+1:n
IM(i,j)=1 E(j,i)=-A(j,i)/A(i,i);
else EE(j,i)= -E(j,i);
IM(i,j)=0 end;
end; PP=P*PP;
end; A=E*A;
end; L=L*P*EE;
L=IN; N=IN; L2=IN; QT=IM; PP=IN; M=E*M;
for i=1:mm end;
E=IN; EE=IN; U=A;
P=IN; Q=IM; A=B
tem=A(i,i); k=i;h=i; M
for j=i:n L=P*L
for t=i:m P=PP
if abs (tem)<abs(A(j,t)) Q=QT
tem = A(j,t); U
SOLUCION DE UN SISTEMA TRIANGULAR SUPERIOR

Calcula la solucion y del sistema lineal Ty=b , donde :


T: matriz triangular superior

function [y] = triinf(T,b);

[m,n] = size(T);
if m~=n
error('la matriz T no es cuadrada')
end;
y = zeros(n,1);
for i = n:-1:1
sum = 0;
if (i ~= n)
sum = T(i,i+1:n)*y(i+1:n);
end;
if (T(i,i) ==0)
error('La matriz T es singular')
end;
y(i) = (b(i) - sum ) / T(i,i);
end;
SOLUCION DE UN SISTEMA TRIANGULAR INFERIOR

Calcula la solucion y del sistema lineal Ly=b , donde :


L: matriz triangular inferior.

function y = forelm(L,b);

[m,n] = size(L);
if m~=n
disp('la matriz L no es cuadrada')
return;
end;
y = zeros(n,1);
y(1) = b(1) / L(1,1);
for i = 2:n
sum =L(i,1:i-1)*y(1:i-1);
if ( L(i,i) == 0)
disp('La matriz L es singular')
return;
end;
y(i) = (b(i) - sum ) / L(i,i);
end;
end;
METODO DE CHOLESKY
El siguiente algoritmo calcula la descomposición de la matriz A en la forma A= H.HT
Donde:
H es triangular inferior y sus entradaz diagonales son positivas.
HT: transpuesta de H.

clc;
disp('\n METODO DE CHOLESKY \n');
clear;
disp(' INGRESE SU MATRIZ');
A=input(' A=');
B=A;
disp('determinate');
disp(det(A));
[n,m]=size(A);
mm=min(n,m);
nn=max(n,m);
for i=1:n
for j=1:n
if i==j
ID(i,j)=1;
else
ID(i,j)=0;
end;
end;
end;
H=ID;
H(1,1)=sqrt(B(1,1));
A(1,1)=H(1,1); cc=0;
for k=2:mm
for i=1:k-1
c=0;d=0;
if i~=1
for j=1:i-1
c=c+H(i,j)*H(k,j);cc=c;
end;
end;
if H(i,i)~=0
H(k,i)=(1/H(i,i))*(B(k,i)-cc);
else
disp('\n div por cero \n');
break

end;
for j=1:k-1
d=d+H(k,j)*H(k,j);dd=d;
end;
H(k,k)=sqrt(B(k,k)-dd);
end;
end;HH=H;HHT=H*H';
B
A
H
HHT
FACTORIZACION QR GIVENS

%clc;
disp(' Factorizacion QR-Givens ');
%clear;
disp(' Ingrese la Matriz ');
A=input('A=');
B=A;
[n,m]=size(A);
mm=min(n,m);
nn=max(n,m);
for i=1:n
for j=1:n
if i==j
IN(i,j)=1;
else
IN(i,j)=0;
end;
end;
end;
HH=IN;
for i=1:mm
H=IN;
for j=1:n
if j>=i
u(j)=A(j,i);
else
u(j)=0;
end;
end;
if u(i)>=0
s=1;
else
s=-1;
end;
u(i)=u(i)+s*norm(u,2);
H=eye(n)-2*u'*u/(u*u');
HH=HH*H;
A=H*A;
end;
Q=HH
REDUCCION GIVENS HESSENBERG

El programa produce una matriz superior Hessenberg H y una matriz ortogonal P con el
metodo de Givens , por lo que H es similar ortogonalmente a A. PAP' = H.
Donde :
P es el producto de n-i+1 rotaciones de Givens.

function [H,P] = givhess(A)

[m,n] = size(A);
P = eye(m,m);
for p= 1: n-2
for q = p+2:n
x=[A(p+1,p) A(q,p)]';
[c,s] = givzero(x);
k = p+1;
l = q;
p1 = c * P(k,:) + s*P(l,:);
p2 = -s * P(k,:) + c*P(l,:);
P(k,:) = p1;
P(l,:) = p2;
a1 = c * A(k,:) + s*A(l,:);
a2 =-s * A(k,:) + c *A(l,:);
A(k,:) = a1;
A(l,:) = a2;
a3 = c * A(:,k) + s*A(:,l);
a4 = -s * A(:,k) + c *A(:,l);
A(:,k) = a3;
A(:,l) = a4;
end
end
H = A;
end;
METODO DE JACOBI
Calcula la solución x del sistema lineal Ax=b usando el método iterativo de jacobi. Donde:
p : numero de iteraciones
e : error o tolerancia
x0 : aproximación inicial

function [x,iter] = jacobi(A,x0,b,e,p);


[m,n] = size(A);
if m~=n
disp('la matriz A no es cuadrada') ;
return;
end;
xnuevo = zeros(m,1);
x = x0;
for k = 1:p
iter = k;
for i = 1:n
s = 0;
for j = 1:n
if (j ~= i)
s = A(i,j) * x(j) + s;
end;
end;
xnuevo(i) = (b(i) - s) / A(i,i);
end;
if (norm(xnuevo - x) / norm(x) ) < e
iter = k;
x = xnuevo;
return;
end
x = xnuevo;
end;
end;
METODO DE GAUSS-SEIDEL:
El programa calcula la solución x del sistema lineal Ax = b, utilizando el método de Gauss-
Seidel.
Donde:
p : numero de iteraciones
e : error o tolerancia
x0 : aproximación inicial
function [x,iter] = gaused(A,x0,b,e,p);

[m,n] = size(A);
if m~=n
disp(‘la matriz A no es cuadrada')
return;
end;
xnuevo = zeros(m,1);
x = x0;
for k = 1 : p
iter = k;
for i = 1:n
s1 = 0;
s2 = 0;
if (i ~= 1)
s1 = A(i,1:i-1) * xnuevo(1:i-1);
end;
if (i ~= n)
s2 = A(i,i+1:n) * x(i+1:n);
end
xnuevo(i) = (b(i) - s1 - s2) / A(i,i);
end;
if (norm(xnuevo - x) / norm(x) ) < e
x = xnuevo ;
return;
end
x = xnuevo;
end;

You might also like