You are on page 1of 14

Función generadora

De Wikipedia, la enciclopedia libre


(Redirigido desde Funciones generadoras)
Saltar a navegación, búsqueda

En matemáticas, una función generadora o función generatriz es una serie formal de


potencias cuyos coeficientes codifican información sobre una sucesión an cuyo índice
corre sobre los enteros no negativos.

Hay varios tipos de funciones generadoras: funciones generadoras ordinarias,


funciones generadoras exponenciales, la serie de Lambert, la serie de Bell y la serie
de Dirichlet; de las cuales abajo se ofrecen definiciones y ejemplos. Cada sucesión
tiene una función generadora de cierto tipo. El tipo de función generadora que es
apropiada en un contexto dado depende de la naturaleza de la sucesión y los detalles del
problema que se analiza.

Las funciones generadoras son expresiones cerradas en un argumento formal x. A veces,


una función generadora se «evalúa» en un valor específico x=a pero hay que tener en
cuenta que las funciones generadoras son series formales de potencias, por lo que no se
considera ni se analiza el problema de la convergencia en todos los valores de x.

Por lo mismo es importante observar que las funciones generadoras no son realmente
funciones en en el sentido usual de ser mapeos entre un dominio y un codominio; el
nombre es únicamente el resultado del desarrollo histórico de su estudio.

Una función generadora es una cuerda de tender en la que colgamos una sucesión de números
para mostrarla
Herbert Wilf

Contenido
[ocultar]

 1 Función generadora ordinaria


 2 Aplicaciones
o 2.1 Determinación de la función generadora a partir de una recurrencia
o 2.2 Ejemplo de aplicación práctica
 3 Otras funciones generadoras
o 3.1 Función generadora exponencial
o 3.2 Función generadora de Poisson
o 3.3 Serie de Lambert
o 3.4 Serie de Bell
o 3.5 Función generadora de la serie de Dirichlet
o 3.6 Funciones generadoras de sucesiones polinómicas
 4 Ejemplos
o 4.1 Funciones generadoras ordinarias
o 4.2 Función generadora exponencial
o 4.3 Serie de Bell
o 4.4 Función generadora de la serie de Dirichlet
 5 Aplicaciones
 6 Otras funciones generadoras
 7 Véase también
 8 Referencias
 9 Notas
 10 Enlaces externos

[editar] Función generadora ordinaria

La función generadora ordinaria de una sucesión (an) = a0, a1, a2, a3 ... se define como

Es común usar la expresión función generadora sin mayor calificativo, para referirse a
este tipo de función.

Ejemplo.
La sucesión de Fibonacci definida por la recurrencia

es la sucesión 0,1,1,2,3,5,8,13,21,...
Su función generadora es

puesto que el desarrollo en serie de potencias de tal función es

y los coeficientes de tal desarrollo son precisamente


0,1,1,2,3,5,8,13,...

Es posible definir funciones generadoras sobre varias variables. Por ejemplo, la función
generadora ordinaria en 2 variables de (am,n) donde n y m son índices que recorren los
enteros no negativos, es
[editar] Aplicaciones
Si bien las funciones generadoras son una herramienta usada ampliamente en
combinatoria, no existen métodos detallados que proporcionen solución a los problemas
en cada situación. Sin embargo existen ideas generales que pueden ser modificadas y
adaptadas en las diferentes situaciones que se presentan. A continuación se ilustran
varios usos de las funciones generadoras junto con la idea general que se está usando.

[editar] Determinación de la función generadora a partir de una


recurrencia

En esta situación lo que se hace es multiplicar ambos lados de la recurrencia por x^n y
sumar sobre todos los índices. Después se efectúan transformaciones para que la
igualdad entre sumas que se obtiene se convierta en una ecuación que involucra la
función generadora y se procede a resolverla.

Como ilustración, considere la recurrencia

que da origen a la sucesión (an)=1,5,17,53,161,485,1457...

Multiplicando ambos lados por xn y sumando sobre todos los valores de n se obtiene:

El lado izquierdo es casi la función generadora, pero los índices están desfasados. Pero
notando que

se deduce que el lado izquierdo es

El lado derecho se desarrolla como

Al final, se aplicó la fórmula para sumar una serie geométrica:


.

Igualando ambas simplificaciones, se obtiene la ecuación

que al resolverse arroja por resultado

[editar] Ejemplo de aplicación práctica

