Sie sind auf Seite 1von 13

1.

TEMA:
Matrices Cramer e Inversa

2. OBJETIVOS:
2.1. Objetivo General
Crear un programa para la resolucin de las matrices de Cramer e inversa en Net
beans
2.2. Objetivos Especificos
Investigar el fundamento terico acerca de las Matrices de Cramer e Inversa.
Identificar el lenguaje de programacin adecuado para la ejecucin del
programa.
Conocer un lenguaje de programacin en el cual podamos resolver matrices.

3. MARCO TERICO

3.1. Matrices Cramer


La regla de Cramer es un teorema del lgebra lineal que da la solucin de un sistema
lineal de ecuaciones en trminos de determinantes. Recibe este nombre en honor
a Gabriel Cramer (1704-1752).
La regla de Cramer es de importancia terica porque da una expresin explcita para la
solucin del sistema. Sin embargo, para sistemas de ecuaciones lineales de ms de tres
ecuaciones su aplicacin para la resolucin del mismo resulta excesivamente costosa:
computacionalmente, es ineficiente para grandes matrices y por ello no es usado en
aplicaciones prcticas que pueden implicar muchas ecuaciones.
Esta regla es aplicada en sistemas que tengan como condicin que el nmero de
ecuaciones equivalga al nmero de incgnitas y que el determinante de la matriz de los
coeficientes sea distinto de cero. Si dichas condiciones se cumplen en un sistema,
llamaremos a este, sistema de Cramer.
Ejemplo:

El determinante de la matriz es (usando las propiedades de los determinantes)


Puesto que la matriz es regular, tiene una nica solucin. Aplicamos Cramer para
obtenerla:

3.2 Matrices inversas

En la teora de matrices solamente ciertas clases de matrices cuadradas tienen inverso


multiplicativos a diferencia de algebra comn donde cada nmero real a diferente de cero
tiene su inverso multiplicativo b.
3.2.1 Matriz identidad
La matriz identidad tiene 1 en la diagonal principal y 0 en las otras posiciones.
Ejemplos de matrices identidad de diferentes rdenes.

1 0 0 0
1 0 0 0
1 0 0
I 3 0 1 0
1 0
I2 I4
0 1 0 0 1 0
0 0 1
0 0 0 1

3.2.2 Matriz transpuesta

Es la matriz que obtenemos de cambiar las filas por las columnas. La transpuesta de A
la representamos por A T .

Ejemplo:
3.2.3 Matriz Adjunta
Definicin: Si A es una matriz cuadrada n x n y B es la matriz de sus cofactores, entonces
la Adjunta de A, denotada por adjA que es la transpuesta de la matriz B cuadrada n x n .

A11 A21 ... An1


A A22 ... An 2
12
. . .
adjA B T
. . .
. . .

A1n A2 n ... Ann

Ejemplo I:
Calcula la adjA

1 3
A
4 2
Primero calculamos TODOS los cofactores de la matriz A.

A11 2 A12 4

A21 3 A22 1

Segundo con las respuestas formo la matriz B y luego obtengo B T que es la adjA .

2 4 2 3
B BT adjA
3 1 4 1
Ejemplo II:
Calcula la adjA

1 2 3
A 5 1 2
3 4 3

Solucin
Primero calculamos TODOS los cofactores de la matriz A.
1 2 5 2 5 1
A11 (1)11 5 A12 (1)1 2 21 A13 (1)13 17
4 3 3 3 3 4

2 3 1 3 1 2
A21 (1) 21 6 A22 (1) 2 2 12 A23 (1) 23 2
4 3 3 3 3 4

2 3 1 3 1 2
A31 (1) 31 1 A32 (1) 3 2 13 A33 (1) 33 9
1 2 5 2 5 1

Segundo con las respuestas formo la matriz B y luego obtengo B T que es la adjA .

5 21 17 5 6 1
B 6 12 2 B 21 12 13 adjA
T

1 13 9 17 2 9

3.3 Netbeans

Netbeans es un entorno de desarrollo gratuito y de cdigo abierto que en el momento de


