Vous êtes sur la page 1sur 49

1

GRUPO: SUBGRUPO:




ALUMNO:

No. BOLETA:




PROFESOR:



.




CALIFICACIN: ____________________________
1. INTRODUCCIN.


INSTITUTO POLITCNICO NACIONAL.

ESCUELA SUPERIOR DE INGENIERA MECNICA Y
ELCTRICA UNIDAD ZACATENCO.

DEPARTAMENTO DE INGENIERA ELCTRICA.

2




1.1 PLANIFICACION Y DISEO DE PROGRAMAS.

El flujo bsico del procesamiento de una computadora, tal como se muestra en la figura siguiente
es Entrada, proceso, salida. El arte de programar implica escribir instrucciones para decirle a la
computadora como procesar informacin especfica,

Algunas clases de datos se introducen en el programa, se procesan y luego salen. Por ejemplo, en
un programa de procesamiento de nminas, las horas, los trabajadores y el salario por hora de
varios empleados podran ser los datos de entrada, el programa calculara el pago bruto,
deducciones y pago neto, los datos de salida de los cheques de pago, para que el procesamiento se
complete con xito. El programa debe ejecutar los clculos acertados en el orden correcto.


Proceso Entrada Salida


Figura 1.1.Flujo de Procesamiento



1.2 SOLUCION DE PROBLEMAS.

Los programas de computadora se crean para resolver problemas. La codificacin de un
programa no se iniciar hasta que se elaboren todos los planes, primero se crea una solucin y
enseguida se codifica en un lenguaje de computadora, la clave es planificar.


1.3 CARACTERISTICAS DE UN BUEN PROGRAMA.

- El programa debe funcionar. La caracterstica ms simple e importante de un programa es
que funcione.
- El programa no debe tener dificultades. El programa debe estar libre de errores por lo que
hay que anticipar a las situaciones particulares en las cuales se va a emplear el programa.
- El programa debe de estar bien documentado. La documentacin es necesaria para ayudar
a comprender o utilizar un programa. La documentacin puede realizarse de dos formas:
la documentacin externa, que incluye diagramas de flujo, descripciones de los
algoritmos, etc.; y la documentacin interna o comentarios en el propio programa.
- el programa debe ser eficiente, que un programa sea fcil de leer y de comprender, son
prerrequisitos importantes para su mantenimiento y modificacin.

3

1.4 ALGORITMO.

Un algoritmo es secuencia lgica de pasos necesarios para ejecutar una tarea especfica, como la
solucin de un problema. En algoritmos ejecutados por una computadora se puede combinar en
un clculo matemtico miles de pasos elementales, tales como adiciones y sustracciones.


1.5 DIAGRAMA DE FLUJO.

Como ayuda en el desarrollo de la solucin de un problema, podemos utilizar los diagramas de
flujo. Un diagrama de flujo es una representacin grfica de flujo lgico de datos que se utilizar
en la formulacin, consta de una serie de bloques y flechas, cada bloque en el diagrama
representa una operacin particular o un paso en el algoritmo. Las flechas indican la secuencia en
que se implementan las operaciones.


1.6 COMPONENTES DEL DIAGRAMA DE FLUJO.

4

1.7 REGLAS PARA LA REALIZACION DEL DIAGRAMA DE FLUJO

Para dibujar un diagrama de flujo, debemos tener en cuenta las siguientes reglas:

1. Cada smbolo significa un tipo de operacin.
- Entrada
- Salida
- Proceso
- Decisin
2. Dentro de cada smbolo se escribe un comentario para indicar la operacin o proceso
especfico que se ha de ejecutar.
3. Los diagramas de flujo se leen de arriba hacia abajo y de izquierda a derecha.
4. Una secuencia de operaciones se ejecuta hasta que un smbolo terminal designa el final de
la ejecucin o un conector de bifurcacin transfiere el control a otro punto del diagrama.


EJEMPLO

Hacer el diagrama de flujo para obtener el promedio de una lista de nmeros.


PROMEDIOS
N=10
7.5
11.6
15.8
10.7
5.6
8.4
9.5
21.2
35.4
16.7

SUM0= 0.0
N
CONT
= 1
X= 7.5









5


DIAGRAMA DE FLUJO DEL PROMEDIO DE UNA LISTA DE NUMEROS

INICIO
N= 10
suma = 0.0
N
CONT
<N
F V
Prom
N
CONT
= 1
X
suma =suma +X
N
CONT
=

N
CONT
+1
Pr
suma
om
N
=
FIN



6

PRCTICA No. 1 SUMA, RESTA Y MULTIPLICACIN DE MATRICES.


ALGORITMOS.

Suma.

La suma de matrices del mismo orden se encuentra sumando los elementos correspondientes. Por
lo tanto, si los elementos de A son a
ij
y los de B son b
ij
y si C= A+B entonces:

C
ij
= a
ij
+ b
ij

Sea la matriz.