Si cn es el número de formas en que se puede pagar n pesos usando monedas de 1, 2 y 5


pesos, entonces la función generadora de la sucesión (cn) es

ya que el coeficiente de xn es igual al número de formas de escoger a, b, c tales que

y que corresponen a usar a monedas de 1 peso, b monedas de 2 pesos y c monedas de 5


pesos.

La aplicación de la fórmula de Taylor es demasiado compleja en este caso, por lo que


aplicaremos el siguiente artificio debido a Ronald Graham.

Cada uno de los denominadores (1-x), (1-x2) y (1-x5) son divisores de (1-x10), por lo que
podemos reescribir

para un A(x) en donde:

Finalmente, desarrollando la función generadora


obtenemos

De la expresión anterior se puede leer con detalle el valor exacto del coeficiente de xn,
es decir, el número cn de formas de pagar n pesos con monedas de 1,2 y 5 pesos. Por
ejemplo, el número de formas de pagar 77 pesos se obtiene calculando el término
correspondiente a x77:

y se concluye que hay 328 formas de pagar 77 pesos con monedas de 1, 2 o 5 pesos.

[editar] Otras funciones generadoras


[editar] Función generadora exponencial

La función generadora exponencial de una sucesión an es

[editar] Función generadora de Poisson

La función generadora de Poisson de una sucesión an es

[editar] Serie de Lambert

La serie de Lambert de una sucesión an es

Nótese que en una serie de Lambert, el índice n comienza en el 1, no en 0.

[editar] Serie de Bell


La serie de Bell de una función aritmética f(n) y un número primo p es

[editar] Función generadora de la serie de Dirichlet

Las series de Dirichlet a menudo se clasifican como funciones generadoras, aunque no


son estrictamente series formales de potencias. La función generadora de la serie de
Dirichlet de una sucesión an es

La función generadora de la serie de Dirichlet es especialmente útil cuando an es una


función multiplicativa, cuando tiene una expresión de producto de Euler en términos de
la serie de Bell de la función

Si an es un carácter de Dirichlet, entonces su función generadora de la serie de Dirichlet


se llama serie L de Dirichlet.

[editar] Funciones generadoras de sucesiones polinómicas

El concepto de funciones generadoras puede extenderse a sucesiones de otros objetos.


Así, por ejemplo, las sucesiones polinómicas de tipo binomial se generan por

donde pn(x) es una sucesión de polinomios y f(t) es una función de cierta forma. Las
sucesiones de Sheffer se generan de modo similar. Véase el artículo principal polinomio
generalizado de Appell para más información.

[editar] Ejemplos
Artículo principal: Ejemplos de funciones generadoras

Cuando se trabaja con funciones generadoras, es importante reconocer las expresiones


de algunas sucesiones fundamentales.

[editar] Funciones generadoras ordinarias

La más fundamental de todas es la sucesión constante 1,1,1,1,..., cuya función


generadora ordinaria es
La expresión de la derecha se puede justificar multiplicando la serie de potencias de la
izquierda por X − 1, y comprobando que su resultado sea la serie constante de potencias
1; en otras palabras, que todos los coeficientes desaparezcan excepto el de X0. (Por lo
demás, no puede haber otra serie de potencias con esta propiedad, ya que un anillo de
series de potencias como Z''X'' es un dominio de integridad.) El lado de la derecha, por
lo tanto, designa la inversa de X − 1 en el anillo de series de potencias.

Fácilmente se derivan para ésta expresiones para la generación ordinaria de otras


sucesiones. Por ejemplo, para la serie geométrica 1,a,a2,a3,... para cada constante a se
tiene

y en particular

También se pueden introducir «brechas» regulares en la sucesión sustituyendo X por


alguna potencia de X; así, por ejemplo, para la sucesión1,0,1,0,1,0,1,0,.... se obtiene la
función generadora

Calculando el cuadrado de la función generadora inicial, fácilmente se ve que los


coeficientes forman la sucesión 1,2,3,4,5,..., así que se tiene

y el cubo tiene como coeficientes los números triangulares 1,3,6,10,15,21,... cuyo


término n es el coeficiente binomial , de manera que
Dado que , se puede encontrar la
función generadora ordinaria para la sucesión 0,1,4,9,16,... de números cuadrados por
combinación lineal de las sucesiones precedentes;

[editar] Función generadora exponencial

[editar] Serie de Bell

[editar] Función generadora de la serie de Dirichlet

