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.
*/
9 comentarios:
olles pues esta bueno!!! pero mqartca mushos errores se infiere que ya lo checaste!!!! podrias echar la mano carnal.
sale ahi avisas
mi correo es chimichurris8
hola viejo muy bueno este codigo estoy cansado de los sistemas lineales por favor me envie el codigo al correo xavi-nino2007@hotmail.com
gracias.
Hola amigo como esta, que novedades por mexico muy bueno tu codigo lo estoy usando y exponiendo en mi curso de Métodos Numéricos y de ante mano considerando tus derechos por la fuente del cramer sitando tu Blogger ya te visitaran mis compañeros asi me dijeron espero estar en contacto.
No veo qué razones puedas tener para no publicar el código completo.
Dices que te lo pidan a tu correo electrónico, ¿es para fines estadísticos?
De cualquier forma, si se entiende lo que se tiene que hacer, es muy fácil completar el código.
Hola amigo me gustaria me echaras la mano, con el codigo completo ya que lo necesito, por favor de ante mano gracias, mi correo es chipilofan@hotmail.es si ers tan amable de mandarme el codigo gracias!!!
oye echame la mano kon el codigo me lo podrias pasar porfas mi correo es esteban_7_69@hotmail.com
Hola, podrías enviarme el código completo, por favor?
soybonecracker@hotmail.com
un saludo y gracias
primo,tu código es el mejor,lo necesito...un saludo desde perú,
mandame
alcantaramv@hotmail.com
si,te enteresa nos podemos unir y lo podemos publicar en una pagina mejor
www.alcanweb.com //es mio...
hola pueden encontrar tambien el codigo de ejemplo en github:
https://github.com/primitivorm/numeric-methods/blob/master/cramer.java
cualquier duda les dejo mi mail: cibercafe_montero@hotmail.com
Publicar un comentario