Post on 03-Nov-2015
description
Informe Regresin
lineal
Fecha: 24-06-2012
Nombres:
Freddy Crdenas
Sebastin Muoz
Juan Carlos Vergara
Actividades de Aplicacin:
Desarrollar una aplicacin basada en la arquitectura Cliente-Servidor, para la
interaccin del usuario con la aplicacin del administrador a travs de tres
niveles
MVC: Modelo, la interaccin del usuario, Vista que implica todo lo que ve el
usuario, Controlador para el desarrollo de control de lo que ingresa el usuario.
Presentando dos alternativas de solucin al problema para ajustar la curva,
utilizando, regresin lineal, para lo cual, la aplicacin debe permitir al usuario
ingresar los puntos (x,y) en una base de datos MySql.
desarrollar esta problemtica en un diseo que permita solucionar la
problemtica genrica a travs de software que la solucione de forma
independiente. Cada uno de lo software debe ser sobre consola y otro sobre
Swing mediante interfaz grfico. Para el desarrollo de la problemtica se
debern utilizaran mtodos tales como JTable, AbstractTableModel y
DefaultTableModel las cuales le ayudaran a resolver la solucin dos. El objetivo
apoyar el dominio especfico del problema seleccionado, ajustando las curvas
(lineas rectas, que permitan su modelamiento). Cada aplicacin debe manejar
los procesos de actualizacin datos de ajustes, ingresos de los puntos (x,y)
y la aplicacin de la curva ajustada, a distintos casos de la problemtica
observada.
Paso 1: Ejemplos Entrada/Salida:
Entrada > [PROGRAMA] > Salida
15.2,3.3 > [PROGRAMA] > xito al ingresar
11,40 > [PROGRAMA] > xito al ingresar
2,0,1,5 > [PROGRAMA] > xito al ingresar
Abc,2,4 S > [PROGRAMA] > Error al ingreso
ABC,d-c > [PROGRAMA] > Error al ingreso
1-2,1-3 > [PROGRAMA] > Error al ingreso
@1# > [PROGRAMA] > Error al ingreso
12.1,11.2 > [PROGRAMA] > Error al ingreso
Solucin de aplicacin swing
Primero pedimos el nombre de la tabla para posteriormente ingresar a dicha
tabla para rellenar un jtable despus llamamos a un mtodo calcular para
obtener los clculos a,b,R.
Dicho mtodo es el siguiente.
public void calculo(){ double promedio_x=0,promedio_y=0,suma_x=0,suma_y=0,suma_x_e_y=0; double x_menos_promedio_x[]=new double[contador]; double y_menos_promedio_y[]=new double[contador]; for (Iterator datos= lista.iterator(); datos.hasNext();){ x_e_y e= datos.next(); suma_x+=e.getX(); suma_y+=e.getY(); } promedio_x=suma_x/contador; promedio_y=suma_y/contador;
Diagrama de clases.
Diagrama de flujos Swing
Modelo de la base de datos.
Solucin de aplicacin por consola
Primero para facilitarnos los clculos elaboramos una clase en que solo sacara
los clculos, lo que nos facilitaba la programacin ya que solo debamos
pasarle como parmetro los puntos x e y.
Realizamos un mtodo llamado lineal el cual era de tipo void y nos servira para
obtener clculos para a y b.
Unas ves realizado esto nos faltaba la correlacin para lo cual elaboramos otro
mtodo llamado correlacin el cual era de tipo doubl el cual sacaba los
clculos de R y retornaba el resultado de R.
Estos mtodos son los siguientes:
public void lineal() { double pxy, sx, sy, sx2, sy2;
pxy=sx=sy=sx2=sy2=0.0; for(int i=0; i
double pxy, sx2, sy2; pxy=sx2=sy2=0.0;
for(int i=0; i
Cdigo aplicacin Swing.
Class Prueba21.
package prueba2; import com.mysql.jdbc.PreparedStatement; import conexion.conexion; import java.awt.Color; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import java.awt.event.*; import java.sql.ResultSet; import java.util.*; import javax.swing.table.DefaultTableModel; /** * * @author Juan Vergara */ public class Prueba21 implements ActionListener { String tabla;
conexion con; boolean estado; JFrame ventana=new JFrame("Regresion lineal"); int control=0; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; DefaultTableModel modelo; List lista=new ArrayList (); JScrollPane j=new JScrollPane(); JPanel p1= new JPanel(); JPanel p2= new JPanel(); JPanel p3= new JPanel(); int contador=0; String funcion; private JButton consulta; private JLabel jLabel2; private JLabel jLabel3; private JLabel jLabel4; private JTextField texto_a; private JTextField texto_b; private JTextField texto_r; public JPanel panel1(JPanel jPanel1){ jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLabel4 = new JLabel(); texto_r = new JTextField(); texto_b = new JTextField(); jLabel3 = new JLabel(); jLabel2 = new JLabel(); texto_a = new JTextField(); consulta = new JButton(); jPanel1.setLayout(null); jLabel4.setText("R:"); consulta.setText("Calcular"); jLabel3.setText("b: "); jLabel2.setText("a: "); jPanel1.add(consulta); jPanel1.add(jLabel4); jPanel1.add(texto_r); jPanel1.add(texto_b); jPanel1.add(jLabel3); jPanel1.add(jLabel2); jPanel1.add(texto_a); consulta.addActionListener(this); jPanel1.setBackground(Color.white); jPanel1.setBounds(380, 140, 300, 140); texto_a.setBounds(50, 80, 230, 20); texto_r.setBounds(50, 110, 230, 20); consulta.setBounds(20, 10, 130, 23); jLabel3.setBounds(20, 80, 47, 20);
texto_b.setBounds(50, 50, 230, 20); jLabel2.setBounds(20, 50, 47, 14); jLabel4.setBounds(20, 110, 190, 14); return jPanel1; } private JButton eliminar_fila; private JButton eliminar_fila_n; private JTextField fila_ingreso; private JLabel jLabel10; private JLabel jLabel11; private JLabel jLabel9; private JButton guardar_salir; private JLabel jLabel1; private JLabel jLabel8; private JPanel jPanel3; public JPanel panel3(JPanel jPanel3,String e[],Object[][] matriz){ jScrollPane1 = new JScrollPane(); jTable1 = new JTable(); jTable1.setModel(new DefaultTableModel(matriz,e)); modelo=(DefaultTableModel) jTable1.getModel(); jScrollPane1.setViewportView(jTable1); guardar_salir = new JButton(); jLabel1 = new JLabel(); jLabel8 = new JLabel(); jPanel3.setLayout(null); guardar_salir.setText("Salir"); jLabel1.setText("tabla de datos"); jPanel3.add(guardar_salir); jPanel3.add(jLabel1); jPanel3.add(jLabel8); jPanel3.add(jScrollPane1); guardar_salir.addActionListener(this); jTable1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int fila = jTable1.rowAtPoint(e.getPoint()); fila_ingreso.setText(""+fila); } }); jPanel3.setBackground(Color.white); jPanel3.setBounds(0, 0, 690, 450); jLabel1.setBounds(21, 5, 144, 19); jScrollPane1.setBounds(10, 32, 340, 390); jLabel8.setBounds(60, 430, 620, 14); guardar_salir.setBounds(420, 330, 230, 70); return jPanel3;
} Prueba21(String tabla,String funcion) throws SQLException{ this.funcion=funcion; this.tabla=tabla; Object[][] filas= {{null,null}}; String enunciados[]={" x "," y "}; panel3(p1,enunciados,filas); p1.add(panel1(p2)); if(funcion.equals("select")){ llenar_tabla(); final String a=funcion; } ventana.setLayout(null); ventana.add(p1); ventana.setSize(700,500); ventana.setVisible(true); jTable1.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent evt) { control=contador; if(estado) contador++; if(modelo.getValueAt(control ,0)!=null&&modelo.getValueAt(control ,1)!=null){ modelo.addRow(new Object[0]); contador++; } } }); } public void llenar_tabla() throws SQLException{ con=new conexion(); PreparedStatement select= (PreparedStatement) con.getConexionMysql().prepareStatement("" + "select * from "+this.tabla); ResultSet rs = select.executeQuery(); // extract data from the ResultSet while (rs.next()) { modelo.addRow(new Object[0]); modelo.setValueAt(rs.getDouble(2)+"",contador,0); modelo.setValueAt(rs.getDouble(3)+"",contador,1); contador++; estado=true; } if(contador!=0){ contador--; estado=false;
if (fuente==eliminar_fila_n && modelo.getRowCount()!=0){ modelo.removeRow(Integer.parseInt(fila_ingreso.getText())); fila_ingreso.setText(""); contador--; control--; } if (fuente==guardar_salir) { contador++; lista.clear(); generar_listas(); try { insertar(); } catch (SQLException ex) { Logger.getLogger(Prueba21.class.getName()).log(Level.SEVERE, null, ex); } ventana.setVisible(false); } if (fuente==consulta){ texto_a.setText(""); texto_b.setText(""); texto_r.setText(""); contador++; lista.clear(); generar_listas(); if(estado2){ calculo(); lista.clear(); } contador--; } } public void calculo(){ double promedio_x=0,promedio_y=0,suma_x=0,suma_y=0,suma_x_e_y=0; double x_menos_promedio_x[]=new double[contador]; double y_menos_promedio_y[]=new double[contador]; for (Iterator datos= lista.iterator(); datos.hasNext();){ x_e_y e= datos.next(); suma_x+=e.getX(); suma_y+=e.getY(); } promedio_x=suma_x/contador; promedio_y=suma_y/contador; System.out.println("prox"+promedio_x); System.out.println("proy"+promedio_y);
*/ public final class opciones_de_inicio implements ActionListener{ JFrame ventana=new JFrame("programa Regrecion lineal"); JPanel p; opciones_de_inicio(){ ventana.setLayout(null); ventana.setSize(600,250); p=new JPanel(); p.setLayout(null); p.setBackground(Color.white); p.add(boton2); p.add(texto2); p.add(texto); p.add(text); p.setSize(600,250); ventana.add(p); ventana.setResizable(false); ventana.setVisible(true); boton2.addActionListener(this); boton2.setVisible(true); texto2.setVisible(true); boton2.setBounds(410, 79, 144, 23); texto2.setBounds(10, 79, 230, 14); text.setBounds(230, 79, 144, 20); boton2.setText("Aceptar"); texto2.setText("Ingrese Nombre de la tabla"); } JPanel p2=new JPanel(); JLabel texto=new JLabel(); JLabel texto2=new JLabel(); JTextField text=new JTextField(); JButton boton2=new JButton("aceptar"); public static void main(String argc []){ opciones_de_inicio i=new opciones_de_inicio(); } public void crear_tabla(String nombre) throws SQLException{ conexion con=new conexion(); try { PreparedStatement insert1 = (PreparedStatement) con.getConexionMysql().prepareStatement("" + "create table "+nombre + " (id int not null auto_increment primary key ," + " x double not null ," + " y double not null)"); insert1.executeUpdate(); con.closeConexionMysql(); } catch(MySQLSyntaxErrorException e){ JOptionPane.showMessageDialog(null,"la tabla ya existe o el nombre no es valido"
+ "","Error",JOptionPane.ERROR_MESSAGE); } } @Override public void actionPerformed(ActionEvent e) { Object fuente = e.getSource(); if(fuente==boton2){ try { crear_tabla(text.getText()); Prueba21 p=new Prueba21(text.getText(),"insert"); text.setText(""); } catch (SQLException ex) { JOptionPane.showMessageDialog(null,"la base de datos ya existe o el nombre no es valido" + "","Error",JOptionPane.ERROR_MESSAGE); } } } }
Class x_e_y.
package prueba2; public class x_e_y { double x; double y; public x_e_y( double x, double y) { this.x = x; this.y = y; } public double getX() { return x; }
public double getY() { return y; } public void setY(double y) { this.y = y; } }
Cdigo aplicacin por consola
Clase main
java.sql.PreparedStatement; import
java.sql.ResultSet; import
java.sql.SQLException; import
java.sql.Statement; import
java.util.ArrayList; import
java.util.Iterator; import
java.util.Scanner; import
/**
*
* @author alexander
*/
public class Rxxyy {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int a;
Scanner l = new Scanner(System.in);
System.out.println("desea ingresar datos si o no");
String s=l.nextLine();
(s.equalsIgnoreCase("si")){ if
System.out.println("ingrese cantidad de puntos a ingresar");
a = l.nextInt();
double xa[] = new double[a];
double ya[] = new double[a];
System.out.println("ingrese x e y");
(int c = 0; c < a; c++) { for
System.out.println("ingrese x, dato numero: " + (c + 1) + " de un
total de: " + a);
xa[c] = l.nextDouble();
System.out.println("ingrese y, dato numero: " + (c + 1) + " de un
total de: " + a);
ya[c] = l.nextDouble();
}
String info1;
System.out.println("desea calcular regreecion lineal");
System.out.println("SI/NO");
info1 = l.next();
(info1.equalsIgnoreCase("si")) { while
Regresion regresion = new Regresion(xa, ya);
regresion.lineal();
System.out.println("Recta de regresin ");
System.out.println("valor de a es " +
regresion.a);
System.out.println("valor de b es " +
regresion.b);
System.out.println("********************** ");
System.out.println("Indice de correlacin R" +
regresion.correlacion());
info1="no";
}
String info;
System.out.println("desea guardar en la base de datos");
System.out.println("SI/NO");
info = l.nextLine();
(info.equalsIgnoreCase("si")){ if
ConexionMysql conMysql = new ConexionMysql();
{ try
String cpersona = "insert into rxy values(?,?)";
(int c = 0; c < a; c++) { for
PreparedStatement ps =
conMysql.getConexionMysql().prepareStatement(cpersona);
ps.setDouble(1, xa[c]);
ps.setDouble(2, ya[c]);
int g = ps.executeUpdate();
}
} (SQLException e) { catch
System.out.println("Error en la consulta a nuestra Base de Datos:
" + e.getMessage());
} { finally
conMysql.closeConexionMysql();
}
}
} else
{
int cont=0;
ConexionMysql conMysql = new ConexionMysql();
{ try
Statement st = conMysql.getConexionMysql().createStatement();
ResultSet rs = st.executeQuery("select * from rxy");
(rs.next()) { while
//guardamos en un arraylist del tipo personas los registros
de la tabla personas//
//lista_puntos.add(new personas(rs.getString("rut"),
rs.getString("nombre"), rs.getInt("edad")));
cont++;
//mostramos los registros de la tabla persona//
}
Double[] dx=new Double[cont];
Double[] dy=new Double[cont];
int in=0;
int ina=0;
ArrayList listax = new ArrayList();
ArrayList listay = new ArrayList();
Statement sta = conMysql.getConexionMysql().createStatement();
ResultSet rst = sta.executeQuery("select * from rxy");
(rst.next()) { while
listax.add(rs.getDouble("x"));
listay.add(rs.getDouble("y"));
//dx[in]=Double.parseDouble(rst.getString(1));
// dy[in]=Double.parseDouble(rst.getString(2));
// in++;
}
Iterator itx = listax.iterator();
Iterator ity = listay.iterator();
(itx.hasNext()) while
{
dx[in]=listax.get(in);
in++;
}
(ity.hasNext()) while
{
dy[ina]=listax.get(ina);
ina++;
}
System.out.println("obteniendo regrecion lineal desde la base de
datos");
Regresion reg = new Regresion(dx, dy);
reg.lineal();
System.out.println("Recta de regresin ");
System.out.println("valor de a es " + reg.a);
System.out.println("valor de b es " + reg.b);
System.out.println("********************** ");
System.out.println("Indice de correlacin R" +
reg.correlacion());
} (SQLException e) { catch
System.out.println("Error en la consulta a nuestra Base de Datos:
" + e.getMessage());
} { finally
conMysql.closeConexionMysql();
}
}
}
}
Clase regrecion
package rxxyy;
/**
*
* @author alexander
*/
public class Regresion {
private double[] x;
private double[] y;
private int n; //nmero de datos
public double a, b; //pendiente y ordenada en el origen
public Regresion(double[] x, double[] y) {
this.x=x;
this.y=y;
n=x.length; //nmero de datos
}
public void lineal(){
double pxy, sx, sy, sx2, sy2;
pxy=sx=sy=sx2=sy2=0.0;
(int i=0; i
b=(n*pxy-sx*sy)/(n*sx2-sx*sx);
a=(sy-b*sx)/n;
}
public double correlacion(){
//valores medios
double suma=0.0;
(int i=0; i
Clase conexin
package rxxyy;
com.mysql.jdbc.Connection; import
java.sql.DriverManager; import
java.sql.SQLException; import
public class ConexionMysql {
private Connection CnxMysql;
public ConexionMysql() {
this.CnxMysql = conectar();
}
private Connection conectar() {
{ try
// Inicializar y registrar el Driver
Class.forName("com.mysql.jdbc.Driver");
// linea en donde se concreta la conexin con la Base de Datos.
Connection conMysql =
(Connection) DriverManager.getConnection(
"jdbc:mysql://db.inf.uct.cl/fcardenas2011",
"fcardenas2011",
"fc6543as");
System.out.println("conectado a Mysql.");
return conMysql;
} (Exception ex) { catch
// Si excurre algn Error, al intentar la conexin se ejecutar
este ambito.
System.out.println("Error ConexionMysql.conectar() "
+ "no se pudo establecer la conexion: \n"
+ex.getMessage());
return null;
}
}//fin del metodo conectar
public Connection getConexionMysql() {
return this.CnxMysql;
}
public void closeConexionMysql() {
{ try
// System.out.println("desconectado de MYSQL.");
this.CnxMysql.close();
} (SQLException ex) { catch
System.out.println("Error ConexionMysql.closeConexionMysql() \n"
+ex.getMessage());
}
}
}
Capturas:
Aplicacin Swing.
Programa en Consola:
Conclusiones
La aplicacin basada en la arquitectura Cliente-Servidor, el grupo desarrollo
una solucin para poder lograr los objetivos planteados logrando conocer y
operar satisfactoriamente sobre la arquitectura cliente-servidor. Utilizando los
elementos claves para el desarrollo de este, presentando soluciones
satisfactorias para cumplir con lo desarrollado anteriormente a travs de la
problemtica planteada, siendo estos objetivos alcanzados satisfactoriamente
con la ayuda de diferentes programas (NetBean, MYSQL), teniendo una
relacin e interaccin del usuario y la aplicacin.