[editar] Aplicaciones
Las funciones generadoras se emplean para

 encontrar una forma cerrada para una sucesión dada en una relación de
recurrencia. Por ejemplo, considérense los números de Fibonacci;
 encontrar relaciones de recurrencia para sucesiones: la forma de una función
generadora puede sugerir una fórmula de recurrencia;
 encontrar relaciones entre sucesiones: si las funciones generadoras de dos
sucesiones tienen una forma similar, entonces las propias sucesiones
probablemente están relacionadas;
 explorar el comportamiento asintótico de las sucesiones;
 demostrar identidades que implican sucesiones;
 resolver problemas de enumeración en combinatoria;
 evaluar sumas infinitas.
TRADUCCION BIDIRECCIONAL

Nueva línea
De Wikipedia, la enciclopedia libre
Saltar a navegación, búsqueda

En informática, nueva línea es un carácter especial, o secuencia de caracteres, que


indica el final de una línea de texto y el paso a la siguiente. Se le llama así porque el
carácter a la derecha del nueva línea aparecerá en la línea de debajo de los caracteres
que había a la izquierda, por tanto en una línea nueva.

La codificación del carácter nueva línea no es la misma en todas las arquitecturas ni


sistemas operativos, cosa que puede dar problemas cuando se intercambian datos entre
ordenadores.

Contenido
[ocultar]

 1 ¿Terminador o separador?
 2 Representaciones
 3 Protocolos de red
 4 Unicode
 5 Historia
 6 N.l. en lenguajes de programación
 7 Problemas comunes
 8 Utilidades de conversión
 9 Véase también

[editar] ¿Terminador o separador?


Aún se discute si el carácter de nueva línea debería terminar o separar las líneas.

Si se usa como separador, un texto con las líneas A, B, y C quedaría grabado así
(representando el carácter de nueva línea con \n):

A \n B \n C

Entonces, la última línea (C) no tiene el código de nueva línea al final. Este
comportamiento está poco recomendado, y algunos programas tienen problemas
procesando la última línea de un fichero si no acaba con una nueva línea, así que la
convención general es tratar \n como terminador:

A \n B \n C \n
Este cambio puede afectar en el recuento de líneas de un fichero, pero no da problemas
mayores.

[editar] Representaciones
Las aplicaciones y los sistemas operativos normalmente representan el carácter nueva
línea con uno o con dos códigos de control:

 Los sistemas basados en ASCII o en una codificación de caracteres compatible


usan LF (Salto de línea), CR (Retorno de carro), o CRLF (CR seguido de LF):
o LF:     Unix y sistemas tipo Unix, Linux, AIX, Xenix, Mac OS X,
BeOS, Amiga, RISC OS y otros
o CR+LF: CP/M, MP/M, DOS, Microsoft Windows
o CR:     familia Apple II y Mac OS hasta la versión 9
o LF+CR: Las antiguas maquinas de escribir (Nada relacionado con la
informatica, solo es una comparacion)
 Los sistemas EBCDIC, principalmente mainframes de IBM incluyendo a z/OS
(OS/390), i5/OS (OS/400), usan NEL (siguiente línea) como carácter de nueva
línea. EBCDIC también tiene caracteres llamados CR y LF, pero el valor
numérico del LF es distinto al que se usa en ASCII. Otras variantes de EBCDIC
también usan NEL pero con otro valor numérico asignado al carácter.
 VMS usa un sistema de ficheros basado en registros, y guarda los ficheros de
texto con un registro por línea. Por tanto, no se almacena ningún terminador de
línea, aunque el sistema puede añadir terminadores a cada línea de forma
transparente cuando una aplicación accede a los datos.

Los valores numéricos usados normalmente son:

 CR: decimal 13, hexadecimal 0D


 LF: decimal 10, hexadecimal 0A
 NEL: decimal 21, hexadecimal 15

El CRLF no es más que uno detrás de otro, por tanto 0D 0A en hexadecimal.

[editar] Protocolos de red


Muchos protocolos de Internet son textuales, o sea, que envían líneas de texto para
hacer las peticiones (además de usar código binario). Por eso, han de controlar cómo se
tiene que marcar el final de cada línea.

Por tradición, la mayoría han funcionado usando el CRLF en el nivel de protocolo. Por
ejemplo, HTTP, SMTP, FTP e IRC, entre otros. Sin embargo, algunos recomiendan que
las aplicaciones también reconozcan un LF suelto.