escribir este artculo est en su versin 7.4. Permite el uso de un amplio rango de
tecnologas de desarrollo tanto para escritorio, como aplicaciones Web, o para
dispositivos mviles. Da soporte a las siguientes tecnologas, entre otras: Java, PHP,
Groovy, C/C++, HTML5,... Adems puede instalarse en varios sistemas operativos:
Windows, Linux, Mac OS,...
3.3.1 Caractersticas principales
Suele dar soporte a casi todas las novedades en el lenguaje Java. Cualquier preview del
lenguaje es rpidamente soportada por Netbeans.
Asistentes para la creacin y configuracin de distintos proyectos, incluida la eleccin de
algunos frameworks.
Buen editor de cdigo, multilenguaje, con el habitual coloreado y sugerencias de cdigo,
acceso a clases pinchando en el cdigo, control de versiones, localizacin de ubicacin
de la clase actual, comprobaciones sintcticas y semnticas, plantillas de cdigo, coding
tips, herramientas de refactorizacin, y un largo etctera. Tambin hay tecnologas
donde podemos usar el pulsar y arrastrar para incluir componentes en nuestro cdigo.
Simplifica la gestin de grandes proyectos con el uso de diferentes vistas, asistentes de
ayuda, y estructurando la visualizacin de manera ordenada, lo que ayuda en el trabajo
diario. Una vez que nos metemos en una clase java, por poner un ejemplo, se nos
mostrarn distintas ventanas con el cdigo, su localizacin en el proyecto, una lista de los
mtodos y propiedades (ordenadas alfabticamente), tambin hay una vista que nos
presenta las jerarquas que tiene nuestra clase y otras muchas opciones. Por supuesto
personalizable segn el gusto de cada usuario.
3.3.2 Lenguaje de Programacin para el Mtodo de Cramer

package ecu3;
import javax.swing.table.DefaultTableModel;
public class frmEcuaciones extends javax.swing.JFrame {
Double a11,a12,a13,a21,a22,a23,a31,a32,a33;
DefaultTableModel modelo=new DefaultTableModel();
public frmEcuaciones() {
initComponents();
String titu[]={"X","Y","Z","B"};
modelo.setColumnIdentifiers(titu);
tblA.setModel(modelo);
String datos[]={"2","4","-3","12"};
String datos2[]={"3","-5","2","13"};
String datos3[]={"-1","3","2","17"};
modelo.addRow(datos);
modelo.addRow(datos2);
modelo.addRow(datos3);
}
private Double redo(Double N){
return (Math.rint(N*100)/100);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();


jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
tblA = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
lblX = new javax.swing.JLabel();
lblY = new javax.swing.JLabel();
lblZ = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();

javax.swing.GroupLayout jPanel1Layout = new


javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)
.addGap(0, 100, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE
ADING)
.addGap(0, 100, Short.MAX_VALUE)
);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jLabel1.setText("Sistema de Ecuaciones Lineales de 3x3 por


Cramer ");

tblA.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N


tblA.setModel(new javax.swing.table.DefaultTableModel(

},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(tblA);

jButton1.setText("Solucionar");
jButton1.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent
evt) {
jButton1ActionPerformed(evt);
}
});

jLabel2.setText("MTODOS NUMERICOS - Grupo 5 ");

javax.swing.GroupLayout layout = new


javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment
.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton1)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblX,
javax.swing.GroupLayout.PREFERRED_SIZE, 54,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(lblY,
javax.swing.GroupLayout.PREFERRED_SIZE, 54,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(44, 44, 44)
.addComponent(lblZ,
javax.swing.GroupLayout.PREFERRED_SIZE, 53,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 452,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(94, 94, 94)
.addComponent(jLabel1,
javax.swing.GroupLayout.PREFERRED_SIZE, 293,
javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap(288, Short.MAX_VALUE)
.addComponent(jLabel2,
javax.swing.GroupLayout.PREFERRED_SIZE, 210,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(74, Short.MAX_VALUE))
);
layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1,
javax.swing.GroupLayout.PREFERRED_SIZE, 14,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 109,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(55, 55, 55)
.addComponent(jLabel2)
.addGap(3, 3, 3)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment
.BASELINE)
.addComponent(jButton1,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblX,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblY,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lblZ,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(41, 41, 41))
pack();
}// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent


