7 votos

Expansión en serie de la función iterada

Me gustaría encontrar la expansión de MacLaurin de una función iterada. Encontrar los primeros términos no es difícil, pero no se tarda mucho en que Mathematica se quede sin memoria usando el programa directo.

¿Existe alguna buena manera de encontrar términos con un tiempo y espacio razonables?

Mi problema permite cierta flexibilidad con el número de iteraciones y términos, pero obviamente sería mejor tener más de ambos. El objetivo es poder calcular los términos con cierta precisión sin perderla. Esto sólo funcionará cuando la entrada sea pequeña, por supuesto. Cuantas más iteraciones, más trabajo se hace por iteración, pero menor es el rango al que se aplica; cuantos más términos, mayor es el rango.

De momento estoy utilizando 100 iteraciones y 150 términos (aunque esta función es impar, así que sólo tiene la mitad de coeficientes). La precisión final será de decenas de miles de dígitos, lo que causa algunas dificultades ya que los coeficientes son grandes (del orden de $10^{133}$ ) se iguala a $x^{149}.$

0 votos

Supongo que será bastante complicado. Faa di Bruno para el caso de $f(f(x))$ ya me parece bastante complicado.

0 votos

@J.M.: Efectivamente, tu intuición es acertada. La mía es una fórmula sencilla, antes de la iteración, pero requiere más de dos gigabytes de memoria y cerca de una hora para obtener los términos mencionados.

0 votos

En cualquier caso, probablemente te interesen los polinomios matriciales de Bell. ¿Qué versión de Mathematica ¿estás usando?

5voto

Jorrit Reedijk Puntos 129

No sé realmente sobre los parámetros generales de sus problemas en cuestión; pero posiblemente mi método usando Pari/GP permite un trabajo bastante flexible con hasta 128 (o:por qué no 160) términos de una serie y mi precisión estándar es de 200 dígitos dec. He construido un conjunto de rutinas para expresar la iteración funcional como operaciones matriciales, y un manejo flexible para esas iteraciones (a veces incluso fraccionarias) mediante la diagonalización, si procede. Si me encuentro con series con coeficientes de 1e100, pero los signos son alternativos, entonces puedo -en el mismo entorno- utilizar la suma de Euler para llegar a los resultados de todos modos.
En principio, lo que hago es construir un vector A1 que contenga los coeficientes principales, digamos 128, de una serie de potencias de una función considerada. Luego creo de la misma manera los vectores $\small A_2,A_3, \ldots $ que tiene los coeficientes de las potencias correspondientes de la función, lo que se hace fácilmente mediante una llamada estándar en Pari/Gp, pero también se puede programar fácilmente. Para la potencia zeroth es sólo el vector $\small A_0= [ 1 ,0,0,...] $ hasta la dimensión seleccionada. A continuación, todos los vectores se concatenan en una matriz $\small A = [A_0, A_1,A_2, \ldots A_n] $ (Estas matrices se denominan Carleman-Matrix btw)
Con un vector $V(x)$ que contiene las potencias consecutivas de x (o su valor actual) obtengo entonces por la llamada $ \small V(x) \cdot A $ el resultado $\small V(f(x)) $ hasta una cierta aproximación.

