¿Cae tu compleaños siempre entre semana? Las matemáticas del calendario

17/05/2017 3 comentarios
Menear

Hablando con mi mujer me comentó que su cumpleaños había caído varias veces en fin de semana. Como somos gente inquieta y nos gusta analizarlo todo estuvimos discutiendo durante un rato si sería casualidad, si hay fechas que caen con más probabilidad en un día u otro o si hay algún sesgo psicológico que nos haga recordar unos eventos más que otros. Lo último se escapa del objetivo de este blog, pero sin duda la primera pregunta representa un problema matemático bien definido. Así que pongámonos manos a la obra.

El Calendario Gregoriano

Empecemos con un poco de historia. El problema del calendario es un problema casi tan antiguo como la humanidad. En el tiempo actual el tema de cómo hacer un buen calendario puede parecer una mera curiosidad, pero durante la mayor parte de nuestra existencia fue un problema de supervivencia. Si vives en el entorno natural, sin iphones ni supermercados, tienes que saber cuándo se aproxima el invierno. Hay que decidir cuándo plantar y cuándo recolectar, cuándo van a migrar o invernar los animales o cuándo tus escasas reservas ya se están agotando.

Esto llevó a nuestros antepasados a mirar a las estrellas y la posición del Sol, y así intentar predecir estos eventos. Así nació la astronomía, y con ella la ciencia. Tampoco era fácil llevar la cuenta de los días que iban pasado, por lo que se utilizó la ingeniosa técnica de construir monumentos que preservaran la información. Uno de los más famosos es Stonehenge, que fue construido entre el año 2000 y 3000 a.c. en Inglaterra. Este monumento tenía interés funerario, pero al parecer también astronómico. En los días más relevantes del calendario, como el solsticio de invierno, el Sol y la Luna salen por puntos concretos del monumento, permitiendo así a sus constructores identificar en qué momento del año se encontraban.

Stonehenge 

Con el desarrollo de las matemáticas y la escritura se hizo obvia la necesidad de un calendario. Ya que el año tenía un número de días que parecía constante sería cuestión de determinarlo y simplemente contar. El primer calendario que se extendió a nivel mundial lo instauró Julio César en el año 46 a.c., y se denominó Calendario Juliano. Este calendario constaba de años de 365 días, divididos en 12 meses, y añadía un día bisiesto cada 4 años. Así el año tenía 365,25 días. Este calendario duró unos 1600 años sin modificación. En el siglo XVI se realizaron dos estudios que mostraron que este calendario tenía un error imperdonable. Los equinoccios, y por ende el resto de los días, se retrasaban aproximadamente tres días cada 400 años. Puede parecer poco, pero los efectos acumulativos terminan por notarse. Así, el equinoccio de primavera del año 325 ocurrió el 1 de marzo. En el año 1582 ese mismo equinoccio tuvo lugar el 11 de marzo. Como la pascua dependía de ese evento el Papa Gregorio consideró esto relevante e impuso un nuevo calendario. Este es el calendario vigente en la actualidad y se denomina Calendario Gregoriano.

El Calendario Gregoriano solucionó el problema de los equinoccios modificando la regla de los años bisiestos. En el Calendario Juliano hay un año bisiesto cada 4 años, por lo que la duración media del año es de 365,25 días. Ocurre que el año solar tiene realmente una duración de 365,242189 días. Esta es una diferencia pequeña en torno al 2 % (11 minutos al año) pero que se acumula con el tiempo y da lugar al desfase. El Calendario Gregoriano  modifica la regla del bisiesto haciendo que sean cada cuatro años siempre que el año no sea múltiplo de 100. A esta regla se la añade otra excepción, los múltiplos de 400 sí son bisiestos. Esto hace que el calendario Gregoriano tenga un año de 365,2425 dias. Lo cual significa que se retrasa sólo un 0,008 % (26 segundos al año).

Veamos un ejemplo, el año 2000 sí fue bisiesto, ya que es múltiplo de 400 pero el año 2100 no lo será por ser divisible entre 100 pero no entre 400. Esto lo podemos comprobar con un generador online de calendarios

 

