Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

miércoles, 24 de junio de 2015

El Año del Juicio Final. Cálculo probabilístico.

En este artículo trataremos de calcular el tiempo que le queda a la humanidad para la extinción. En base al "Principio Antrópico" y aplicándolo adecuadamente se puede hacer una predicción probabilística (no exacta) del año de extinción de nuestra especie tal y como la conocemos.
El argumento principal para este cálculo es que si la raza humana fuera a extenderse durante millones de años, la probabilidad de que hayamos nacido en este momento sería muchísimo más pequeña que si no fuera a durar mucho tiempo.


* Formula Principio Antrópico (Juicio Final versión 1):

   pa = población antigua (personas que han existido)
pppoblación presente (personas vivas actualmente)
pfpoblación futura (previsión personas vivas en el año "x")
es = esperanza de vida (en años)
EXP = expectativa de extinción


   EXP 1 - [(pa + pp) - 1 / (pa + pp)] ^ {(pf - pp) / es) * [(pp + pf) / 2]}




En modo de diseño generamos la siguiente interfaz gráfica:









































Código (JuicioFinal2.java):

package juiciofinal2;

import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class JucioFinal2 extends javax.swing.JFrame {

    Calendar fecha = new GregorianCalendar();

    double pmuerta;
    double pviva;
    double ptotal = pmuerta + pviva;

    double pmax;
    double esp;

    double presente;
    double futuro;
    double expectativa;

    public JucioFinal2() {
        initComponents();
        this.setLocationRelativeTo(null);//centrar
    }
    
    // Código generado automáticamente al crear la interface gráfica en modo de diseño
    private void initComponents() { ...

    private void jSpinnerAñoFuturoStateChanged(javax.swing.event.ChangeEvent evt) { 
        actualitzar();
    }

    private void jButtonCalcularActionPerformed(java.awt.event.ActionEvent evt) {
        actualitzar();
    }

    private void jButtonRestablecerActionPerformed(java.awt.event.ActionEvent evt) {
        jTextFieldMuerta.setText("106500");
        jTextFieldMaxima.setText("11500");
        jTextFieldEsperanza.setText("72");
        jTextFieldAñoPresente.setText("" + fecha.get(Calendar.YEAR));
        jSpinnerAñoFuturo.setValue(2100);
        jTextFieldExpectativa.setText("");
    }                                                  

    private void jButtonCerrarActionPerformed(java.awt.event.ActionEvent evt) {   
        System.exit(0);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JucioFinal2().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButtonCalcular;
    private javax.swing.JButton jButtonCerrar;
    private javax.swing.JButton jButtonRestablecer;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel17;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel19;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel22;
    private javax.swing.JLabel jLabel23;
    private javax.swing.JLabel jLabel25;
    private javax.swing.JLabel jLabel26;
    private javax.swing.JLabel jLabel27;
    private javax.swing.JLabel jLabel28;
    private javax.swing.JLabel jLabel29;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JSeparator jSeparator3;
    private javax.swing.JSpinner jSpinnerAñoFuturo;
    private javax.swing.JTextField jTextFieldAñoPresente;
    private javax.swing.JTextField jTextFieldEsperanza;
    private javax.swing.JTextField jTextFieldExpectativa;
    private javax.swing.JTextField jTextFieldMaxima;
    private javax.swing.JTextField jTextFieldMuerta;
    // End of variables declaration                   

    private void actualitzar() {
       
        DecimalFormat df = new DecimalFormat("#.##");

        pmuerta = Double.parseDouble(jTextFieldMuerta.getText());
        pviva = 6500;
        ptotal = pmuerta + pviva;

        pmax = Double.parseDouble(jTextFieldMaxima.getText());
        esp = Double.parseDouble(jTextFieldEsperanza.getText());
        presente = Double.parseDouble(jTextFieldAñoPresente.getText());
        futuro = Double.parseDouble(jSpinnerAñoFuturo.getValue().toString());

        double potencia = ((futuro - presente) / esp) * pmax;
        double expectativa = 1 - (Math.pow((ptotal - 1) / ptotal, potencia));
        expectativa *= 100;
        jTextFieldExpectativa.setText(df.format(expectativa));

    }
}


No hay comentarios:

Publicar un comentario

Con la tecnología de Blogger.