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.

Archivo del blog

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

    }
}


Con la tecnología de Blogger.