Las fórmulas son :
Recordemos que la fórmula de los determinantes (3x3) es :
Como se puede observar , para que podamos utilizar el método de Cramer , el determinante de la matriz de los coeficientes no debe ser 0 para que el denominador de las fórmulas no se anule . Si diese 0 es que una de las incógnitas se puede poner en función de las otras , es decir , tendríamos parámetros . La forma de resolver este problema es pasar al otro miembro (al lado del término independiente) la incógnita que tomemos como parámetro y de esta forma tendremos un determinante que no se anula pero de menor grado . Al aplicar las fórmula de Cramer tendremos un parámetro en la columna de los términos independientes .
Bien ahora vamos a iniciar nuestro programa, en este caso es en Swing.
1)Hacemos un bosquejo de lo que queremos que haga nuestro pequeño programa y esta seria su estructura.
import java.io.*;
import javax.swing.*;
public class cramer {
public static void main(String args[]){
int tam=0;
//Pedimos el tamanyo de la matriz de ecuaciones
JOptionPane.showMessageDialog(null,"Metodo de Cramer para resolver sistemas de ecuaciones n * n");
tam=Integer.parseInt(JOptionPane.showInputDialog(null,"Cual es el tamanyo de la matriz?"));
//creamos nuestra matriz y nuestro vector con el que vamos a trabajar
int a[][]=new int[tam][tam]; //ecuacion
int b[]=new int[tam]; //resultado de a
//creamos un vector para las soluciones de X
float cmr[]=new float[tam];
//Pedimos los valores de las ecuaciones por renglo
JOptionPane.showMessageDialog(null,"Inserte los valores de la matriz de ecuaciones");
insertarM(a); //llamada a procedimiento para llenar una matriz
//Pedimos los valores de las soluciones
JOptionPane.showMessageDialog(null,"Inserte los valores del vector de soluciones");
insertarV(b);//llamada a procedimiento para llenar un vector
//Este es el procedimiento que resuelve las ecuaciones
cmr=cramer(a,b);
//Mostramos los resultados para las Xn
JOptionPane.showMessageDialog(null,"Los valores para las X's son:");
mostrarX(cmr);
}
//aqui van todos los procedimientos involucrados
}
Muy bien ahora vamos por partes.
2) Este seria el procedimiento para resolver por Cramer
//procedimiento cramer
public static float[] cramer(int a[][], int b[]){
float Rcramer[]=new float[b.length];
int det=determinante(a);
int detTemp;
int c[][]=new int[a.length][a.length];
/*
Verificamos que tenga solucion:
"Si el determinante de la matriz de ecuaciones original es 0
entonces, no tiene solucion"
*/
if(det==0){
JOptionPane.showMessageDialog(null,"No tiene solucion");
return Rcramer;
}
//En este ciclo se realiza el proceso de sustituir cada columna y calcular los determinantes
for(int i=0; i
c=sustituye(a,b,i); //sustituye una columna i
detTemp=determinante(c); //calcula el determinante
Rcramer[i]=(float)detTemp/(float)det;//Almacena la solucion de Xi
}
return Rcramer; //Retorna el vector de soluciones de Xn
}
3) Procedimiento sustituye(), para sustituir el vector de solucion de la ecuacion en una columna de la matriz de ecuaciones.
//sustituye los valores de b en a en la posicion pos
public static int [][] sustituye(int a[][], int b[], int pos){
//vector en donde se almacenaran los nuevos valores
int c[][] =new int[a.length][a.length];
for(int i=0;i
for(int j=0; j
//si es la posicion sustituir los valores de b
if(j==pos){
c[i][j]=b[i];
}
//sino los valores quedan iguales
else{
c[i][j]=a[i][j];
}
}
}
return c;//retorna la matriz ya modificada
}
4)Procedimiento determinante(), calcula el determinante de una matriz de n * n
//Calcula el determinante de una matriz de n x n
public static int determinante(int a[][]){
//Esta matriz la utilizamos para calcular el determinante
int c[][]=new int[a.length+(a.length-1)][a.length];
int det = 0;
//almacena los resultados parciales
int par[]=new int[a.length*2];
for(int i=0;i
for(int j=0; j
c[i][j]=a[i][j];
}
}
int k=0;
for(int i=a.length;i
for(int j=0; j
c[i][j]=a[k][j];
}
k++;
}
//calcula la suma de los productos y la inserta en par
k=0;
int temp=1;
int inc=1;
for (int i=0; i<>
for(int j=0; j
temp=temp*c[k][j];
k++;
}
k=inc;
par[i]=temp;
temp=1;
inc++;
}
//calcula la resta de los productos y la inserta en par
k=a.length-1;
temp=1;
inc=a.length-1;
int l=(par.length)/2;
for (int i=0; i<>
for(int j=0; j
temp=temp*c[k][j];
k--; //k=k-1;
}
par[l]=-temp;
temp=1;
inc++;
k=inc;
l++;
}
det=suma(par); //calcula la suma del vector
return det;
}
5) Muy bien hasta aqui espero que le hayan entendido al codigo de los procedimientos,ahora compilamos nuestro programa:
#javac cramer.java
Y lo ejecutamos
#java cramer
/*
El motivo de no subir todo el codigo es debido a que al tratar de publicar el blog con el codigo completo me marca errores el blog.
Por tal motivo les dejo el codigo completo en este link.
http://cid-c6f5df27ec379c89.skydrive.live.com/browse.aspx/P%C3%BAblico/BLOG/JAVA?uc=1
Tambien dejo disponible mi e-mail: cibercafe_montero@hotmail.com
Gracias por visitar mi blog.
*/