lunes, 28 de septiembre de 2009

R: Triángulo de Pascal

El presente capítulo tratará sobre: El Triángulo de Pascal, usando como herramienta el lenguaje R.

Lo que se pretende es diseñar una función que devuelva los elementos de dicho triángulo, pero antes, como suele ser habitual en esta sección, una breve reseña a la historia.

El Triángulo de Pascal debe su nombre al filósofo y matemático Blaise Pascal (1623-1662). Pero como suele ser habitual en estos menesteres matemáticos, su origen es muy anterior.

Las referencias datan del siglo XII en China. De hecho, algunas de sus propiedades ya fueron estudiadas por el matemático chino Yang Hui (siglo XIII), así como el persa Omar Khayyam (siglo XII).

En fin, dicha estructura es muy anterior a Pascal y ya fue, y sigue siendo, estudiada en la zona Oriental, siendo China el país de referencia.

Su construcción es sencilla, se empieza desde la cúspide hacia abajo. El primer elemento es el número 1, formando la fila 0.

La fila 1 está formada por dos elementos, ambos también el número 1. A partir de aquí, la construcción es toma el siguiente cariz: Cada fila, presenta un elemento más que la fila anterior.

El elemento primero y último de cada una, siempre será el número 1, y cada elemento interior será el número resultado de sumar los dos elementos que se sitúan encima de él y adyacentes en la fila superior.

Dicen que un dibujo vale más que mil palabras y creo, que en este caso, es verdad, así qué, este el el Triángulo de Pascal:


Fácil, ¿no?, pues la misión de este capítulo es desarrollar una función, en lenguaje R, que devuelva los elementos del Triángulo de Pascal. El número de filas a mostrar será el elemento que deberá definir el usuario.

El nombre de la función será: TrianguloPascal y tendrá un parámetro de entrada llamado filas y devolverá por pantalla de consola, los elementos de dicha estructura.

La función en sí, es la siguiente:

#######################################################################
#
# Este archivo es propiedad intelectual del blog Aqueronte,
# cuya dirección web, es la siguiente:
#
# http://unbarquero.blogspot.com/
#
# Se permite cualquier modificación del archivo siempre y cuando
# se mantenga la autoría del autor.
#
# El autor no se responsabiliza de las consecuencias que pueda
# ocasionar éste código debido a un uso inadecuado del mismo.
#
#######################################################################
#
# Función: TrianguloPascal Versión: vs0.0
# Fecha: 23/09/09 R Versión: 2.9.2
#
# Autor: Manuel Caballero
# Compañía: Hades
#
#######################################################################
#
# Notas: Esta devuelve por pantalla el triángulo de Pascal cuya
# longitud es definida previamente por el usuario.
#
# Datos de Entrada:
# · filas: Dimensión del triángulo de Pascal.
#
#######################################################################
TrianguloPascal <- function(filas){
aux <- matrix(nrow=filas+1,ncol=filas)

for (j in 1:filas){
aux[1,j] <- "-"
}

for (i in 1:filas+1){
for (j in 0:filas)
aux[i,j] <- "."
}

for(i in 1:filas+1){
j <- 1
aux[i,j] <- 1
while(i-1 > j){
aux[i,j+1] <- factorial(i-2)/(factorial(j)*(factorial((i-2)-j)))
j <- j+1
}
}

print(data.frame(aux,check.names=F), row.names = FALSE)
}
Comprobamos que funciona de forma correcta:

> TrianguloPascal(10)
1
...2...3.....4....5.......6......7..... 8.....9...10
-
...-....-...... -..... -..........-........-....... -.......-.......-
1
............... .............. .............. ............. .
1...1
... ...... ...... ....... ............. .............. .
1
...2...1............ ....... ..... ........ ............. .
1
...3...3.....1............. ............ .. .......... . .
1
...4...6.....4.....1...... ............... .......... .. .
1
...5...10...10...5......1......................... . .
1
...6...15...20...15....6......1..... ............ .
1
...7...21...35...35....21.....7.....1........... .
1
...8...28...56.. 70....56....28...8.....1... .
1
...9...36...84...126..126..84...36...9...1

Vemos que muestra por consola los elementos del Triángulo de Pascal con un número de diez filas totales definidas por el usuario.

El único inconveniente es que no dibuja exactamente un triángulo equilátero pero aún así, sigue conservando todas las propiedades de la estructura.

Se puede descargar el script TrianguloPascal.r del siguiente enlace:

TrianguloPascal.r
TrianguloPascal.r


Curiosidades de esta estructura:

· Los elementos que contienen el Triángulo de Pascal, coinciden con los números combinatorios, recordemos la expresión matemática combinatoria:



Para obtener cualquier elemento de la estructura, tenemos que tener en cuenta las siguientes asignaciones:

· n Representa el número de fila.
· x Representa la posición de elemento a determinar.

· Otro dato curioso viene por la suma de los elementos de cada fila, se muestra a continuación:

- Fila 0 1
- Fila 1 1 + 1 = 2
- Fila 2 1 + 2 + 1 = 4
- Fila 3 1 + 3 + 3 + 1 = 8
- Fila 4 1 + 4 + 6 + 4 + 1 = 16

Y así sucesivamente, en conclusión, obtenemos:

1, 2, 4, 8, 16, ...

Ni más ni menos que las potencias de 2 acorde a la posición de cada fila:

- Fila 0 20 = 1
- Fila 1 21 = 2
- Fila 2 22 = 4
- Fila 3 23 = 8
- Fila 4 24 = 16

No me podréis negar que no es interesante y sobre todo curioso.

· Y como no, la Sucesión de Fibonacci también está presente en esta estructura, concretamente en al sumar los elementos diagonales:

- Diagonal 1 1
- Diagonal 2 1
- Diagonal 3 1 + 1 = 2
- Diagonal 4 2 + 1 = 3
- Diagonal 5 1 + 3 + 1 = 5
- Diagonal 6 3 + 4 + 1 = 8

Y así sucesivamente, obtendremos dicha, mágica, sucesión

1, 1, 2, 3, 4, 8, ...

En fin, mi pequeño homenaje a esta grandiosa e interesante estructura llamada Triángulo de Pascal, la cual, posee muchas mas curiosidades de las aquí mencionadas tales cómo: Simetría, Diagonales de Números Triangulares, Tetaédricos, etc.

1 comentarios:

Juan Carlos Guilarte Rangel dijo...

Si "&(d, p)" representa a un elemento o número cualquiera del triángulo de Pascal ubicado en la p-esima posición de la d-esima diagonal entonces el mismo viene dado por la expresión siguiente:
&(d, p)=(d+p-2)!÷(d-1)!×(p-1)!
Dicha fórmula permite explicar cada una de las propiedades y curiosidades asociadas al triángulo aritmético.