Calculando determinante, matriz inversa y adjunta 4x4 java
Avanzando ahora con las matrices 4x4 en esta ocasión mostrare el código con el cual se podría calcular los determinante4x4, inversa4x4 (por el método de Gauss-Jordan) y adjunta4x4 para lo cual aconsejo primero que entiendan en tema de como resolver esos tipos de problemas:
Aquí el Código:
import javax.swing.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.util.StringTokenizer;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.util.StringTokenizer;
import java.awt.event.*;
public class Matrices4x4 extends JFrame implements ActionListener{
private int X=4,Y=4;
private JTextField[][] textfield1=new JTextField[100][100];
private JTextField TamanyoX;
private JLabel intro,total,lm,Matrizinversa;
private JLabel[][] MI = new JLabel[100][100];
private JButton boton1,boton2,boton3,boton4,boton5;
private JPanel contentPane;
private JComboBox dimension,combo1;
public Matrices4x4() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
setBounds(0,0,400,300);
lm=new JLabel("total det.");
lm.setBounds(40,240,100,30);
add(lm);
total=new JLabel("0");
total.setBounds(100,240,60,30);
add(total);
boton2=new JButton("Determinante");
boton2.setBounds(500,400,125,30);
add(boton2);
boton4=new JButton("M. Inversa");
boton4.setBounds(500,430,125,30);
add(boton4);
boton5=new JButton("M. Adjunta");
boton5.setBounds(500,460,125,30);
add(boton5);
boton2.addActionListener(this);
boton4.addActionListener(this);
boton5.addActionListener(this);
for(int i=0;i<100;i++){
MI[i][i]=new JLabel();
MI[i][i].setText("");
MI[i][i].setBounds(i,i,60,30);
add(MI[i][i]);
MI[i][i].setVisible(false);
Matrizinversa = new JLabel();
Matrizinversa.setBounds(i,i,i,i);
Matrizinversa.setVisible(false);
}
//colocando textfield
int x=0,y=0,A,B=40;
for(x=0; x<4;x++){
A=80;
for( y=0; y<4;y++){
System.out.println("1");
textfield1[x][y] =new JTextField("0");
textfield1[x][y].setBounds(B,A,30,20);
add(textfield1[x][y]);
A=A+40;
}
B=B+40;
}
}
public void actionPerformed(ActionEvent e) {
//determinante 4x4
if (e.getSource()==boton2) {
double Total=0;
for(int gh=0;gh<=100;gh++){
for(int gh2=0;gh2<=100;gh2++)
{ try{
MI[gh][gh2].setVisible(false);
Matrizinversa.setVisible(false);
}catch(Exception ee){}
}
}
/*
!a00 a10 a20 a30
!a01 a11 a22 a33
!a02 a12 a23 a34
!a03 a13 a23 a30
*/
//
double Ta00=0,Ta01=0,Ta02=0,Ta03=0;
Total=0;
double a00 = Double.parseDouble(textfield1[0][0].getText());
double a01 = Double.parseDouble(textfield1[0][1].getText());
double a02 = Double.parseDouble(textfield1[0][2].getText());
double a03 = Double.parseDouble(textfield1[0][3].getText());
double a10 = Double.parseDouble(textfield1[1][0].getText());
double a11 = Double.parseDouble(textfield1[1][1].getText());
double a12 = Double.parseDouble(textfield1[1][2].getText());
double a13 = Double.parseDouble(textfield1[1][3].getText());
double a20 = Double.parseDouble(textfield1[2][0].getText());
double a21 = Double.parseDouble(textfield1[2][1].getText());
double a22 = Double.parseDouble(textfield1[2][2].getText());
double a23 = Double.parseDouble(textfield1[2][3].getText());
double a30 = Double.parseDouble(textfield1[3][0].getText());
double a31 = Double.parseDouble(textfield1[3][1].getText());
double a32 = Double.parseDouble(textfield1[3][2].getText());
double a33 = Double.parseDouble(textfield1[3][3].getText());
/*
a11 a21 a31
a12 a22 a32
a13 a23 a33
*/
Ta00=a00*(a11*a22*a33+
a32*a21*a13+
a12*a23*a31+
a31*a22*a13*-1+
a32*a23*a11*-1+
a12*a21*a33*-1);
/*
a10 a20 a30
a12 a22 a32
a13 a23 a33
*/
Ta01 = (a01*-1)*(a10*a22*a33+
a12*a23*a30+
a32*a20*a13+
a30*a22*a13*-1+
a32*a23*a10*-1+
a12*a20*a33*-1);
/*
a10 a20 a30
a11 a21 31
a13 a23 a33
*/
Ta02=a02*(a10*a21*a33+
a11*a23*a30+
a31*a20*a13+
a30*a21*a13*-1+
a11*a20*a33*-1+
a31*a23*a10*-1);
/*
a10 a20 a30
a11 a21 a31
a12 a22 a32
*/
Ta03=(a03*-1)*(a10*a21*a32+
a11*a22*a30+
a31*a20*a12+
a30*a21*a12*-1+
a31*a22*a10*-1+
a11*a20*a32*-1);
Total=Ta00+Ta01+Ta02+Ta03;
total.setText(String.valueOf(Total));
add(total);
}
//Matriz inversa 4x4
if (e.getSource()==boton4){//
for(int gh=0;gh<=100;gh++){
for(int gh2=0;gh2<=100;gh2++)
{
try{
MI[gh][gh2].setVisible(false);
Matrizinversa.setVisible(false);
}catch(Exception ee){}
}}
// double Ta00=0,Ta01=0,Ta02=0,Ta03=0;
double Total=0;
double Ta00=0,Ta01=0,Ta02=0,Ta03=0;
double a00 = Double.parseDouble(textfield1[0][0].getText());
double a01 = Double.parseDouble(textfield1[0][1].getText());
double a02 = Double.parseDouble(textfield1[0][2].getText());
double a03 = Double.parseDouble(textfield1[0][3].getText());
double a10 = Double.parseDouble(textfield1[1][0].getText());
double a11 = Double.parseDouble(textfield1[1][1].getText());
double a12 = Double.parseDouble(textfield1[1][2].getText());
double a13 = Double.parseDouble(textfield1[1][3].getText());
double a20 = Double.parseDouble(textfield1[2][0].getText());
double a21 = Double.parseDouble(textfield1[2][1].getText());
double a22 = Double.parseDouble(textfield1[2][2].getText());
double a23 = Double.parseDouble(textfield1[2][3].getText());
double a30 = Double.parseDouble(textfield1[3][0].getText());
double a31 = Double.parseDouble(textfield1[3][1].getText());
double a32 = Double.parseDouble(textfield1[3][2].getText());
double a33 = Double.parseDouble(textfield1[3][3].getText());
// Total=a00*a11*a22 + a10*a21*l2a02 +a20*l2a01*l2a12;
// Total=Total+(a02*a11*a20)*-1 + (a12*a21*l2a00)*-1 + (a22*l2a01*l2a10)*-1;
//mira ste ultimo
/*
a11 a21 a31
a12 a22 a32
a13 a23 a33
*/
Ta00=a00*(a11*a22*a33+
a32*a21*a13+
a12*a23*a31+
a31*a22*a13*-1+
a32*a23*a11*-1+
a12*a21*a33*-1);
/*
a10 a20 a30
a12 a22 a32
a13 a23 a33
*/
Ta01 = (a01*-1)*(a10*a22*a33+
a12*a23*a30+
a32*a20*a13+
a30*a22*a13*-1+
a32*a23*a10*-1+
a12*a20*a33*-1);
/*
a10 a20 a30
a11 a21 31
a13 a23 a33
*/
Ta02=a02*(a10*a21*a33+
a11*a23*a30+
a31*a20*a13+
a30*a21*a13*-1+
a11*a20*a33*-1+
a31*a23*a10*-1);
/*
a10 a20 a30
a11 a21 a31
a12 a22 a32
*/
Ta03=(a03*-1)*(a10*a21*a32+
a11*a22*a30+
a31*a20*a12+
a30*a21*a12*-1+
a31*a22*a10*-1+
a11*a20*a32*-1);
Total=Ta00+Ta01+Ta02+Ta03;
double[][] c = new double[X][X];
if(Total!=0) {
c[0][0] = a11*a22*a33 - a11*a23*a32 - a21*a12*a33 + a21*a13*a32 + a31*a12*a23 - a31*a13*a22;
c[0][1] = - a01*a22*a33 + a01*a23*a32 + a21*a02*a33 - a21*a03*a32 - a31*a02*a23 + a31*a03*a22;
c[0][2] = a01*a12*a33 - a01*a13*a32 - a11*a02*a33 + a11*a03*a32 + a31*a02*a13 - a31*a03*a12;
c[0][3] = - a01*a12*a23 + a01*a13*a22 + a11*a02*a23 - a11*a03*a22 - a21*a02*a13 + a21*a03*a12;
c[1][0] = - a10*a22*a33 + a10*a23*a32 + a20*a12*a33 - a20*a13*a32 - a30*a12*a23 + a30*a13*a22;
c[1][1] = a00*a22*a33 - a00*a23*a32 - a20*a02*a33 + a20*a03*a32 + a30*a02*a23 - a30*a03*a22;
c[1][2] = - a00*a12*a33 + a00*a13*a32 + a10*a02*a33 - a10*a03*a32 - a30*a02*a13 + a30*a03*a12;
c[1][3] = a00*a12*a23 - a00*a13*a22 - a10*a02*a23 + a10*a03*a22 + a20*a02*a13 - a20*a03*a12;
c[2][0] = a10*a21*a33 - a10*a23*a31 - a20*a11*a33 + a20*a13*a31 + a30*a11*a23 - a30*a13*a21;
c[2][1] = - a00*a21*a33 + a00*a23*a31 + a20*a01*a33 - a20*a03*a31 - a30*a01*a23 + a30*a03*a21;
c[2][2] = a00*a11*a33 - a00*a13*a31 - a10*a01*a33 + a10*a03*a31 + a30*a01*a13 - a30*a03*a11;
c[2][3] = - a00*a11*a23 + a00*a13*a21 + a10*a01*a23 - a10*a03*a21 - a20*a01*a13 + a20*a03*a11;
c[3][0] = - a10*a21*a32 + a10*a22*a31 + a20*a11*a32 - a20*a12*a31 - a30*a11*a22 + a30*a12*a21;
c[3][1] = a00*a21*a32 - a00*a22*a31 - a20*a01*a32 + a20*a02*a31 + a30*a01*a22 - a30*a02*a21;
c[3][2] = - a00*a11*a32 + a00*a12*a31 + a10*a01*a32 - a10*a02*a31 - a30*a01*a12 + a30*a02*a11;
c[3][3] = a00*a11*a22 - a00*a12*a21 - a10*a01*a22 + a10*a02*a21 + a20*a01*a12 - a20*a02*a11;
/*
c[0][0] = a11*a22*a33
+ a12*a23*a31
+ a13*a21*a32
- a11*a23*a32
- a12*a21*a22
- a13*a22*a31;
c[0][1] = a01*a23*a32
+ a02*a21*a33
+ a03*a22*a31
- a01*a22*a33
- a02*a23*a31
- a03*a21*a32;
c[0][2] = a01*a12*a33
+ a02*a13*a31
+ a03*a11*a32
- a01*a13*a32
- a02*a11*a33
- a03*a12*a31;
c[0][3] = a01*a13*a22
+ a02*a11*a23
+ a03*a12*a21
- a01*a12*a23
- a02*a13*a21
- a03*a11*a22;
c[1][0] = a10*a23*a32
+ a12*a20*a33
+ a13*a22*a30
- a10*a22*a33
- a12*a23*a30
- a13*a20*a32;
c[1][1] = a00*a22*a33
+ a02*a23*a30
+ a03*a20*a32
- a00*a23*a32
- a02*a20*a33
- a03*a22*a30;
c[1][2] = a00*a13*a32
+ a02*a10*a33
+ a03*a12*a30
- a00*a12*a33
- a02*a13*a30
- a03*a10*a32;
c[1][3] = a00*a12*a23
+ a02*a13*a20
+ a03*a10*a22
- a00*a13*a22
- a02*a10*a23
- a03*a12*a20;
c[2][0] = a10*a21*a33
+ a11*a23*a30
+ a13*a20*a31
- a10*a23*a31
- a11*a20*a33
- a13*a21*a30;
c[2][1] = a00*a23*a31
+ a01*a20*a33
+ a03*a21*a30
- a00*a21*a33
- a01*a23*a30
- a03*a20*a31;
c[2][2] = a00*a11*a33
+ a01*a13*a30
+ a03*a10*a31
- a00*a13*a31
- a01*a10*a33
- a03*a11*a30;
c[2][3] = a00*a13*a21
+ a01*a10*a23
+ a03*a11*a20
- a00*a11*a23
- a01*a13*a20
- a03*a10*a21;
c[3][0] = a10*a22*a31
+ a11*a20*a32
+ a12*a21*a30
- a10*a21*a32
- a11*a22*a30
- a13*a20*a31;
c[3][1] = a00*a21*a32
+ a01*a22*a30
+ a02*a20*a31
- a00*a22*a31
- a01*a20*a32
- a02*a11*a20;
c[3][2] = a00*a12*a31
+ a01*a10*a32
+ a02*a11*a30
- a00*a11*a32
- a01*a12*a30
- a02*a10*a31;
c[3][3] = a00*a11*a22
+ a01*a12*a21
+ a02*a10*a21
- a00*a12*a21
- a01*a10*a22
- a02*a11*a20;
*/
//gafivandooooo
int lx=250, ly=180;
X=4;
for(int i=0; i<X;i++){
ly=180;
for(int i2=0; i2<X;i2++){
MI[i][i2] = new JLabel();
MI[i][i2].setBounds(i,i2,100,30);
MI[i][i2].setVisible(false);
add(MI[i][i2]);
Matrizinversa = new JLabel("lol");
Matrizinversa.setText("Resultado:");
Matrizinversa.setBounds(280,130,70,30);
Matrizinversa.setVisible(false);
add(Matrizinversa);
}
}
for(int i=0; i<X;i++){
ly=180;
for(int i2=0; i2<X;i2++){
//MI[i][i2] = new JLabel("lol");
Matrizinversa.setText("Resultado:");
Matrizinversa.setBounds(260,140,70,30);
Matrizinversa.setVisible(true);
add(Matrizinversa);
MI[i][i2].setText(String.valueOf(c[i][i2]/Total));//+"/"+String.valueOf(Total));
MI[i][i2].setBounds(lx,ly,100,30);
MI[i][i2].setVisible(true);
add(MI[i][i2]);
ly=ly+50;
MI[i][i2].setVisible(true);
}
lx=lx+110;
}
//fin graficadooooooooo
}else
{
total.setText("Error det. da 0");
add(total);
}
}
//Matriz adjunta 3x3
if (e.getSource()==boton5)
{
//
for(int gh=0;gh<=100;gh++){
for(int gh2=0;gh2<=100;gh2++)
{
try{
MI[gh][gh2].setVisible(false);
Matrizinversa.setVisible(false);
}catch(Exception ee){}
}}
//-----
double Ta00=0,Ta01=0,Ta02=0,Ta03=0;
double Total=0;
double a00 = Double.parseDouble(textfield1[0][0].getText());
double a01 = Double.parseDouble(textfield1[0][1].getText());
double a02 = Double.parseDouble(textfield1[0][2].getText());
double a03 = Double.parseDouble(textfield1[0][3].getText());
double a10 = Double.parseDouble(textfield1[1][0].getText());
double a11 = Double.parseDouble(textfield1[1][1].getText());
double a12 = Double.parseDouble(textfield1[1][2].getText());
double a13 = Double.parseDouble(textfield1[1][3].getText());
double a20 = Double.parseDouble(textfield1[2][0].getText());
double a21 = Double.parseDouble(textfield1[2][1].getText());
double a22 = Double.parseDouble(textfield1[2][2].getText());
double a23 = Double.parseDouble(textfield1[2][3].getText());
double a30 = Double.parseDouble(textfield1[3][0].getText());
double a31 = Double.parseDouble(textfield1[3][1].getText());
double a32 = Double.parseDouble(textfield1[3][2].getText());
double a33 = Double.parseDouble(textfield1[3][3].getText());
//mira ste ultimo
/*
a11 a21 a31
a12 a22 a32
a13 a23 a33
*/
Ta00=a00*(a11*a22*a33+
a32*a21*a13+
a12*a23*a31+
a31*a22*a13*-1+
a32*a23*a11*-1+
a12*a21*a33*-1);
/*
a10 a20 a30
a12 a22 a32
a13 a23 a33
*/
Ta01 = (a01*-1)*(a10*a22*a33+
a12*a23*a30+
a32*a20*a13+
a30*a22*a13*-1+
a32*a23*a10*-1+
a12*a20*a33*-1);
/*
a10 a20 a30
a11 a21 31
a13 a23 a33
*/
Ta02=a02*(a10*a21*a33+
a11*a23*a30+
a31*a20*a13+
a30*a21*a13*-1+
a11*a20*a33*-1+
a31*a23*a10*-1);
/*
a10 a20 a30
a11 a21 a31
a12 a22 a32
*/
Ta03=(a03*-1)*(a10*a21*a32+
a11*a22*a30+
a31*a20*a12+
a30*a21*a12*-1+
a31*a22*a10*-1+
a11*a20*a32*-1);
Total=Ta00+Ta01+Ta02+Ta03;
double[][] c = new double[X][X];
if(Total!=0) {
c[0][0] = a11*a22*a33
+ a12*a23*a31
+ a13*a21*a32
- a11*a23*a32
- a12*a21*a22
- a13*a22*a31;
c[0][1] = a01*a23*a32
+ a02*a21*a33
+ a03*a22*a31
- a01*a22*a33
- a02*a23*a31
- a03*a21*a32;
c[0][2] = a01*a12*a33
+ a02*a13*a31
+ a03*a11*a32
- a01*a13*a32
- a02*a11*a33
- a03*a12*a31;
c[0][3] = a01*a13*a22
+ a02*a11*a23
+ a03*a12*a21
- a01*a12*a23
- a02*a13*a21
- a03*a11*a22;
c[1][0] = a10*a23*a32
+ a12*a20*a33
+ a13*a22*a30
- a10*a22*a33
- a12*a23*a30
- a13*a20*a32;
c[1][1] = a00*a22*a33
+ a02*a23*a30
+ a03*a20*a32
- a00*a23*a32
- a02*a20*a33
- a03*a22*a30;
c[1][2] = a00*a13*a32
+ a02*a10*a33
+ a03*a12*a30
- a00*a12*a33
- a02*a13*a30
- a03*a10*a32;
c[1][3] = a00*a12*a23
+ a02*a13*a20
+ a03*a10*a22
- a00*a13*a22
- a02*a10*a23
- a03*a12*a20;
c[2][0] = a10*a21*a33
+ a11*a23*a30
+ a13*a20*a31
- a10*a23*a31
- a11*a20*a33
- a13*a21*a30;
c[2][1] = a00*a23*a31
+ a01*a20*a33
+ a03*a21*a30
- a00*a21*a33
- a01*a23*a30
- a03*a20*a31;
c[2][2] = a00*a11*a33
+ a01*a13*a30
+ a03*a10*a31
- a00*a13*a31
- a01*a10*a33
- a03*a11*a30;
c[2][3] = a00*a13*a21
+ a01*a10*a23
+ a03*a11*a20
- a00*a11*a23
- a01*a13*a20
- a03*a10*a21;
c[3][0] = a10*a22*a31
+ a11*a20*a32
+ a12*a21*a30
- a10*a21*a32
- a11*a22*a30
- a13*a20*a31;
c[3][1] = a00*a21*a32
+ a01*a22*a30
+ a02*a20*a31
- a00*a22*a31
- a01*a20*a32
- a02*a11*a20;
c[3][2] = a00*a12*a31
+ a01*a10*a32
+ a02*a11*a30
- a00*a11*a32
- a01*a12*a30
- a02*a10*a31;
c[3][3] = a00*a11*a22
+ a01*a12*a21
+ a02*a10*a21
- a00*a12*a21
- a01*a10*a22
- a02*a11*a20;
//gafivandooooo
int lx=250, ly=180;
X=4;
for(int i=0; i<X;i++){
ly=180;
for(int i2=0; i2<X;i2++){
MI[i][i2] = new JLabel();
MI[i][i2].setBounds(i,i2,100,30);
MI[i][i2].setVisible(false);
add(MI[i][i2]);
Matrizinversa = new JLabel("lol");
Matrizinversa.setText("Resultado:");
Matrizinversa.setBounds(220,150,70,30);
Matrizinversa.setVisible(false);
add(Matrizinversa);
}
}
for(int i=0; i<X;i++){
ly=180;
for(int i2=0; i2<X;i2++){
//MI[i][i2] = new JLabel("lol");
Matrizinversa.setText("Resultado:");
Matrizinversa.setBounds(250,130,70,30);
Matrizinversa.setVisible(true);
add(Matrizinversa);
MI[i][i2].setText(String.valueOf(c[i][i2])/*+"/"+String.valueOf(Total)*/);
MI[i][i2].setBounds(lx,ly,100,30);
MI[i][i2].setVisible(true);
add(MI[i][i2]);
System.out.println("i= "+i+" i2= "+i2);
ly=ly+60;
MI[i][i2].setVisible(true);
}
lx=lx+110;
}
//fin graficadooooooooo
}
}
}
public static void main(String[] ar) {
Matrices4x4 formulario=new Matrices4x4();
formulario.setBounds(0,0,720,600);
formulario.setVisible(true);
}
}
Descargar el código:
Comentarios
Publicar un comentario