Professional Documents
Culture Documents
NACIONAL
ESCUELA SUPERIOR DE CMPUTO
LGEBRA LINEAL
PRACTICA 1: SISTEMAS DE ECUACIONES
LINEALES
INTEGRANTES:
MORA GUARDADO DANIEL
SORIA ZIGA BRIAN ISAAC
SANTOYO LPEZ OSCAR SAID
GRUPO: 1CM2
PROFESOR: IVN GIOVANNY MOSSO GARCA
la
+ =
+ y
suma
el
producto
modular
definidas
como:
=
. En esta introduccin nos concentraremos en
1 = 1( ).
El multiplicador modular inverso de un entero n mdulo p es un entero m tal que
n-1 m (mod p)
Esto significa que es el inverso multiplicativo en el anillo de los enteros mdulo p.
Es equivalente a
mn 1 (mod p)
El multiplicador inverso de n mdulo p existe si y slo si n y p son coprimos.
Si existe el multiplicador modular inverso de n mdulo p, se puede definir la
operacin de divisin entre n mdulo p mediante la multiplicacin por el inverso.
Para realizar el calculo del inverso multiplicativo se utiliza un algoritmo llamado:
ALGORITMO DE EUCLIDES O ALGORITMO EUCLIDIANO.
A continuacin explicare en que consiste este algoritmo.
El multiplicador modular inverso de n mdulo p se puede obtener mediante
el Algoritmo de Euclides. En particular, invocando el algoritmo extendido de Euclides
con n y p como argumentos se obtiene una tripla (x,y,mcd(n,p)) tal que
de donde
Por ejemplo, supongamos que queremos calcular el inverso de 117 mdulo 244.
Por tanto con nuestra nomenclatura p=117 y n=244 Lo primero que hacemos es
aplicar el algoritmo de Euclides para verificar que mcd(n,p)=1. Posteriormente
aprovechamos los pasos intermedios para hallar el mcd(n,p) en trminos de n y p y
as obtener el inverso de n que notaremos por n-1.
Paso 6: Del paso 4 despejo el resto (el nmero que queda a la derecha de la
suma), quedando 1=7-3*2
EL DISEO
Para empezar el diseo del algoritmo empezamos programando el algoritmo de
Gauss-Jordan con base decimal en donde explicaremos algunas partes del cdigo.
El cdigo se encargaba de revisar si el pivote era diferente de cero ya que si s lo
era debamos cambiar las filas.
if (A[i][i]==0)
{
for(s=i+1;s<=n+1;s++)
{
if (A[s][i]!=0)
{
aux=A[i][s-1];
A[i][s-1]=A[i+1][s-1];
A[i+1][s-1]=aux;
aux=B[i];
B[i]=B[i+1];
B[i+1]=aux;
}
}
}
Y en caso que no fuera 0 entonces hacamos que el pivote fuera 1 para poder usar
el algoritmo y el cdigo quedo as.
cte=A[i][i];
for(j=0;j<n;j++)
{
A[i][j]=A[i][j]/cte;
}
B[i]=B[i]/cte;
Ya que tenamos el pivote de alguna fila, se las restbamos a las dems, para que
en la columna del pivote, el pivote fuera el nico con valor a 1 y los dems a 0.
for(j=i+1;j<n;j++)
{
cte=A[j][i];
for(k=0;k<n;k++)
{
A[j][k]=A[j][k]-cte*A[i][k];
}
B[j]=B[j]-cte*B[i];
}
}
Pero despus de hacer eso y encontrar los pivotes nos quedaba una matriz
triangular superior y debamos hacer que quedara la identidad as que ahora
restamos de abajo hacia arriba para poder llegar a la identidad.
for(i=n;i>=1;i--)
{
for(j=i-1;j>=0;j--)
{
cte=A[j][i];
A[j][i]=A[j][i]-cte*A[i][i];
B[j]=B[j]-cte*B[i];
}
}
Y entonces el cdigo de gauss-Jordan quedo de la siguiente manera.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
int n,a,b;
float A[10][10],B[10],cte,aux;
//Se piden las incgnitas y trminos indp.
printf("\n\t\tMETODO DE GAUSS-JORDAN\n");
printf("\nIngrese el numero de ecuaciones del sistema: ");
scanf("%i",&n);
printf("Ingrese los coeficientes\n");
for(a=0;a<n;a++)
{
for(b=0;b<n;b++)
{
printf("Coef. (%i,%i) ",a+1,b+1);
scanf("%f",&A[a][b]);
}
printf("Termino independiente Ec. %i: ",a+1);
scanf("%f",&B[a]);
}
//Metodo Gauss-Jordan
int i,s,j,k;
for(i=0; i<n; i++);
{
//Se Comprueba que el pivote se dif. de 0
if (A[i][i]==0)
{
for(s=i+1;s<=n+1;s++)
{
if (A[s][i]!=0)
{//Intercambio de renglon
aux=A[i][s-1];
A[i][s-1]=A[i+1][s-1];
A[i+1][s-1]=aux;
aux=B[i];
B[i]=B[i+1];
B[i+1]=aux;
}
}
}
//Se normaliza Renglon pivote
cte=A[i][i];
for(j=0;j<n;j++)
{
A[i][j]=A[i][j]/cte;
}
B[i]=B[i]/cte;
for(i=n;i>=1;i--)
{
for(j=i-1;j>=0;j--)
{
cte=A[j][i];
A[j][i]=A[j][i]-cte*A[i][i];
B[j]=B[j]-cte*B[i];
}
}
//Impresin de resultados
printf("\n\n SOLUCION DEL SISTEMA\n ");
for(k=0;k<n;k++)
{
printf("\n x[%d] = %1.4f",k+1,B[k]);
}
printf("\n");
system("pause");
}
IMPLEMENTACIN
Usando el diseo de Gauss Jordan, necesitbamos implementarlo en campos
finitos y tuvimos que hacer algunas modificaciones.
Ahora el neutro multiplicativo tuvimos que apoyarnos con el algoritmo extendido de
Euclides el cual quedo de la siguiente manera:
scanf("%ld %ld",&a,&b) != EOF
inv(a,b,&d,&x,&y);
printf("x= %ld y= %ld d= %ld \n",x,y,d);
if(x<0)
x=b+x;
printf("El inverso multiplicativo de %ld en modulo %ld es: %ld",a,b,x);
return 0;
}
long x1,y1;
if(b==0)
{
*d=a;
*x=1;
*y=0;
}
else
{
inv(b,a%b,d,x,y);
x1=*x;
y1=*y;
*x=y1;
*y=x1-(a/b)*y1;
}
}
El cual nos arrojaba el neutro aditivo y ahora tenamos que implementarlo en el
cdigo que ya tenamos de manera que para obtener el pivote quedo de la siguiente
manera:
inv_mul(A[i][i],p,&d,&x,&y);
if(x<0)
x=b+x;
cte=x;
for(j=0;j<n;j++)
{
A[i][j]=(A[i][j]*cte)%p;
// printf("%i",A[i][j]);
}
B[i]=(B[i]*cte)%p;
En el llamamos la funcin para obtener el neutro multiplicativo y as multiplicarlo por
toda la fila.
Despus tuvimos que modificar la resta de filas para obtener la identidad, pero en
este caso fue ms sencillo y quedo de la siguiente manera:
for(j=i+1;j<n;j++)
{
cte=A[j][i];
for(k=0;k<n;k++)
{
if (A[j][k] - (cte*A[i][k])%p < 0)
aux= p + (A[j][k] - (cte*A[i][k])%p);
else
aux = A[j][k] - (cte*A[i][k])%p;
aux= B[j]-(cte*B[i])%p;
B[j]=(aux)%p;
}
}
for(i=n;i>=1;i--)
{
for(j=i-1;j>=0;j--)
{
cte=A[j][i];
if (A[j][i]-(cte*A[i][i])%p < 0)
aux= p + (A[j][i]-(cte*A[i][i])%p);
else
aux=A[j][i]-(cte*A[i][i])%p ;
A[j][i]=(aux)%p;
if (B[j]-(cte*B[i])%p < 0)
aux= p + (B[j]-(cte*B[i])%p);
else
aux = B[j]-(cte*B[i])%p ;
B[j]=(aux)%p;
}
}
Como vemos, solo fue cuestin de obtener los mdulos pero como en C no se
obtiene el mdulo de numero negativos, pusimos unas condiciones y as poder
obtener el modulo.
Entonces el cdigo quedo de la siguiente manera.
CDIGO
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
for(a=0;a<n;a++)
{
for(b=0;b<n;b++)
{
printf("Coef. (%i,%i) ",a+1,b+1);
scanf("%i",&A[a][b]);
}
printf("Termino independiente Ec. %i: ",a+1);
scanf("%i",&B[a]);
}
//Metodo Gauss-Jordan
int i,s,j,k;
for(i=0; i<n; i++);
{
A[i][s-1]=A[i+1][s-1];
A[i+1][s-1]=aux;
aux=B[i];
B[i]=B[i+1];
B[i+1]=aux;
}
}
}
//se hace 1 el pivote
inv_mul(A[i][i],p,&d,&x,&y);
if(x<0)
x=b+x;
cte=x;
for(j=0;j<n;j++)
{
A[i][j]=(A[i][j]*cte)%p;
// printf("%i",A[i][j]);
}
B[i]=(B[i]*cte)%p;
//Continua el algoritmo de eliminacion gaussiana
for(j=i+1;j<n;j++)
{
cte=A[j][i];
for(k=0;k<n;k++)
{
if (A[j][k] - (cte*A[i][k])%p < 0)
aux= p + (A[j][k] - (cte*A[i][k])%p);
else
aux = A[j][k] - (cte*A[i][k])%p;
A[j][k]=( aux )%p;
}
if (B[j]-(cte*B[i])%p < 0)
aux = p + B[j]-(cte*B[i])%p;
else
aux= B[j]-(cte*B[i])%p;
B[j]=(aux)%p;
}
}
//se realiza la eliminacion de la matris superior
for(i=n;i>=1;i--)
{
for(j=i-1;j>=0;j--)
{
cte=A[j][i];
if (A[j][i]-(cte*A[i][i])%p < 0)
aux= p + (A[j][i]-(cte*A[i][i])%p);
else
aux=A[j][i]-(cte*A[i][i])%p ;
A[j][i]=(aux)%p;
if (B[j]-(cte*B[i])%p < 0)
aux= p + (B[j]-(cte*B[i])%p);
else
aux = B[j]-(cte*B[i])%p ;
B[j]=(aux)%p;
}
}
//Impresion de resultados
printf("\n\n SOLUCION DEL SISTEMA\n ");
for(k=0;k<n;k++)
{
printf("\n x[%d] = %i",k+1,B[k]);
printf("\n");
system("pause");
}
long x1,y1;
if(p==0)
{
*d=a;
*x=1;
*y=0;
}
else
{
inv_mul(p,a%p,d,x,y);
x1=*x;
y1=*y;
*x=y1;
*y=x1-(a/p)*y1;
}
}
PRUEBAS
CONCLUSIONES
La codificacin del algoritmo de Euclides e lenguaje de descripcin de hardware
requiere de mayor cuidado que la correspondiente al algoritmo binario.
La arquitectura del algoritmo es similar, ambos utilizan divisores, multiplicadores,
registros, restadores, comparadores. La divisin es la operacin aritmtica que
mayor hardware requiere, siendo ste un factor limitante en el desempeo de las
arquitecturas.
Gracias a gente como Euclides y los grandes matemticos, las enseanzas que han
dejado a travs de los aos han hecho que hoy en da se hayan hecho muchos
avances en la ciencia como son las computadoras, pero no solo las computadoras
sino tambin, el hombre no hubiera podido llegar al espacio sin ellas o tener la
tecnologa que tenemos hoy en da.
Creemos que todo los que nos rodea tiene una razn de ser y todo se puede
responder gracias a las matemticas.