(
(
(
(

=
mn
a
m
a
m
a
n
a a a
n
a a a
Amxn
2 1
2 22 21
1 12 11


y la matriz B.

(
(
(
(

=
mn
b
m
b
m
b
n
b b b
n
b b b
Bmxn
2 1
2 22 21
1 12 11


La suma de la matriz A
mxn
+
mxn
= C
mxn


Es decir:

(
(
(
(

+ = + = + =
+ = + = + =
+ = + = + =
=
mn
b
mn
a
mn
c
m
b
m
a
m
c
m
b
m
a
m
c
n
b
n
a
n
c b a c b a c
n
b
n
a
n
c b a c b a c
Cmxn
2 2 2 1 1 1
2 2 2 22 22 22 21 21 21
1 1 1 12 12 12 11 11 11



EJEMPLO

Sea la matriz
2 2
9 6
7 5
X
A
(
=
(

y la matriz
2 2
5 2
4 3
X
B
(
=
(

, tenemos como resultado:

2 2
9 5 14 6 2 8
7 4 11 5 3 8
X
C
+ = + = (
=
(
+ = + =


7

Resta.

La resta de matrices del mismo orden se encuentra restando los elementos correspondientes. Por
lo tanto, si los elementos de A son a
ij
y los de B son b
ij
y si C= A-B entonces:

C
ij
= a
ij
- b
ij

Sea la matriz.

(
(
(
(

=
mn
a
m
a
m
a
n
a a a
n
a a a
Amxn
2 1
2 22 21
1 12 11


y la matriz B.

(
(
(
(

=
mn
b
m
b
m
b
n
b b b
n
b b b
Bmxn
2 1
2 22 21
1 12 11


La suma de la matriz Amxn +Bmxn = Cmxn

Es decir:

(
(
(
(

= = =
= = =
= = =
=
mn
b
mn
a
mn
c
m
b
m
a
m
c
m
b
m
a
m
c
n
b
n
a
n
c b a c b a c
n
b
n
a
n
c b a c b a c
Cmxn
2 2 2 1 1 1
2 2 2 22 22 22 21 21 21
1 1 1 12 12 12 11 11 11



EJEMPLO

Sea la matriz
2 2
4 8
8 10
X
A
(
=
(

y la matriz
2 2
4 6
6 4
X
B
(
=
(

, tenemos como resultado:
2 2
4 4 0 8 6 2
8 6 2 10 5 6
X
C
= = (
=
(
= =



Multiplicacin.

La multiplicacin de matrices A Y B se define slo si el nmero de columnas de A es igual al
nmero de renglones de B. As si A es del orden mxn y B es del orden nxp, entonces el producto
AB es una matriz C de orden mxp, por tanto:
8

(Amxn)(Bnxp) = Cmxp

Los elementos de C se determinan a partir de los elementos de A y B, multiplicando el i simo
rengln de A y la j sima columna de B y sumando estos productos para obtener c
ij
. En forma de
ecuacin.




La multiplicacin de las matrices no es conmutativa: AB = BA

Sea la matriz.

(
(
(
(

=
mn
a
m
a
m
a
n
a a a
n
a a a
Amxn
2 1
2 22 21
1 12 11

y la matriz.

(
(
(
(

=
mn
b
m
b
m
b
n
b b b
n
b b b
Bmxn
2 1
2 22 21
1 12 11

La multiplicacin de la matriz Cmxn = [Amxn][Bmxn]
Columnas de B.
Filas de A.

Es decir:

( )( )
( )( ) ( )( )
(
(

+ + + = + + + = + + + =
+ + + = + + + = + + + =
+ + + = + + + = + + + =
=
) )( ( ... ) 2 )( 2 ( )
1
)(
1
( ) 2 )( ( ... ) 22 )( 2 ( )
12
)(
1
(
2
) 1 )( ( ... ) 21 )( 2 ( )
11
)(
1
(
1
) )( 2 ( ... ) 2 )( 22 ( )
1
)(
21
(
2
) 2 )(
2
( ... )
22
)( 22 ( )
12
)(
21
(
22 1 2
...
21 22
)
11
)(
21
(
21
) )(
1
( ... )
2
)(
12
( )
1
)(
1
(
1
)
2
)(
1
( ... )
22
)(
12
( )
12
)(
11
(
12
)
1
)(
1
( ...
21 12
)
11
)(
11
(
11
bmn amn n b am
n
b
m
a
mn
c bm amn b am b
m
a
m
c bm amn b am b
m
a
m
c
bmn n a n b a
n
b a
n
c bm
n
a b a b a c
m
b
n
a b a b a c
mn
b
n
a
n
b a
n
b
n
a
n
c
m
b
n
a b a b a c
m
b
n
a b a b a c
Cmxn


EJEMPLO
Sea la matriz
2 3
4 2 6
3 1 2
X
A
(
=
(

y la matriz
3 2
4 6
3 4
2 2
X
B
(
(
=
(
(

, tenemos como resultado:
2 2
16 6 12 24 8 12 34 44
12 3 4 18 4 4 19 26
X
C
+ + + + ( (
= =
( (
+ + + +


DIAGRAMAS DE FLUJO.
( ) ( ) ( )
=
|
.
|

\
|
=
|
.
|

\
|
|
.
|

\
|
+ +
|
.
|

\
|
+
|
.
|

\
|
=
p
k
kj
b
ik
a
pj
b
ip
a
j
b
i
a
j
b
i
a
ij
c
1
....
2 2 1 1
9













































INICIO
# FILAS A =mA
# COLUMNAS A = nA
i = 1 mA
j = 1 nA
A =(i,j)
# FILAS B =mB
# COLUMNAS B = nB
mA = mB
nA = nB
B =(i,j)
i = 1 mB
j = 1 nB
i = 1 mC
j = 1 nC
Cij = Aij + Bij
i = 1 mC
j = 1 nC
C = (i,j)
FIN
mA = mB
nA = nB
FIN
SI NO
INICIO
# FILAS A =mA
# COLUMNAS A = nA
i = 1 mA
j = 1 nA
A =(i,j)
# FILAS B =mB
# COLUMNAS B = nB
mA = mB
nA = nB
B =(i,j)
i = 1 mB
j = 1 nB
i = 1 mC
j = 1 nC
Cij = Aij - Bij
i = 1 mC
j = 1 nC
C = (i,j)
FIN
mA = mB
nA = nB
FIN
SI NO
10














































INICIO
# FILAS A =mA
# COLUMNAS A = nA
i = 1 mA
j = 1 nA
A =(i,j)
# FILAS B =mB
# COLUMNAS B = nB
nA = mB
B =(i,j)
i = 1 mB
j = 1 nB
i = 1 mC
j = 1 nC
Cij = 0
i = 1 mC
j = 1 nC
C = (i,j)
FIN
nA = mB
FIN
SI NO
mC = mA
nC = nB
1
1
L = 1 nA
C(ij) = C(ij) + A(iL) B(Lj)
11

CODIFICACION.

//Instituto Politcnico Nacional.
//Escuela Superior de Ingeniera Mecnica y Elctrica Unidad Zacatenco.
//Ingeniera Elctrica.
//SUMA DE MATRICES.
//Laboratorio de Computacin Aplicada a Sistemas Elctricos.
//Ing. Juan Carlos Aguirre.
//Grupo: 9E1V
//Alumnos: Cabrera Marco, Garca Luis y Lpez ngel.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int main()
{
int s,i,j,o;

do
{

printf("\t\tPROGRAMA DE ALGEBRA MATRICIAL\n\n");
printf("\n1 SUMA\n2 RESTA\n3 MULTIPLICACION\n4 SALIR");
printf("\n\nQue operacion deseas realizar:");
scanf("%d",&o);

//SUMA();
if(o==1)
{
int f,c,a,cont;
int matrizA[10][10],matrizB[10][10],matrizC[10][10];

printf("\ntu operacion es SUMA");
printf("\n\tINGRESANDO LOS VALORES DE LAS FILAS Y COLUMNAS");
printf("\n\nEL RANGO DE VALORES DE LA FILA ES DE 2 A 9");
printf("\n\ncuantas filas deseas?:");
scanf("%d",&f);
printf("\nEL RANGO DE VALORES DE LA COLUMNA ES DE 2 A 9");
printf("\ncuantas columnas deseas?:");
scanf("%d",&c);

//MATRIZ A
12

printf("\t\nINGRESANDO VALORES DE LA MATRIZ A ");
printf("\nintroduce los valores de la columna:");
//scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);

for(i=1;i<=f;i++)
{
printf("\n\t");

for(j=1;j<=c;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizA[i][j]=a;
}
}

//MATRIZ B
printf("\t\nINGRESANDO VALORES DE LA MATRIZ B ");
printf("\nintroduce los valores de la columna:");
//scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);

for(i=1;i<=f;i++)
{
printf("\n\t");

for(j=1;j<=c;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizB[i][j]=a;
}
}

//OPERACION

for(i=1;i<=f;i++)
{

for(j=1;j<=c;j++)
13

{
matrizC[i][j]=matrizA[i][j] + matrizB[i][j];
printf("\nTU RESULTADO ES:");
printf("(%i,%i):",i,j);
printf("%i",matrizC[i][j]);
}
}
getch();
getch();
}

//RESTA();

if(o==2)
{
int f,c,a,r;
int matrizD[10][10],matrizE[10][10],matrizF[10][10];

printf("\ntu operacion es RESTA");
printf("\n1 D-E \n2 E-D");
printf("\ncomo deseas la resta:");
scanf("%d",&r);

if(r==1)
{
printf("\n\tTU FORMA ES D-E");
printf("\n\tINGRESANDO LOS VALORES DE LAS FILAS Y COLUMNAS");
printf("\n\nEL RANGO DE VALORES DE LA FILA ES DE 2 A 9");
printf("\n\ncuantas filas deseas?:");
scanf("%d",&f);
printf("\nEL RANGO DE VALORES DE LA COLUMNA ES DE 2 A 9");
printf("\ncuantas columnas deseas?:");
scanf("%d",&c);

//MATRIZ D

printf("\t\nINGRESANDO VALORES DE LA MATRIZ D ");
printf("\nintroduce los valores de la columna:");
//scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);

for(i=1;i<=f;i++)
{
printf("\n\t");
14


for(j=1;j<=c;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizD[i][j]=a;
}
}

//MATRIZ E

printf("\t\nINGRESANDO VALORES DE LA MATRIZ E ");
printf("\nintroduce los valores de la columna:");
//scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);

for(i=1;i<=f;i++)
{
printf("\n\t");

for(j=1;j<=c;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizE[i][j]=a;
}
}

//OPERACION

for(i=1;i<=f;i++)
{

for(j=1
;j<=c;j++)
{
matrizF[i][j]= matrizD[i][j] - matrizE[i][j];
printf("\nTU RESULTADO ES:");
printf("(%i,%i):",i,j);
printf("%i",matrizF[i][j]);
}
}
15

getch();
getch();
}

if(r==2)
{
printf("\n\tTU FORMA ES E-D");
printf("\n\tINGRESANDO LOS VALORES DE LAS FILAS Y COLUMNAS");
printf("\n\nEL RANGO DE VALORES DE LA FILA ES DE 2 A 9");
printf("\n\ncuantas filas deseas?:");
scanf("%d",&f);
printf("\nEL RANGO DE VALORES DE LA COLUMNA ES DE 2 A 9");
printf("\ncuantas columnas deseas?:");
scanf("%d",&c);

//MATRIZ D

printf("\t\nINGRESANDO VALORES DE LA MATRIZ D ");
printf("\nintroduce los valores de la columna:");
// scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);

for(i=1;i<=f;i++)
{
printf("\n\t");

for(j=1;j<=c;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizD[i][j]=a;
}
}

//MATRIZ E

printf("\t\nINGRESANDO VALORES DE LA MATRIZ E ");
printf("\nintroduce los valores de la columna:");
//77scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);

for(i=1;i<=f;i++)
16

{
printf("\n\t");

for(j=1;j<=c;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizE[i][j]=a;
}
}

//OPERACION

for(i=1;i<=f;i++)
{

for(j=1;j<=c;j++)
{
matrizF[i][j]= matrizE[i][j] - matrizD[i][j];
printf("\nTU RESULTADO ES:");
printf("posicion (%i,%i):",i,j);
printf("%i",matrizF[i][j]);
}
}
getch();
getch();
}
}

//MULTIPLICACION();

if(o==3)
{
int m,n,o,p,i,j,k,x,a;
int matrizX[10][10],matrizY[10][10],matrizZ[10][10];

printf("\ntu operacion es MULTIPLICACION");
printf("\n1 X*Y \n2 Y*X");
printf("\ncomo deseas la MULTIPLICACION:");
scanf("%d",&x);

if(x==1)
{
printf("\n\tTU FORMA ES X*Y");
17

printf("\n\tINGRESANDO LOS VALORES DE LAS FILAS Y COLUMNAS DE LA
MATRIZ X");
printf("\n\nEL RANGO DE VALORES DE LA FILA ES DE 2 A 9");
printf("\n\ncuantas filas deseas?:");
scanf("%d",&m);
printf("\nEL RANGO DE VALORES DE LA COLUMNA ES DE 2 A 9");
printf("\ncuantas columnas deseas?:");
scanf("%d",&n);
printf("\n\tINGRESANDO LOS VALORES DE LAS FILAS Y COLUMNAS DE LA
MATRIZ Y");
printf("\n\nEL RANGO DE VALORES DE LA FILA ES DE 2 A 9");
printf("\n\ncuantas filas deseas?:");
scanf("%d",&o);
printf("\nEL RANGO DE VALORES DE LA COLUMNA ES DE 2 A 9");
printf("\ncuantas columnas deseas?:");
scanf("%d",&p);

//MATRIZ X

printf("\t\nINGRESANDO VALORES DE LA MATRIZ X ");
printf("\nintroduce los valores de la columna:");
//scanf("\n%i",&a);
printf("\nintroduce los valores de la fila:");
//scanf("\n%i",&a);

for(i=1;i<=m;i++)
{
printf("\n\t");

for(j=1;j<=n;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizX[i][j]=a;
}
}

//MATRIZ Y

printf("\t\nINGRESANDO VALORES DE LA MATRIZ Y ");
printf("\nintroduce los valores de la columna:");
//scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);
18


for(i=1;i<=o;i++)
{
printf("\n\t");

for(j=1;j<=p;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizY[i][j]=a;
}
}

//OPERACION

for (i=1;i<=m;i++)
{
for (j=1;j<=p;j++)
{
matrizZ[i][j]=0; /*Limpia la variable para entrar de nuevo al for*/
for (k=1;k<=n;k++)
{
matrizZ[i][j]=((matrizX[i][k] * matrizY[k][j])+ matrizZ[i][j]);
}
}
}
printf("\n\nLa matriz resultante de la multiplicacion es: \n");

/*Ciclo que imprime la matriz resultante*/
for (i=1;i<=m;i++)
{
printf("\n");

for(j=1;j<=p;j++)
{
printf("\nTU RESULTADO ES");
printf("(%i,%i):",i,j);
printf(" %i ",matrizZ[i][j]);
}
}
getch();
}

if(x==2)
19

{
printf("\n\tTU FORMA ES X*Y");
printf("\n\tINGRESANDO LOS VALORES DE LAS FILAS Y COLUMNAS DE LA
MATRIZ X");
printf("\n\nEL RANGO DE VALORES DE LA FILA ES DE 2 A 9");
printf("\n\ncuantas filas deseas?:");
scanf("%d",&m);
printf("\nEL RANGO DE VALORES DE LA COLUMNA ES DE 2 A 9");
printf("\ncuantas columnas deseas?:");
scanf("%d",&n);

printf("\n\tINGRESANDO LOS VALORES DE LAS FILAS Y COLUMNAS DE LA
MATRIZ Y");
printf("\n\nEL RANGO DE VALORES DE LA FILA ES DE 2 A 9");
printf("\n\ncuantas filas deseas?:");
scanf("%d",&o);
printf("\nEL RANGO DE VALORES DE LA COLUMNA ES DE 2 A 9");
printf("\ncuantas columnas deseas?:");
scanf("%d",&p);

//MATRIZ X

printf("\t\nINGRESANDO VALORES DE LA MATRIZ X ");
printf("\nintroduce los valores de la columna:");
//scanf("\n%i",&a);
printf("\nintroduce los valores de la fila:");
//scanf("\n%i",&a);

for(i=1;i<=m;i++)
{
printf("\n\t");

for(j=1;j<=n;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizX[i][j]=a;
}
}

//MATRIZ Y

printf("\t\nINGRESANDO VALORES DE LA MATRIZ Y ");
printf("\nintroduce los valores de la columna:");
20

//scanf("\n%d",&a);
printf("\nintriduce los valores de la fila:");
//scanf("\n%d",&a);

for(i=1;i<=o;i++)
{
printf("\n\t");

for(j=1;j<=p;j++)
{
printf("\n\t");
printf("posicion (%i,%i):",i,j);
scanf("%i",&a);
matrizY[i][j]=a;
}
}
}

//0PERACION

for (i=1;i<=m;i++)
{
for (j=1;j<=p;j++)
{
matrizZ[i][j]=0; /*Limpia la variable para entrar de nuevo al for*/
for (k=1;k<=n;k++)
{
matrizZ[i][j]=(matrizY[i][k] * matrizX[k][j])+ matrizZ[i][j];
}
}
}

printf("\n\nLa matriz resultante de la multiplicacion es: \n");

/*Ciclo que imprime la matriz resultante*/
for (i=1;i<=m;i++)
{
printf("\n");

for(j=1;j<=p;j++)
{
printf("\nTU RESULTADO ES");
printf("(%i,%i):",i,j);
printf(" %i ",matrizZ[i][j]);
}
21

}
getch();
}

getchar();
}
while(o!=4);
}



PANTALLA DE LA CORRIDA DEL PROGRAMA

































22

PRCTICA No. 2 INVERSA DE MATRICES.

ALGORITMO

Sea la matriz
11 12 1
21 22 2
1 2
n
n
m m mn
a a a
Amxn a a a
a a a
(
(
(
=
(
(
(



Condicin: la matriz debe ser cuadrada.
Se amplia la matriz, se incluye la matriz diagonal.

11 12 1
21 22 2
1 2
1 0 0
0 1 0
0 0 1
n
n
m m mn
a a a
a a a
a a a
(
(
(
(
(
(



Con operaciones se convierte la matriz A en matriz diagonal y la matriz ser la nueva matriz que
queda en el lugar de la matriz diagonal.

1 0 0
11 12 1
0 1 0
21 22 2
0 0 1
1 2
c c c
n
c c c
n
c c c
m m mn
(
(
(
(
(


EJEMPLO

Dado el determinante A obtener su Inversa:
(

=
4 2
2 1
A
se obtienen sus menores con sus respectivos cofactores se le saca la transpuesta y se divide entre
2 y se obtiene lo siguiente:

(
(

=
(
(
(

=
(

2
1
2
3
1 2
2
1
2
3
2
2
2
4
2
1 3
2 4
1
A


23

DIAGRAMA DE FLUJO












































INICIO
n
i = 1 n
j = 1 n
A =(i,j)
FIN
i = 1 n
j = n+1 2x n
A(i,j) = 0.0
j = i + n
A(i,j) = 1
SI NO
i = 1 n
PVT = A(i,j)
j = 1 2x n
A(i,j) = A(i,j)
PVT
1
1
K = 1 n
k = i
NO
SI
M = A(k,i)
j = 1 2x n
A(k,j) = A(k,j) - MxA(i,j)
2
2 3
3
i = 1 n
j = 1 2x n
A(i,j)
24

CODIFICACION

//Instituto Politcnico Nacional.
//Escuela Superior de Ingeniera Mecnica y Elctrica Unidad Zacatenco.
//Ingeniera Elctrica.
//SUMA DE MATRICES.
//Laboratorio de Computacin Aplicada a Sistemas Elctricos.
//Ing. Juan Carlos Aguirre.
//Grupo: 9E1V
//Alumnos: Cabrera Marco, Garca Luis y Lpez ngel.


#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>

using namespace std;

void invermat(int n, double **a, double **ainv, double &determ);

int main() {

system ("clear");

ifstream label1 ("datos//datos.in"); // Abre el archivo de entrada de datos

// Definicin de variables y asignacin dinmica de memoria

int i, j, n;

label1 >> n;

double **a, **ainv, determ;

a = new double* [n], ainv = new double* [n];

for(j=0; j<n; j++){

a[j] = new double [n], ainv[j] = new double [n];

}

// Lectura de la matriz (label1 apunta a datos.in en el subdirectorio datos del home de
usuario)
25


for(i=0; i<n; i++){

for(j=0; j<n; j++){

label1 >> a[i][j];
}

}

cout << "Imprime la matriz de origen\n\n";

// Matriz de origen; a

for(i=0; i<n; i++){

for(j=0; j<n; j++){

cout << a[i][j] << " ";
}

cout << endl;

}

cout << endl;

invermat (n, a, ainv, determ);

if (determ != 0) {

cout << "Imprime la matriz inversa\n\n";

// Matriz inversa; ainv

cout.setf(ios::fixed);
cout.precision(6);

for(i=0; i<n; i++){

for(j=0; j<n; j++){

cout << setw(10) << ainv[i][j] << " ";
}

26

cout << endl;

}

}

else cout << "La matriz no tiene inversa\n\n";


delete a;

return 0;

}

void invermat(int n, double **a, double **ainv, double &determ) {

// Algoritmo para la eliminacin simple de Gauss

int i, j, k;

double factor;

double **L, *D, *X;

X = new double [n]; D = new double [n];

L = new double* [n];

for (j = 0; j < n; j++)

L[j] = new double [n];

for (k = 0; k < n - 1; k++) {

for (i = k+1; i < n; i++) {

factor = a[i][k]/a[k][k];

for (j = k+1; j < n + 1; j++) {

a[i][j] = a[i][j] - factor * a[k][j];

}

27



}

}

// Clculo del determinante

determ = 1.;

for (i = 0; i < n; i++) {

determ = determ * a[i][i];

}

if (determ != 0) {

// Rutina para determinar las matrices L (inferior) y U (superior) de la
// descomposicin LU


for (i = 0; i < n; i++) {

for (j = 0; j < n; j++) {

if (i > j) {

L[i][j] = a[i][j]/a[j][j];

a[i][j] = 0;

}


}

}


for (i = 0; i < n; i++) {

for (j = 0; j < n; j++) {

L[j][j] = 1;
28

}

}

// Implementacin de la rutina para el clculo de la inversa

for (k = 0; k < n; k++) {

// Esta rutina inicializa los L[i][n] para ser utilizados con la matriz L


for (i = 0; i < n; i++) {

if (i == k) L[i][n] = 1;

else L[i][n] = 0;

}

// Esta funcin implementa la sustitucin hacia adelante con la matriz L y los L[i][n]
// que produce la rutina anterior

double sum;

D[0] = L[0][n];

for (i = 1; i < n; i++) {

sum = 0;

for (j = 0; j < i; j++) {

sum = sum + L[i][j]*D[j];

}

D[i] = L[i][n] - sum;

}

// Esta rutina asigna los D[i] que produce forward para ser utilizados con la matriz U

for (i = 0; i < n; i++) {

a[i][n] = D[i];
29

}

// Rutina que aplica la sustitucin hacia atras

X[n-1] = a[n-1][n]/a[n-1][n-1];

// Determinacin de las races restantes

for (i = n - 2; i > -1; i--) {

sum = 0;

for (j = i+1; j < n; j++) {

sum = sum + a[i][j]*X[j];

}

X[i] = (a[i][n] - sum)/a[i][i];

}

// Esta rutina asigna los X[i] que produce Sustituir como los elementos de la matriz inversa

for (i = 0; i < n; i++) {

ainv[i][k] = X[i];

}

} // llave de cierre del for para k

} // cierre del if


delete L, D, X;

}







30

PRCTICA NO. 3 MTODO GAUSS

ALGORITMO

La eliminacin de Gauss reduce un sistema de ecuaciones lineales a otro sistema que es ms fcil
resolver y que tiene el mismo conjunto solucin. Se emplean tres pasos bsicos para efectuar la
reduccin.

1. Intercambiar dos ecuaciones cualesquiera del sistema
2. Multiplicar cualquier ecuacin del sistema por una constante no nula
3. Reemplazar cualquier ecuacin del sistema por el resultado de sumarle a ella un mltiplo
de cualquier otra ecuacin

Esto es, una vez teniendo la matriz aumentada del sistema de ecuaciones cuadrado, hacer ceros
bajo la diagonal, para despus realizar despejes con los valores obtenidos y obtener los de las
variables.

Resolver el sistema de ecuaciones por medio del mtodo de Gauss.

108
3
1
4
1
2
1
148 10 6 4
24
= + +
= + +
= + +
z y x
z y x
z y x


Multiplicando la segunda ecuacin por y la tercera ecuacin por 12 resulta,

x + y + z = 24
2x + 3y + 5z = 74

2
1
x +
4
1
y +
3
1
z = 108

Sumando la primera ecuacin multiplicada por 2 a la segunda se obtiene:

x + y + z = 24
y + 3z = 26
6x + 3y + 4z = 108

Ahora se suma a la ltima ecuacin la primera multiplicada por 6:

x + y + z = 24
y + 3z = 26
- 3y - 2z = -36

Se completa el proceso sumando a la tercera ecuacin la segunda multiplicada por 3:
31

x + y + z = 24
y + 3z = 26
7z = 42

Por lo tanto z = 6, por sustitucin de retroceso se obtiene x = 10 y y = 0


EJEMPLO

Resolver el siguiente sistema de ecuaciones por el mtodo de Gauss





Que es equivalente a la siguiente matriz:






1 Iteracin: Pivote a
00
= 3; ecuacin pivote = 1, -0.033, -0.066, 2.62



2 Iteracin: Pivote a
11
= 7.003; ecuacin pivote = 0, 1, -0.043, -2.793




3 Iteracin: Pivote a
22
= 10.006; ecuacin pivote = 0, 0, 1, 6.99



1 0.03 0.06 2.61 1 0.03 0.06 2.61
0.1 7 0.3 19.3 0.1 0.003 0.006 0.261 0 7.003 0.306 19.561
0.3 0.2 10 71.4 0.3 0.009 0.018 0.783 0 0.209 10.018 70.617
( ( (
( ( (
=
( ( (
( ( (

1 0.03 0.06 2.61 1 0.03 0.06 2.61
0 1 0.043 2.793 0 1 0.043 2.793
0 0.209 10.018 70.617 0 0.209 0.012 0.583 0 0 10.006 70.034
( ( (
( ( (
=
( ( (
( ( (

1 0.03 0.06 2.61
0 1 0.043 2.793
0 0 1 6.99
(
(

(
(

3 0.1 0.2 7.85
0.1 7 0.3 19.3
0.3 0.2 10 71.4
(
(

(
(

1 2 3
1 2 3
1 2 3
3 0.1 0.2 7.85
0.1 7 0.3 19.3
0.3 0.2 10 71.4
x x x
x x x
x x x
=
+ =
+ =
32

1 2 3
2 3
3
1 0.03 0.06 2.61
1 0.043 2.793
1 7
x x x
x x
x
=
=
=

2
1
1
2
3
2.79 0.043(7) 2.5
2.61 0.03( 2.5) 0.06(7) 3
3
2.5
7
x
x
x
x
x
= + =
= + + =
=
=
=

DIAGRAMA DE FLUJO



33

CODIFICACION

//Instituto Politcnico Nacional.
//Escuela Superior de Ingeniera Mecnica y Elctrica Unidad Zacatenco.
//Ingeniera Elctrica.
//SUMA DE MATRICES.
//Laboratorio de Computacin Aplicada a Sistemas Elctricos.
//Ing. Juan Carlos Aguirre.
//Grupo: 9E1V
//Alumnos: Cabrera Marco, Garca Luis y Lpez ngel.

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

int i,j,k,n;
double m[20][20],aux;

void main()
{

cout<<" <<<<Metodo de Gauss >>>> ";
cout<<"\n Matriz cuadrada de orden N= ";
cin>>n;
cout<<"\n Digite los elementos de la matriz en la posicion ";
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cout<<"\n M=["<<i<<","<<j<<"]= ";
cin>>m[i][j];
}
cout<<"\n Termino independiente de X"<<i<<" ";
cin>>m[i][n+1];

}

for(i=1;i<=n;i++)
{
if(m[i][i]!=0)
{
aux=1/m[i][i];
for(j=1;j<=n+1;j++)
{
34

m[i][j]=aux*m[i][j];
}

for(j=1;j<=n;j++)
{
if(j!=i)
{
aux=-m[j][i];
for(k=1;k<=n+1;k++)
{
m[j][k]=m[j][k]+aux*m[i][k];
}
}
}
}
}

cout<<"\n";
cout<<"la matriz identidad es";
cout<<"\n\n";
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cout<<m[i][j]<<"\t";
}
cout<<"\n\n";
}

cout<<"El valor de las incognitas es : ";
for(i=1;i<=n;i++)
{

cout<<"\nX"<<i<<" = "<<m[i][n+1]<<"\n";
}
getchar();
}








35

PANTALLA DE LA CORRIDA DEL PROGRAMA






36

PRCTICA No. 4 METODO DE GAUSS-JORDAN



ALGORITMO

Para encontrar la solucin de un sistema de ecuaciones por este mtodo, es necesario emplear el
mtodo Gauss, con la variante de que es necesario convertir en unos todos los elementos de la
diagonal de la matriz de coeficientes.

Resolver el siguiente sistema de ecuaciones lineales por el mtodo Gauss-Jordan.
3 2 1
4 7
2 7 6 5
2 3
x y z
y z
x y z
y z
+ + =
+ =
+ + =
+ =


Matriz aumentada del sistema:

1 3 2 1
0 1 4 7
2 7 6 5
0 1 2 3
(
(

(
(
(




Sumamos la primera ecuacin multiplicada por -2 a la tercera para eliminar la variable x de la
tercera ecuacin:

1 3 2 1
0 1 4 7
2 7 6 5
0 1 2 3
(
(

(
(
(




Puesto que las ecuaciones tercera y cuarta son iguales, se resta la tercera de la ltima:
1 3 2 1
0 1 4 7
0 1 2 3
0 0 0 0
(
(

(
(
(





Ahora restamos la segunda ecuacin de la tercera. Esto elimina la variable y de la tercera
ecuacin:
37

1 3 2 1
0 1 4 7
0 0 2 4
0 0 0 0
(
(

(
(
(



Ahora dividimos la ltima ecuacin entre -2:

1 3 2 1
0 1 4 7
0 0 1 2
0 0 0 0
(
(

(
(
(



Puesto que z=-2, mediante sustitucin en la segunda ecuacin, y=1. Sustituyendo x y y en la
primera ecuacin resulta x=0. El conjunto solucin es:
0, 1, 2 x y z = = =


EJEMPLO






1 Iteracin: Pivote a
00
= 3; ecuacin pivote = 1, -0.033, -0.066, 2.62


2 Iteracin: Pivote a
11
= 7.003; ecuacin pivote = 0, 1, -0.043, -2.793


3 Iteracin: Pivote a
22
= 10.006; ecuacin pivote = 0, 0, 1, 6.99


1 0.03 0.06 2.61 1 0.03 0.06 2.61
0.1 7 0.3 19.3 0.1 0.003 0.006 0.261 0 7.003 0.306 19.561
0.3 0.2 10 71.4 0.3 0.009 0.018 0.783 0 0.209 10.018 70.617
( ( (
( ( (
=
( ( (
( ( (

1 0.03 0.06 2.61 1 0.03 0.06 2.61
0 1 0.043 2.793 0 1 0.043 2.793
0 0.209 10.018 70.617 0 0.209 0.012 0.583 0 0 10.006 70.034
( ( (
( ( (
=
( ( (
( ( (

1 0.03 0.06 2.61
0 1 0.043 2.793
0 0 1 6.99
(
(

(
(

1 2 3
1 2 3
1 2 3
3 0.1 0.2 7.85 3 0.1 0.2 7.85
0.1 7 0.3 19.3 0.1 7 0.3 19.3
0.3 0.2 10 71.4 0.3 0.2 10 71.4
x x x
x x x
x x x
= (
(
+ =
(
( + =

38

1 2 3
2 3
3
1 0.03 0.06 2.61
1 0.043 2.793
1 7
x x x
x x
x
=
=
=


2
1
2.79 0.043(7) 2.5
2.61 0.03( 2.5) 0.06(7) 3
x
x
= + =
= + + =


1
2
3
3
2.5
7
x
x
x
=
=
=


1 0.03 0.06 2.61
0 1 0.043 2.793
0 0 1 6.99
(
(

(
(




Ecuacin pivotal:
| | 0 0 1 6.9

1 0.03 0.06 2.61 0 0 0.06 0.42 1 0.03 0 3.03
0 1 0.043 2.793 0 0 0.043 0.30 0 1 0 2.493
0 0 1 6.99 0 0 1 7
( ( (
( ( (
=
( ( (
( ( (




Ecuacin pivotal:
| | 0 1 0 2.493

1 0.03 0 3.03 0 0.03 0 0.074 1 0 0 3
0 1 0 2.493 0 1 0 2.5
0 0 1 7 0 0 1 7
( ( (
( ( (
=
( ( (
( ( (

;
1
2
3
3
2.5
7
x
x
x
( (
( (
=
( (
( (













39

DIAGRAMA DE FLUJO

n
LeeMat
Imprime Mat
i = 0: i<n: i++
A[i][i]==0
j = 0: j<n: j++
j!=i
Temp.=A[j][i]
k = 0: k<n: k++
A[j][k]=tem*A[i][k]/A[i][i]
i = 0: i<n: i++
xk = A[i][i]
j = 0: j<=n: j++
A[i][j]=A[i][j]/xk
Imprime Mat
i = 0: i<n: i++
A[i][n]
Fin
inicio








40

CODIFICACION

//Instituto Politcnico Nacional.
//Escuela Superior de Ingeniera Mecnica y Elctrica Unidad Zacatenco.
//Ingeniera Elctrica.
//SUMA DE MATRICES.
//Laboratorio de Computacin Aplicada a Sistemas Elctricos.
//Ing. Juan Carlos Aguirre.
//Grupo: 9E1V
//Alumnos: Cabrera Marco, Garca Luis y Lpez ngel.

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<iostream.h>

int main(void){
int SI=1;
do{
system("cls" );
int x,m,i,j,k;
float matriz1[25][26],matriz2[25][26],apoyo;

printf("nttMETODO DE GAUSS-JORDAN" );
printf("nt Ingrese el nmero de incgnitas y de Ecuaciones: n" );
scanf("%d",&x);
printf("n Ingrese coeficientesn" );

/* Datos para iniciar mtodo */

for(i=1;i<=x;i++){
printf("n Fila %d n",i);
for(j=1;j<=x+1;j++){
printf(" Ingese a(%d,%d) = ",i,j);
scanf("%f",&matriz1[j]);
}
}

/* Fin Del Ciclo De Solicitud De Datos */

/* Proceso Principal */

m=x+1;
do{
41

if(matriz1[1][1]==0){
k=m-1;
for(i=2;i<=k;i++){
if(matriz1[1]!=0){
for(j=1;j<=m;j++){
apoyo=matriz1[j];
matriz1[j]=matriz1[1][j];
matriz1[1][j]=apoyo;
}
}
}
}
else{
for(j=2;j<=m;j++){
for(i=2;i<=x;i++){
matriz2[i-1][j-1]=matriz1[j]-matriz1[1][j]*matriz1[1]/matriz1[1][1];
}
}
for(j=2;j<=m;j++){
matriz2[x][j-1]=matriz1[1][j]/matriz1[1][1];
}
m=m-1;
for(j=1;j<=m;j++){
for(i=1;i<=x;i++){
matriz1[j]=matriz2[j];
}
}
}
}//CIERRE DEL do
while(m>1);
printf("nn SOLUCION DEL SISTEMAn " );
for(i=1;i<=x;i++){
printf("n X (%d) = %1.4f",i,matriz1[1]);
}
printf("nn Fin del programann" );
printf("nnn" );
printf("DESEAS REALIZAR LA OPERACION OTRA VEZ? SI[1] NO[2]n" );
scanf("%d",&SI);

}while(SI<=1);
system("PAUSE" );
return 0;
} //cierre del main

//****************Fin del Programa****************
42

PANTALLA DE LA CORRIDA DEL PROGRAMA






















43

PRCTICA No. 5 METODO DE GAUSS-SEIDEL

Este el mtodo iterativo ms usado. Supngase que se ha dado un conjunto de n ecuaciones:

| || | | | A X C =

Si los elementos de la diagonal son diferentes de cero, la primera se puede resolver para
1
x , la
segunda para
2
x , etc. Lo que lleva a:

1 12 2 13 3 1
1
11
2 21 1 23 3 2
2
22
3 31 1 32 2 3
3
33
1 1 2 2 1 1
....
........6 )
....
........6 )
....
........6 )
....
........6 )
n n
n n
n n
n n n nn n
n
nn
C a x a x a x
x a
a
C a x a x a x
x b
a
C a x a x a x
x c
a
C a x a x a x
x d
a


=

=

=

=


Se empieza el proceso de solucin usando un valor inicial para las x. La solucin trivial puede
servir de valor inicial, es decir, todas las x valen cero. Estos ceros se pueden sustituir en la
ecuacin 6a), que se puede usar para calcular un nuevo valor de
1 1 11
/ x C a = . Luego se sustituye
el nuevo valor de
1
x con
3
......
n
x x , aun en cero, en la ecuacin 6b), con la que se calcula un nuevo
valor de
2
x . Este proceso se repite en cada una de las ecuaciones hasta llegar a la ecuacin 6d), la
cual calcula un nuevo valor de
n
x . Enseguida se regresa a la primera ecuacin y se repite el
proceso hasta que la solucin converja bastante cerca de los valores reales. La convergencia se
puede verificar usando el criterio:

. .
100
.
a s
Aprox actual Aprox previa
x
Aprox actual

e = <e



FORMACION DE LA MATRIZ DE ADMITANCIA NODAL (Y
BUS
)

En el anlisis de circuitos elctricos, as como en la solucin de algunos problemas relacionados
con los sistemas elctricos de potencia, es bastante comn la formulacin de ecuaciones de red
basados en un anlisis nodal y que tomen como punto de partida la aplicacin de la Ley de
Kirchoff de Corrientes, en base a una formulacin sistemtica aplicada a cada nodo de un circuito
y que representa una excelente base para la solucin por computadora de muchos problemas que
se presentan en el anlisis de los sistemas elctricos de potencia.
44

Considere el siguiente circuito elemental:

1
2
3 4
01
Z
12
Z
24
Z
34
Z
13
Z



Los voltajes medidos en los nodos 1, 2, 3 y 4 se encuentran referidos al nodo 0 y los datos para
los elementos son impedancias. Si se aplica la L.K.I. a cada nodo, se tendra la siguiente frmula
general:

NODO 1. Al nodo 1 inciden los elementos 0-1, 1-2 y 1-3, es decir, que la corriente en este nodo
aplicando la Ley de Kirchoff de Corrientes es:


1 0 1 3 1 2
1
01 12 13
V V V V V V
I
Z Z Z

= + +

Que se puede escribir de otra forma sabiendo que la inversa de la impedancia es la admitancia.


( ) ( ) ( )
( )
1 1 0 01 1 2 12 1 3 13
1 1 01 0 01 1 12 2 12 1 13 3 13
1 0 01 1 01 12 13 2 12 3 13
I V V Y V V Y V V Y
I VY V Y VY V Y VY V Y
I V Y V Y Y Y V Y V Y
= + +
= + + +
= + + +


Como el voltaje en el nodo de referencia es cero
0
0 V = .
( )
1 1 01 12 13 2 12 3 13
I V Y Y Y VY VY = + +

Procediendo en forma semejante se aplica la Ley de Kirchoff de Corrientes a los otros nodos,
encontrndose las siguientes ecuaciones:
45

NODO 2.
( ) ( )
( )
2 2 1 12 2 4 24
2 2 12 1 12 2 24 4 24
2 2 12 24 1 12 4 24
I V V Y V V Y
I V Y VY V Y V Y
I V Y Y VY V Y
= +
= +
= +

NODO 3.
( ) ( )
( )
3 3 1 13 3 4 34
3 3 13 1 13 3 34 4 34
3 3 13 34 1 13 4 34
I V V Y V V Y
I V Y VY V Y V Y
I V Y Y VY V Y
= +
= +
= +

NODO 4.
( ) ( )
( )
4 4 2 42 4 3 43
4 4 42 2 42 4 43 3 43
4 4 42 43 2 42 3 43
I V V Y V V Y
I V Y V Y V Y V Y
I V Y Y V Y V Y
= +
= +
= +


Escribiendo las ecuaciones juntas:

( )
( )
( )
( )
1 1 01 12 13 2 12 3 13
2 1 12 2 12 24
3 1 13 3 13 34 4 34
4 2 42 3 34 4 42 43
I V Y Y Y V Y V Y
I VY V Y Y
I VY V Y Y V Y
I V Y V Y V Y Y
= + +
= + +
= + +
= + +



En forma general a un conjunto de ecuaciones como este se le acostumbra escribir como sigue:

1 11 1 12 2 13 3 14 4
2 21 1 2 22 23 3 24 4
3 31 1 32 2 33 3 34 4
4 41 1 42 2 43 3 44 4
I Y V Y V Y V Y V
I Y V V Y Y V Y V
I Y V Y V Y V Y V
I Y V Y V Y V Y V
= + + +
= + + +
= + + +
= + + +



11 12 13 14 1 1
21 22 23 23 2 2
31 32 33 34 3 3
41 42 43 44 4 4
Y Y Y Y I V
Y Y Y Y I V
Y Y Y Y I V
Y Y Y Y I V
( ( (
( ( (
( ( (
=
( ( (
( ( (
( ( (



Que se conoce como la ecuacin nodal o de bus y que se puede escribir como:

BUS BUS BUS
I = Y V
46

CODIFICACION

//Instituto Politcnico Nacional.
//Escuela Superior de Ingeniera Mecnica y Elctrica Unidad Zacatenco.
//Ingeniera Elctrica.
//SUMA DE MATRICES.
//Laboratorio de Computacin Aplicada a Sistemas Elctricos.
//Ing. Juan Carlos Aguirre.
//Grupo: 9E1V
//Alumnos: Cabrera Marco, Garca Luis y Lpez ngel.

#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <conio.h>
#define L 10
#define P L

float A[L][P],MATRIZ[L][P],VECTOR[L],X[L],CX[L],C[L],RESULTADOS[L],tabla[1000];
float a, b, c, d, e, f;
int it,ini,n,x,y,z,cont=0;

void Gauss_Seidel(int n)
{
for(x=0;x<n;x++)
{
CX[x]=0;
X[x]=0;
}
for(y=0;y<n;y++)
{
for(x=0;x<n;x++) //Ingreso de la matriz A
{
cout<<"A["<<y<<"]["<<x<<"] = ";
cin>>e;
A[y][x]=e;
MATRIZ[y][x]=e; //esta es la matriz q no varia
}
cout<<"Y la constante C["<<y<<"] = ";
cin>>f;
C[y]=f;
VECTOR[y]=f; //este es el vector que no se modifica
}
int sum=0,cont=0,reglon=0;
for(int i=0;i<n;i++) //se suma la diagonal principal
47

sum=sum+abs(A[i][i]);

for(i=0;i<n;i++) //se compara cada reglon con el valor de la diagonal
{
for(int j=0;j<n;j++)
reglon=reglon+abs(A[i][j]);
if(reglon<=sum) cont++;
reglon=0;
}

int temp[L][P],H[P];
if(cont!=n) //aqui se realiza el pivoteo
{
for(i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
int d,e;
d=abs(A[i][i]);
e=abs(A[j][i]);
if(d<e)
{
for(int z=0;z<n;z++)
{
temp[i][z]=A[i][z];
A[i][z]=A[j][z];
A[j][z]=temp[i][z];
}
H[i]=C[i];
H[j]=C[j];
C[i]=H[j];
C[j]=H[i];
}
}
}
}
i=0;
for(it=0;it<100;it++)
{
for(y=0;y<n;y++)
{
for(x=0;x<n;x++)
CX[y]-=(A[y][x]*X[x])/A[y][y];
CX[y]+=(C[y]/A[y][y]);
X[y]=CX[y];
48

tabla[i]=CX[y]; //tabla sirve para imprimir la tabla de resultados
i++;
}
}
}

void titulo(int n)
{
int o=10,i=1;
clrscr();
for(i=1;i<n+1;i++)
{
o=o+10;
gotoxy(o,3);
cout<<"X"<<i;
}
gotoxy(15,4);cout<<"--------------------------------------------";
}

void resultados()
{
int q=0,i=1,t=3,s=n,r=0;
int sw=0,w=0,ite=0,h=0;
while((sw==0)&&(w<20))
{
h=0;
while(h<n)
{
if(tabla[r]==tabla[r+s])
{
cont++;
}
if(cont==n)
sw=1;
r++;
s++;
h++;
}
ite++;
w++;
}
w=ite-1;
for(int j=0;j<w;j++)
{
t=t+2;
49

if((i%10==0))
{
textcolor(LIGHTRED+BLINK);
gotoxy(5,t-2);
cprintf("\n\n Presione una tecla para ver la siguiente parte de la tabla!!! ");
getch();
textcolor(GREEN);
clrscr();
t=5;
titulo(n);
}
gotoxy(15,t);cout<<i<<"";
int y=20,z=0;
for(int r=0;r<n;r++)
{
gotoxy(y+z,t);cout<<tabla[q];
q++;
z=z+10;
}
i++;
}
}

void main()
{
textcolor(GREEN);
clrscr();
cout<<" Solucion de ecuaciones simultaneas\n\n\n Metodo de Gauss-Seidel";
cout<<"\n\n Cuantas incognitas tendra el sistema: ";
scanf("%d",&n);
Gauss_Seidel(n);
titulo(n);
resultados();
cout<<"\n\nLos resultado son ";
for(x=0;x<n;x++)
{
RESULTADOS[x]=X[x];
cout<<"\nX["<<x<<"]= "<<RESULTADOS[x];
}
getch();

Vous aimerez peut-être aussi