Professional Documents
Culture Documents
Se utiliza un par de variables auxiliares llamadas pact (pivote actual) y pant ( pivote
anterior). Al inicio pant = 1; y pact = C(i,i). Donde i corre desde 1 hasta N, N el nmero
de ecuaciones del sistema. Los pivotes van tomando los valores de la diagonal
principal. Al final, el nmero que queda en la diagonal principal es el determinante, lo
que queda en lugar de la matriz identidad es la inversa y la ltima columna
corresponde a la solucin del sistema multiplicada por el ltimo pivote actual (pact).
Como ejemplo, sea el sistema de ecuaciones
2x - y +
x
= 2
+ 3z
= 4
2y + 2z
= 4
-1
-1
-1
-1
-8
-4
-8
-8
-6
-3
-8
-8
-2
-5
-8
-8
-4
-8
-8
-8
-8
-1
es -8
En tanto que la inversa de esta matriz es:
-3
-2
-5
-4
(1/-8)
-6
-8
(-1/8) -8
1
=
-8
1
1
#include <stdio.h>
#define Tamano 3
// La variable Tamano controla el numero de ecuaciones del sistema
// se puede cambiar facilmente para resolver sistemas de cualquier
// tamano
// Prototipos de funciones
void Recibe(int Arreglo[][2*Tamano + 1]);
void Imprime(int Array[][2*Tamano + 1]);
void Calcula(int C[][2*Tamano + 1]);
int main()
{ // Abre main
int i;
int j;
printf("\nEste programa usa el metodo de Montante para calcular");
////////////////////////////////////////////////////////////
//FUNCION RECIBE
/////////////////////////////////////////////////////////////
void Recibe( int Arreglo[][2*Tamano + 1])
{
int
int
int
int
int
printf("\n\n");
for ( i = 0; i < Tamano; i++ )
{
// Abre for
for ( j = 0; j < 2*Tamano + 1; j++ )
{
// Abre for anidado
printf("%3d\t", Array[i][j]);
printf("\n");
}
// Cierra for
}
///////////////////////////////////////////////////////
//FUNCION CALCULA
///////////////////////////////////////////////////////
void Calcula(int C[][2*Tamano + 1])
{
// Abre funcion Calcula
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ El algoritmo requiere que se haga una copia de la matriz original
+
+ Solo debe alterarse la matriz C cuando i se incrementa, esto se
+
+ Introducir la sentencia
+
+
B[k][l] = ( (C[i][i]*C[k][l]) - (C[k][i]*C[i][l]) )/pant;
+
+
+
+ hace en la parte principal de la funcion
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
// Se definen las variables pact (pivote actual) y pant(pivote anterior)
// ademas de variables controladoras de ciclos
int
int
int
int
int
int
int
int
int
B[Tamano][2*Tamano + 1];
pant = 1; // Al principio pant = 1
pact;
l;
k;
i = 0;
j;
s;
t;
// Cierra if
// Cierra for anidado
// Cierra for
// Cierra funcion Calcula
Y el mtodo Montante, este es un cdigo que empec el semestre pasado, hoy lo retom y lo
he podido concluir :D, este es el cdigo:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>
#include <stdlib.h>
#define R 3
#define C 4
int main (void){
int i, j, num[R][C], matriz[R][C], pivote, pivant = 1, iteracion = 0;
//Lectura
for(i=0;i<R;i++){
for(j=0;j<C - 1;j++){
printf("Los valores de la matriz [%d,%d]= ",i + 1, j + 1);
scanf("%d",&matriz[i][j]);
}
printf("El costo fue----------------> ");
scanf("%d",&matriz[i][j]);
}
while(iteracion < R) {
pivote = matriz[iteracion][iteracion];
for(i=0;i<C;i++) {
num[iteracion][i] = matriz[iteracion][i];
}
for(i=0;i<R;i++) {
if(iteracion != i) {
num[i][iteracion] = 0;
}
}
for(i=0;i<R;i++){
for(j=0;j<C;j++){
if(i != iteracion) {
if( j!= iteracion) {
num[i][j] = (((matriz[i][j] * pivote) - (matriz[iteracion][j] * m
}
}
}
}
iteracion++;
pivant = pivote;
for(i=0;i<R;i++) {
for(j=0;j<C;j++) {
matriz[i][j] = num[i][j];
}
}
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
printf("\n\n\n\n");
for(i=0;i<R;i++){
printf("\t\t");
for(j=0;j<C - 1;j++){
printf("\t%d",matriz[i][j]);
}
printf("\t= %d\n", matriz[i][j]);
}
return 0;