Entonces la composición de funciones se reduce a la multiplicación de matrices $\small V(x) \cdot A \cdot B$ da $\small V(g(f(x))$ si $\small B$ es la matriz de Carleman de la función $\small g(x)$ y la iteración a la matriz-potencia $\small f(f(x)) = V(x) \cdot A^2 $ . En Pari/GP esto se puede hacer hasta cierto punto también con coeficientes simbólicos (pero entonces no con matrices de gran tamaño, digamos hasta 64 x 64 como máximo).

Desgraciadamente no tengo mathematica, así que no puedo ayudar con esto, pero podría publicar mi par de rutinas básicas para mostrar cómo se hace esto en principio.

Hay una gran cantidad de ajustes, el paradero, los tipos de funciones posibles, etc, así que realmente no sé, hasta qué punto todo esto es significativo para su problema actual en absoluto.

[Con un pequeño conjunto de matrices básicas y el concepto de descomposición matricial, este formalismo permite un entorno muy práctico para manipular/analizar series de potencias. Teniendo a mano las operaciones algebraicas básicas:
La operación de incremento, o cuando se repite de adición, equivale al recentrado de la serie de potencias. Utiliza la Pascalmatriz P y sus poderes como Carlemanoperador

$ \qquad \small \begin{eqnarray} V(x) \cdot P^\tau &=& V(x+1) \\ V(x) \cdot (P^\tau)^{-1} &=& V(x-1) \\ V(x) \cdot (P^\tau)^y &=& V(x+y) \\ \end{eqnarray}$

Operación de multiplicación, equvalente reescalado de potencias, cuando un pequeño prefijo d indica el uso de la matriz diagonal de un vector

$ \qquad \small \begin{eqnarray} V(x) \cdot dV(y) &=& V(x*y) \\ V(x) \cdot dV(y)^h &=& V(x*y^h) \\ \end{eqnarray}$

Operación de exponenciación, básicamente utiliza la matriz de polinomios de Bell, y logaritmización utilizando la matriz factorialmente reescalada de números de Stirling de segundo y primer tipo respectivamente
$ \qquad \small \begin{eqnarray} V(x) \cdot fS2F &=& V(\exp(x)-1) \\ V(x) \cdot fS1F &=& V(\log(1+x)) \\ \end{eqnarray}$

se puede entonces - al igual que con una calculadora upn - definir la operación para la matriz de Carleman "raíz cuadrada" para $\small f(x) = \sqrt{x} $ por

$ \qquad \small \begin{eqnarray} V(x) &\cdot& {P^\tau} ^{-1} &=& V(x-1) \\ V(x-1) &\cdot& fS1F &=& V(\log(x)) \\ V(\log(x)) &\cdot& dV(1/2) &=& V(\log(x)/2) \\ V(\log(x)/2) &\cdot& fS2F &=& V(\exp(\log(x)/2)-1) \\ V(\exp(\log(x)/2)-1) &\cdot& P^\tau &=& V(\exp(\log(x)/2)) \\ \end{eqnarray} $

todo junto

$\qquad \small(V(x) \cdot {P^\tau}^{-1}) \cdot (fS1F \cdot dV(1/2)\cdot fS2F \cdot P^\tau )= V(\sqrt x ) $

de alguna manera como $\small x \circ \text{DEC } \circ \text{LOGPLUS } \circ \text{MUL } 1/2 \circ \text{EXPMINUS } \circ \text{INC } \equiv x \circ \text{SQRT } $

y se verá, que extrayendo la parte central en una matriz separada $\small SQ = fS1F \cdot dV(1/2) \cdot fS2F $ proporciona la matriz de Carleman para $\small V(x)\cdot SQ = V(\sqrt{1+x}-1) $ con los coeficientes esperados para esa función.

Así que para tener un conjunto de matrices-constantes básicas y procedimientos básicos que es una caja de herramientas para un manejo muy flexible de la composición y la iteración de las funciones que permiten la representación como series de potencia.

Más aún: si se necesitan argumentos fraccionarios, como con la adición de y fraccionaria en la fórmula anterior, se puede introducir el método general de potencias fraccionarias de esas matrices utilizando el logaritmo matricial o la diagonalización; especialmente la potencia fraccionaria de P para incrementos fraccionados es fácil de definir/implementar.

Todo lo anterior da sólo una visión general de la idea; hay algunas advertencias, ya que tratamos con matrices-producto de matrices, que son idealmente de tamaño infinito, y por ejemplo el producto parcial en la fórmula anterior para el sqrt de x, $\small {P\tau}^{-1} fS1F$ no puede sacarse y hacerse explícito (la asociatividad se "rompe") debido a la aparición de singularidades. Sin embargo, tomando $\small V(x) \cdot {P^\tau}^{-1} =V(x-1) $ permite primero proceder - lo que no significa otra cosa que para la definición de series de potencias para ciertas operaciones necesitamos el recentrado esencialmente .

[fin de las adiciones]


Para el manejo avanzado con esa problemática hay material disponible en línea de R.P.Brent, que ha analizado en profundidad la composición de series de potencia en su implementación algorítmica. Encontré por ejemplo R.P.Brent "Fast Algorithms for Manipulating formal Power series" en "Journal of the Association for Computing Machinery, Vol 25, No 4, October 1978, pp 581-595" o "on the complexity of composition (...)" en "Siam J. Comput. Vol. 9, No.1 Feb 1980" y un puñado de artículos relacionados, pero los libros de Brent deberían estar presentes en muchas bibliotecas de departamentos de matemáticas.

0 votos

Al principio dudé, pero parece que PARI/GP supera ampliamente a Mathematica en este cálculo. Por alguna razón Mathematica da la respuesta equivocada, y PARI la respuesta correcta, cuando la precisión intermedia es la misma que la precisión final. Math'ca da la respuesta correcta cuando se le da el resultado en modo simbólico, pero tarda una eternidad.

0 votos

Sí, puede ser, siempre que trabajemos numéricamente. Con coeficientes simbólicos, una matriz de Carleman de 64x64 en Pari/GP necesita también bastante tiempo. Además, Mathematica tiene la capacidad de encontrar a veces expresiones analíticas de forma cerrada cuando sólo se dan un número finito de coeficientes principales de una serie de potencias, lo que es imposible en Pari/GP, lo que permite obtener resultados exactos en una clase más amplia de funciones.

0 votos

En lo que respecta a los coeficientes de gran tamaño, a veces existe la posibilidad de manejarlos (y luego evaluarlos) utilizando métodos de suma de Euler o Noerlund. Esto se puede introducir fácilmente como simples multiplicaciones de matrices en el mismo entorno que se ha esbozado anteriormente. Un ejemplo trabajado que trata de una cuestión en MO está aquí go.helms-net.de/math/tetdocs/_mo/mo_101217/ En ese ejemplo, la serie de potencias/matriz de Carleman tiene coeficientes de 1e100 y la suma de Noerlund puede definir un equivalente que signifique reducirlos a 1e-120 o así...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X