En la práctica, hay muchas aplicaciones que acaban usando (incorrectamente) el código


de nueva línea del lenguaje de programación C, que es \n pero tiene un valor que
depende de la plataforma (ver sección N.l. en lenguajes de programación, más abajo).
Esto causa problemas al comunicarse con sistemas que siguen más firmemente el
estándar. Por ejemplo, el agente de correo qmail no acepta mensajes de sistemas que
envíen sólo LF en vez del CRLF requerido. Detalles, en inglés.

[editar] Unicode
El estándar Unicode trata el problema definiendo un gran número de caracteres que las
aplicaciones han de reconocer como terminadores de línea. Según [1]:

 LF:    Salto de línea, u000A


 CR:    Retorno de carro, u000D
 CR+LF: CR seguido por LF
 NEL:   Next Line, u0085
 FF:    Form Feed, u000C
 LS:    Line Separator, u2028
 PS:    Paragraph Separator, u2029

Parece demasiado complicado frente a otras posibles soluciones, como por ejemplo
convertir todos los terminadores a un solo carácter como el LF, pero se ha hecho así para
que la conversión pueda ser bidireccional. Si transformamos un texto EBCDIC
cambiando todos los NEL por LF, y luego lo queremos devolver a EBCDIC, no
sabríamos si los LF de nuestra codificación corresponden a NEL o al propio LF de
EBCDIC.

En Unicode, se puede hacer la transformación sin perder información, de forma que los
programas siguen pudiendo reconocer todos los tipos posibles de terminadores de línea.

[editar] Historia
ASCII se desarrolló simultáneamente por el ISO y el ASA, la organización predecesora
de ANSI. Durante el período 1963-1968, los borradores (pre-estándar) de ISO permitían
usar tanto CRLF como LF para marcar una nueva línea, mientras que los borradores de
ASA permitían sólo CRLF.

El sistema operativo Multics empezó a desarrollarse en 1964 y usaba sólo LF. Unix
siguió la práctica de Multics, y sistemas posteriores siguieron a Unix.

La secuencia CR LF era común en los primeros ordenadores que tenían máquinas de


teletipo (como el ASR33) como dispositivo de terminal. Esta secuencia era necesaria
para posicionar el cabezal de la impresora al principio de una nueva línea. Como esta
operación no se podía hacer en tiempo "1 carácter", había que dividirla en dos
caracteres. A veces era necesario enviar CR LF NUL (siendo NUL el carácter de control
que le manda "no hacer nada"), para asegurarse de que el cabezal de impresión parara
de moverse. Después de que estos sistemas mecánicos desaparecieran, la secuencia CR
LF dejó de tener sentido, pero aun así se ha seguido usando.

Se especula que QDOS (que Microsoft compró y renombró a MS-DOS) adoptó CRLF
para copiar la implementación usada por CP/M. También se dice que CP/M eligió
CR+LF para introducir una clara incompatibilidad con Unix, y así intentar evitar una
posible denuncia de AT&T/Bell, que decía que CP/M violaba el copyright de Unix
porque estaba basado en Unix (según esta teoría). Otros creen que CP/M se parece más
a los sistemas de DEC (como el RSTS/E) que a Unix. En cualquier caso, esta
convención de QDOS pasó al siguiente sistema operativo comercializado por Microsoft,
el Windows, y sigue igual en la actualidad (2006).

[editar] N.l. en lenguajes de programación


Para que sea más fácil crear programas portátiles, los lenguajes de programación
ofrecen abstracciones para no tener que tratar con las pequeñas diferencias entre
sistemas.

El lenguaje de programación C permite usar las secuencias de escape \n (nueva línea) y


\r (retorno de carro). Sin embargo, éstas no son equivalentes a LF y CR en general. El
estándar C sólo garantiza dos cosas:

1. Cada una de estas secuencias se traduce a un número que cabe en un sólo valor
char, y que depende de la implementación.
2. Cuando se escribe a un fichero de tipo texto (en contraposición a un archivo
binario), el \n se traduce de forma transparente al código de nueva línea nativo
del sistema, que puede ser de más de un carácter. Cuando se lee en modo texto,
la secuencia de nueva línea nativa se vuelve a traducir a \n. En modo binario no
se hacen estas traducciones.

