CONTINUACION DE LOS PROGRAMAS DE NUMERICO  (2DA. PARTE)


PROG19.M
function prog19(a,c,maxit,Es)
% Definición de varialbles :
%     a = matriz de coeficientes del sistema
%     c = vector columna de segundo miembro
%     x = vector columna de incognitas
%     m = numero de ecuaciones
% maxit = número máximo de iteraciones
%    Es = Error estimado ( tolerancia )
%    Ea = Error aproximado porcentual
% Este es un programa que sirve para calcular las raices de un sistema de ecuaciones Ax = b ,
% por método iterativo Jacobi sin pivoteo
% Se recomienda usar con:
%                   a=[1 7 -4;4 -4 9;12 -1 3]
%                   c=[-51 62 8]'
%                   maxit=5
%                   land=1
%                   Es= 5 %
%%%%%%%%%%%%%%%%%%
clc
b=[a,c];
[m n]=size(b);
x=zeros(n,1);
for i=1:m
    dummy=a(i,i);
    for j=1:m
       a(i,j)=a(i,j)/dummy;
    end
    c(i)=c(i)/dummy;
end
sentimel=0;
iter=0;
z=zeros(n,1);
while (iter<maxit) & (sentimel==0)
      sentimel=1;
      iter=iter+1;
      fprintf('iteración Nº %d\n',iter)
      for i=1:m
   sentimel=1;
 old=x(i);
 sum=c(i);
 for j=1:m
     if (iter == 1) & (i == j)
        sum=sum-a(i,j)*x(j);
       else
   if i ~= j
  sum=sum-a(i,j)*z(j);
        end
       end
 end
 x(i)=sum;
 if (sentimel==1) & (x(i)~=0)
    Ea=abs((x(i)-old)/x(i))*100;
    if Ea > Es
       sentimel=0;
    end
 end
   fprintf('X[%d] = %2.9f  %2.9f\n',i,x(i),Ea)
      end
      z=x;
      disp(' ')
end


PROG20.M
function prog20(A,b,maxit,Es)
% Este es un programa que sirve para calcular las raices de un sistema de
% ecuaciones Ax = b , por método iterativo Jacobi con pivoteo
% Se recomienda usar los valores anteriores.
%%%%%%%%%%%%%%%%%%%%%%%
clc
[m n]=size(A);
x=zeros(n,1);
for k=1:n
    pivot
    dummy=A(k,k);
    for j=1:n
       A(k,j)=A(k,j)/dummy;
    end
    b(k)=b(k)/dummy;
end
sentimel=0;
iter=0;
z=zeros(n,1);
while (iter<maxit) & (sentimel==0)
      sentimel=1;
      iter=iter+1;
      fprintf('iteración Nº %d\n',iter)
      for i=1:m
   sentimel=1;
 old=x(i);
 sum=b(i);
 for j=1:m
     if (iter == 1) & (i == j)
        sum=sum-A(i,j)*x(j);
       else
   if i ~= j
  sum=sum-A(i,j)*z(j);
        end
       end
 end
 x(i)=sum;
 if (sentimel==1) & (x(i)~=0)
    Ea=abs((x(i)-old)/x(i))*100;
    if Ea > Es
       sentimel=0;
    end
 end
   fprintf('X[%d] = %2.9f  %2.9f\n',i,x(i),Ea)
      end
      z=x;
end


PROG21.M
function prog21(a,c,maxit,land,Es)
% Definición de varialbles :
%     a = matriz de coeficientes del sistema
%     c = vector columna de segundo miembro
%     x = vector columna de incognitas
%     m = numero de ecuaciones
% maxit = número máximo de iteraciones
%    Es = Error estimado ( tolerancia )
%    Ea = Error aproximado porcentual
% Este es un programa que sirve para calcular las raices de un sistema de
% ecuaciones Ax = b , por método iterativo Gauss-Seidel sin pivoteo
% Se recomienda usar con:
%                   a=[1 7 -4;4 -4 9;12 -1 3]
%                   c=[-51 62 8]'
%                   maxit=5
%                   land=1
%                   Es= 5 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
b=[a,c];
[m n]=size(b);
for i=1:m
    x(i)=0;
end
for i=1:m
    dummy=a(i,i);
    for j=1:m
       a(i,j)=a(i,j)/dummy;
    end
    c(i)=c(i)/dummy;
end
sentimel=0;
iter=0;
while (iter<maxit) & (sentimel==0)
      sentimel=1;
      iter=iter+1;
      fprintf('iteración Nº %d\n',iter)
      for i=1:m
   sentimel=1;
 old=x(i);
 sum=c(i);
 for j=1:m
     if i~=j
         sum=sum-a(i,j)*x(j);
     end
 end
 x(i)=land*sum+(1-land)*old;
 if (sentimel==1) & (x(i)~=0)
    Ea=abs((x(i)-old)/x(i))*100;
    if Ea > Es
       sentimel=0;
    end
 end
   fprintf('X[%d] = %2.9f  %2.9f\n',i,x(i),Ea)
      end
      disp(' ')
end


PROG22.M
function x=prog22(A,b,maxit,land,Es)
% Este es un programa que sirve para calcular las raices de un sistema de
% ecuaciones Ax = b , por método iterativo Gauss-Seidel con pivoteo
% Se recomienda usar los valores anteriores.
%%%%%%%%%%%%%%%%%%%%%%
clc
[m n]=size(A);
x=zeros(n,1);
A
for k=1:n
    pivot
    dummy=A(k,k)
