31
  Informe Regresión lineal Fecha: 24-06-2012 Nombres: Freddy Cárdenas Sebastián Muñoz Juan Carlos Vergara

Reg Lineal

Embed Size (px)

DESCRIPTION

regresionlineal

Citation preview

  • 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;

  • System.out.println("prox"+promedio_x); System.out.println("proy"+promedio_y); int i=0; for (Iterator datos= lista.iterator(); datos.hasNext();){ x_e_y e= datos.next(); suma_x_e_y+=(e.getX()-promedio_x)*(e.getY()-promedio_y); x_menos_promedio_x[i]=(e.getX()-promedio_x); y_menos_promedio_y[i]=(e.getY()-promedio_y); i++; } double suma_x_cuadrado=0,suma_y_cuadrado=0; System.out.println("sumassss"+suma_x_e_y); for(int jj=0;jj
  • 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;

  • } modelo.removeRow(modelo.getRowCount()-1); con.closeConexionMysql(); } public void insertar() throws SQLException{ con=new conexion(); PreparedStatement delete= (PreparedStatement) con.getConexionMysql().prepareStatement("" + "delete from "+this.tabla+";"); delete.executeUpdate(); PreparedStatement insert= (PreparedStatement) con.getConexionMysql().prepareStatement("" +"INSERT INTO "+this.tabla+"(x,y)values(?,?);"); for (Iterator datos= lista.iterator(); datos.hasNext();){ x_e_y e= datos.next(); insert.setDouble(1,e.getX()); insert.setDouble(2,e.getY()); insert.executeUpdate(); } } boolean estado2=true; public void generar_listas(){ for(int filas=0;filas
  • 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);

  • int i=0; for (Iterator datos= lista.iterator(); datos.hasNext();){ x_e_y e= datos.next(); suma_x_e_y+=(e.getX()-promedio_x)*(e.getY()-promedio_y); x_menos_promedio_x[i]=(e.getX()-promedio_x); y_menos_promedio_y[i]=(e.getY()-promedio_y); i++; } double suma_x_cuadrado=0,suma_y_cuadrado=0; System.out.println("sumassss"+suma_x_e_y); for(int jj=0;jj
  • */ 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.