En las plataformas Unix, donde nació C, la secuencia que indica nueva línea es el
código ASCII LF (0x0A), así que al principio se hizo que \n tuviera ese valor. Entonces,
como la representación interna y la externa son idénticas, la traducción que hay que
hacer en modo texto es nula, y modo texto y binario se comportan de la misma manera.
Esto ha hecho que muchos programadores ignoren por completo la distinción, cosa que
afecta al software desarrollado, que deja de ser portable.

Otro problema común es usar \n al comunicarse mediante un protocolo de red que


requiere CRLF como terminador. En Windows funcionará, ya que \n se traduce a la
representación nativa, que es precisament CR+LF, pero en Unix produce sólo LF (la
representación nativa del carácter nueva línea). Usar \r\n en modo binario es algo
mejor, pero tampoco funciona en el caso general. Lo correcto es especificar los valores
concretos, en modo binario; por ejemplo, \x0D\x0A

Perl y C++ ofrecen la misma interpretación de '\n' que C. C++ también tiene std::endl,
que es la representación de una nueva línea en el sistema subyacente y vacía el stream
después de emitirlo. Perl tiene un 'binmode' para las traducciones literales a la hora de
leer y escribir en ficheros.

Java también proporciona las secuencias de escape \n y \r, que sí que garantizan que su
valor será 0x0A y 0x0D respectivamente. Para que un programa hecho en Java se vea
correctamente en el notepad, es necesario poner \r\n. Esto cobra vital importancia si se
trata de comunicar nuestro programa en Java con un programa hecho en C mediando un
archivo txt.
Las bibliotecas de entrada/salida de Java no traducen estas secuencias automáticamente,
como en C. En cambio, ofrecen funciones para escribir una línea completa añadiendo el
código nativo de nueva línea, y funciones para leer líneas que aceptan cualquier
secuencia como terminador (CR, LF, CRLF).

[editar] Problemas comunes


Las diferentes representaciones de la nueva línea en los sistemas operativos a veces
causan que al transferir un fichero entre dos ordenadores, se muestre incorrectamente.
Por ejemplo, en condiciones normales, los ficheros creados en sistemas Unix o Apple
Macintosh se verán como una línea larga en Windows. Y a la inversa: los ficheros
creados en un ordenador con Windows se verán extraños con algunos editores, ya que el
CR extra que Unix no necesita se mostrará como un ^M al final de cada línea.

El problema puede ser difícil de detectar si algunos programas manejan bien los
terminadores de línea ajenos pero otros no. Por ejemplo, un compilador puede fallar con
extraños mensajes de error aun cuando el fichero fuente se muestra correcto en la línea
de comandos o un editor de texto.

Los navegadores web suelen poder trabajar con páginas codificadas en cualquier
sistema, y los editores de texto modernos permiten no sólo abrir ficheros de cualquier
codificación, sino convertir entre ellas (ver siguiente sección).

Al transferir ficheros por FTP, el cliente puede convertir automáticamente entre


diferentes codificaciones si está activado el modo de texto. Sin embargo, si se usa este
modo para transferir un archivo binario, el fichero llegará corrupto. Los programas
suelen usar heurísticos para detectar si un fichero es binario o no, pero pueden
equivocarse.

[editar] Utilidades de conversión


En general, un editor de textos es el programa más conveniente para trabajar con
ficheros que usan distintos terminadores de línea. La mayoría de editores modernos
permiten cualquier combinación con los códigos de control ASCII CR y LF. Por
desgracia, el editor predeterminado de Windows (Notepad) no lo permite, aunque
Wordpad sí.

El programa de MS-DOS llamado EDIT también se puede usar para convertir un fichero
que use los terminadores de línea de tipo Unix. Sólo hay que abrir el archivo y volverlo
a grabar.

En muchos sistemas Unix se encuentran las utilidades dos2unix y unix2dos, que


transforman entre las codificaciones CRLF (DOS/Windows) y LF (Unix). Hay varias
versiones de estos programas, con sintaxis algo distintas.

Se puede usar también el programa tr, que sí que está en cualquier sistema tipo Unix, y
que permite hacer cualquier tipo de transformación de caracteres. Para pasar de
DOS/Windows a Unix, eliminar todos los CR:
tr -d '\r' < fichero_entrada > fichero_salida

Y en la otra dirección: se puede convertir de Unix a DOS con sed:

sed -e 's/$/\r/' fichero_entrada > fichero_salida

En sistemas Unix está el comando file, que permite identificar el tipo de terminadores
de línea que usa un fichero

You might also like