pause
    for j=1:n
       A(k,j)=A(k,j)/dummy
pause
    end
    b(k)=b(k)/dummy
pause
end
sentimel=0;
iter=0;
while (iter<maxit) & (sentimel==0)
      sentimel=1;
      iter=iter+1;
      fprintf('iteración Nº %d\n',iter)
      for i=1:n
   sentimel=1;
 old=x(i);
 sum=b(i);
 for j=1:n
     if i~=j
         sum=sum-A(i,j)*x(j);
     end
 end
 x(i)=land*sum+(1-land)*old;
 if (sentimel==1) & (x(i)~=0)
    Ea=(abs((x(i)-old)/x(i))*100);
    if Ea > Es
       sentimel=0;
    end
 end
   fprintf('X[%d] = %2.9f  %2.9f\n',i,x(i),Ea)
      end
      disp(' ')
end


PROG23.M
function prog23(A)
% Definición de variables :
%     A = matriz de coeficientes del sistema
% Este es un programa que sirve para calcular la inversa de una matriz
% cuadrada sin pivoteo
% Se recomienda usar con la matriz:
%                   A=[1 7 -4;4 -4 9;12 -1 3]
%%%%%%%%%%%%%%%%%%%%
clc
A
a=[A,eye(size(A))];
[m n]=size(a);
for k=1:m
    dummy=a(k,k);
    for j=1:n
 a(k,j)=a(k,j)/dummy;
    end
    for i=1:m
 if i ~= k
    dummy=a(i,k);
    for j=1:n
        a(i,j)=a(i,j)-dummy*a(k,j);
    end
 end
    end
end
disp('                    La matriz inversa es :')
disp('                    ______________________')
disp('  ')
A1=a(1:m,m+1:n)
disp('  Comprobación de A * A1 :')
disp('  ------------------------')
A*A1


PROG24.M
function prog24(A)
% Definición de variables :
%     A = matriz de coeficientes del sistema
%     pivot1 = subrutina que calcula el pivoteo parcial
% Este es un programa que sirve para calcular la inversa de una matriz
% cuadrada con pivoteo
% Se recomienda usar con la matriz anterior.
%%%%%%%%%%%%%%%%%%%
clc
A
a=[A,eye(size(A))];
[m n]=size(a);
for k=1:m
    pivot1
    dummy=a(k,k);
    for j=1:n
 a(k,j)=a(k,j)/dummy;
    end
    for i=1:m
 if i ~= k
    dummy=a(i,k);
    for j=1:n
        a(i,j)=a(i,j)-dummy*a(k,j);
    end
 end
    end
end
disp('              La matriz inversa con pivoteo es :')
disp('              _________________________________')
disp('  ')
A1=a(1:m,m+1:n)


PROG25.M
function prog25(a)
% Definición de variables :
%     a = matriz de coeficientes del sistema
% Este es un programa que sirve para calcular la descomposición A=LU, según el
% Algoritmo de CROUT sin pivoteo
% Se recomienda usar con la matriz:
%                   a=[1 7 -4;4 -4 9;12 -1 3]
%%%%%%%%%%%
clc
disp('         Descomposición A=LU [Algoritmo de CROUT]')
disp('         ________________________________________')
disp(' ')
a
[m n]=size(a);
for j=2:n
    a(1,j)=a(1,j)/a(1,1);
end
for j=2:n-1
    for i=j:m
        sum=0;
        for k=1:j-1
   sum=sum+a(i,k)*a(k,j);
        end
        a(i,j)=a(i,j)-sum;
    end
    for k=j+1:n
 sum=0;
 for i=1:j-1
     sum=sum+a(j,i)*a(i,k);
 end
 a(j,k)=(a(j,k)-sum)/a(j,j);
    end
end
sum=0;
for k=1:n-1
    sum=sum+a(n,k)*a(k,n);
end
a(n,n)=a(n,n)-sum;
l=tril(a)
u=triu(a);
for i=1:n
    u(i,i)=1;
end
u
disp(' Comprobación de L*U = A')
disp(' -----------------------')
l*u


PROG26.M
function prog26(a)
%    pivot1 = subrutina que calcula el pivoteo parcial
% Este es un programa que sirve para calcular la descomposición A=LU
% según el Algoritmo de CROUT con pivoteo
%%%%%%%%%%%%%%%%%%%%%%
clc
a
disp('       Descomposición A=LU [Algoritmo de CROUT] con pivoteo')
disp('       ____________________________________________________')
disp(' ')
[m n]=size(a);
for k=1:m
    pivot1
end
disp(' Matriz A pivoteada')
disp(' ------------------')
a
for j=2:n
    a(1,j)=a(1,j)/a(1,1);
end
for j=2:n-1
    for i=j:m
        sum=0;
        for k=1:j-1
   sum=sum+a(i,k)*a(k,j);
        end
        a(i,j)=a(i,j)-sum;
    end
    for k=j+1:n
 sum=0;
 for i=1:j-1
     sum=sum+a(j,i)*a(i,k);
 end
 a(j,k)=(a(j,k)-sum)/a(j,j);
    end
end
sum=0;
for k=1:n-1
    sum=sum+a(n,k)*a(k,n);
end
a(n,n)=a(n,n)-sum;
l=tril(a)
u=triu(a);
for i=1:n
    u(i,i)=1;
end
u
disp(' Comprobación de L*U = A')
disp(' -----------------------')
l*u


                        Ir al principio                                                                        Volver a la pagina principal