Calendario_2000

 

Calendario 2100 

 

La fórmula de Zeller 

Es evidente que podemos calcular el día de la semana que correspondió a cualquier día de un año sin mucha dificultad. El calendario es algo fijo, así que simplemente contando podemos retroceder o avanzar en el tiempo hasta el año que queramos. Esto es una tarea un poco tediosa, pero factible. Afortunadamente, no necesitamos pasar por ese largo proceso ya que existe una fórmula para calcular directamente el día de la semana de una fecha concreta.

Esta fórmula se la debemos al matemático alemán German Zeller, y aunque es un poco compleja es muy útil. La fórmula es:

 

Fórmula

Donde el significado de las letras es:

- h: Día de la semana (0-> Sábado, 1-> Domingo, 2-> Lunes...)

- q: Día del mes.

- m: Mes. Enero corresponde al mes 13 del año anterior, Febrero al 14 y el resto siguen la notación habitual (Marzo = 3, Abril = 4,...).

- K: Año dentro del siglo (Ej: Al año 102 le correspondería K = 2).

- J: Es el siglo en el que nos encontramos si los años hubieran comenzado a contarse con cero (Ejemplo: Al año 2000 le corresponder J = 20).

Finalmente, hay que tener en cuenta que las divisiones sólo toman la parte entera (los decimales se eliminan) y que mod es la operación que devuelve el resto de una operación. Veamos un ejemplo: yo nací el 7 de junio de 1980. En este caso los parámetros son: q = 7, m = 6, K = 80, J = 20. Si sustituimos estos datos en la fórmula de Zeller obtenemos h = 0, sábado.

 

Estadística de cumpleaños

Armados con la fórmula de Zeller es fácil retomar la pregunta inicial. Un mismo día del año ¿se distribuye uniformemente entre los días de la semana? Vamos a tomar el mío como referencia. Yo nací en el año 1980. Dado que soy una persona sana espero vivir 100 años por lo menos, así que veamos la distribución semanal de cumpleaños entre 1980 y 2080.

En la siguiente tabla se representan cuántos cumpleaños tendré en cada día de la semana. 

Tabla 1 

Se aprecia una pequeña variación, de 14 a 15 días, pero eso es algo normal ya que no viviré eternamente. Podemos pensar que es una cuestión de la fecha, y que alguna otra cambie apreciablemente. Si probamos por ejemplo una fecha señalada como el 25 de diciembre durante un par de siglos (de 1900 a 2100). En ese caso obtenemos

Tabla 2

 

Apéndice: Código

Por si alguien tiene interés en realizar sus propios cálculos aquí os dejo el código en C que he creado. 

 

// Programa que genera la distribución de probabilidad de días de la semana de una fecha dada 

# include

# include

# define Min 1900

# define Max 2100

# define Day 25

# define Month 12

 

int DiaSemana(int day,int month, int year);

int main ()

{

    int i,j,k;

    double x,y,z;

    int count[7];

    double est[7];

    FILE *f1;

 

    for (i=0;i<7;i++) count[i]=0;

    f1=fopen("est.txt","w");

    for (i=Min;i<=Max;i++)

    {

        j=DiaSemana(Day,Month,i);

        count[j]++;

    }

    for (i=0;i<7;i++) est[i]=count[i]/(1.*(Max-Min));

    for (i=0;i<7;i++) fprintf(f1,"%i\t%i\n",i,count[i]);

    fclose(f1); 

}

 

int DiaSemana(int day,int month, int year) 

//To find the day of week.

{

    int h,q,m,k,j;

    if(month==1)

    {

        month = 13;

        year--;

    }

    elseif (month==2)

    {

        month = 14;

        year--;

    }

    q = day;

    m = month;

    k = year % 100;

    j = year / 100;

    h = q + 13*(m+1)/5 + k + k/4 + j/4 + 5*j;

    h = h % 7;

    

    return h;

}