Se desarrollan temas de matemáticas con el uso del software Wolfram Mathematica. . germanalvarado@usta.edu.co
martes, 20 de noviembre de 2018
Sucesión Contadora
Dada una sucesión definimos la Sucesión Contadora como la sucesión formada por los enteros positivos que indican el número de bloques de símbolos consecutivos iguales en la sucesión inicial.
Por ejemplo, la sucesión contadora de la sucesión :
a b b a a b b b a b a a b b . . .
es la sucesión :
1 2 2 3 1 1 2 2 . . .
pues empieza con 1 letra a, luego 2 letras b, 2 letras a, 3 letras b y así sucesivamente.
tiene la propiedad que la suma de todos sus términos es la longitud de la lista inicial.
En Mathematica
Definimos la función contadora[ ], que se aplica sobre una lista de números como:
contadora[lis_List] := Module[{j = 1,
con = {}, len = Length[lis]},
Do[Which[n == len - 1 && lis[[n]] == lis[[n + 1]], j++;
AppendTo[con, j], n == len - 1 && lis[[n]] != lis[[n + 1]],
AppendTo[con, {j, 1}], lis[[n]] == lis[[n + 1]], j++,
lis[[n]] != lis[[n + 1]], AppendTo[con, j]; j = 1], {n, len - 1}];
Flatten[con]]
Por ejemplo, dada la sucesión:
lista = {1, 1, 1, 3, 3, 4, 2, 2, 1, 1, 4, 4, 4, 5, 5, 6};
Al aplicarle la función contadora[ ] obtenemos :
contadora[lista]
{3, 2, 1, 2, 2, 3, 2, 1}
que nos indica que lista tiene: 3 elementos iguales al comienzo (en este caso 3 unos), luego un bloque de dos iguales (2 tres), un bloque de uno solo (1 cuatro), y así sucesivamente.
Otro ejemplo, dada la sucesión lista2 formada por combinación de letras y posiblemente también números:
Clear[a, b, c, d]
lista2 = {a, b, b, c, a, a, a, a, 2, d, c, c, c, a};
al aplicarle contadora[ ], obtenemos:
contadora[lista2]
{ }
El problema ocurre pues :
a == a
True
a==b
a==b
Mathematica no establece un valor de verdad para a==b, no decide si es verdadero (true) o falso (False), que es indispensable para poder utilizar el comando Which[ ], pero si los tomamos como caracteres tenemos:
"a" == "a"
True
"a" == "b"
False
por tanto, mejoramos nuestra función contar[ ], haciendo que previamente convierta la lista en una cadena de caracteres y esto lo logramos con el comando ToString aplicado a cada elemento de la lista mediante el comando Map[ ].
contadora[list_List] := Module[{j = 1,
con = {}, len = Length[list]}, lis = Map[ToString, list];
Do[Which[n == len - 1 && lis[[n]] == lis[[n + 1]], j++;
AppendTo[con, j], n == len - 1 && lis[[n]] != lis[[n + 1]],
AppendTo[con, {j, 1}], lis[[n]] == lis[[n + 1]], j++,
lis[[n]] != lis[[n + 1]], AppendTo[con, j]; j = 1], {n, len - 1}];
Flatten[con]]
contadora[lista2]
{1, 2, 1, 4, 1, 1, 3, 1}
Y aún opera bien sobre listas numéricas :
contadora[lista]
{3, 2, 1, 2, 2, 3, 2, 1}
Para aprender más sobre Mathematica ingrese aquí sitio de aprendizaje de Wolfram o en mi website ustamathematica.wixsite.com/basicas
Suscribirse a:
Comentarios de la entrada (Atom)
No hay comentarios.:
Publicar un comentario