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