evt) {
Double a,ax,ay,az,b1,b2,b3;
b1=Double.parseDouble(modelo.getValueAt(0, 3).toString());
b2=Double.parseDouble(modelo.getValueAt(1, 3).toString());
b3=Double.parseDouble(modelo.getValueAt(2, 3).toString());
captura();
a=deter();
a11=b1;a21=b2;a31=b3;
ax=deter();
captura();
a12=b1;a22=b2; a32=b3;
ay=deter();
captura();
a13=b1;a23=b2;a33=b3;
az=deter();
lblX.setText("X="+redo(ax/a)+"");
lblY.setText("Y="+redo(ay/a)+"");
lblZ.setText("Z="+redo(az/a)+"");
}
private void captura(){
a11=Double.parseDouble(modelo.getValueAt(0, 0).toString());
a12=Double.parseDouble(modelo.getValueAt(0, 1).toString());
a13=Double.parseDouble(modelo.getValueAt(0, 2).toString());
a21=Double.parseDouble(modelo.getValueAt(1, 0).toString());
a22=Double.parseDouble(modelo.getValueAt(1, 1).toString());
a23=Double.parseDouble(modelo.getValueAt(1, 2).toString());
a31=Double.parseDouble(modelo.getValueAt(2, 0).toString());
a32=Double.parseDouble(modelo.getValueAt(2, 1).toString());
a33=Double.parseDouble(modelo.getValueAt(2, 2).toString());
}
private Double deter(){
Double d;
d=(a11*a22*a33+a12*a23*a31+a13*a21*a32)-
(a13*a22*a31+a12*a21*a33+a11*a23*a32);
return d;
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel
setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay
with the default look and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.ht
ml
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(frmEcuaciones.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(frmEcuaciones.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(frmEcuaciones.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(frmEcuaciones.class.getName()).log(
java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frmEcuaciones().setVisible(true);
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblX;
private javax.swing.JLabel lblY;
private javax.swing.JLabel lblZ;
private javax.swing.JTable tblA;
// End of variables declaration

3.3.3 Lenguaje de Programacion para el Mtodo Inverso

public double Determinante(int i, double [][]matriz)


{
if (matriz.length==2)
double deter=matriz[0][0]*matriz[1][1]-
matriz[0][1]*matriz[1][0];
return deter;
else
double deter=0;

for (int j = 0; j < matriz.length; j++)


{
double[][]temp = this.SubMatriz(i,j,matriz);

deter=deter+Math.pow(-1,
i+j)*matriz[i][j]*this.Determinante(0, temp);
return deter;
//clculo de submatriz eliminado i, j

private double[][]SubMatriz(int i,int j,double [][]matriz)


{
double[][]temp=new double[matriz.length-1][matriz.length-1];
int count1=0;
int count2=0;

for (int k = 0; k < matriz.length; k++)


{
if (k!=i)
{
count2=0;
for (int l = 0; l < matriz.length; l++)
{
if (l!=j)
{
temp[count1][count2]=matriz[k][l];

count2++;
count1++;
return temp;

//metodo para calcular la adjunta de una matrzi


public double [][]AdjuntaMatriz(double [][]matriz)
double[][]tempAdjunta=new double[matriz.length][matriz.length];
for (int i = 0; i < tempAdjunta.length; i++)
{
for (int j = 0; j < tempAdjunta.length; j++)
{
double[][]temp = this.SubMatriz(i, j, matriz) ;

double elementoAdjunto=Math.pow(-1,
i+j)*this.Determinante(0, temp);

tempAdjunta[i][j]=elementoAdjunto;

return tempAdjunta;
//metodo para obtener la transpuesta de la matriz

public double [][]TransouestaMatriz(double [][]matriz)


double[][]tempTranspuesta=new double[matriz.length][matriz.length];

for (int i = 0; i < tempTranspuesta.length; i++)


{
for (int j = 0; j < tempTranspuesta.length; j++)
{
tempTranspuesta[i][j]=matriz[j][i];
return tempTranspuesta;

Das könnte Ihnen auch gefallen