4 votos

¿Cómo comprobar la precisión numérica de mi cálculo de las constantes de Stieltjes?

En un hilo en MSE Propuse una rutina mía más antigua para el cálculo eficiente de los coeficientes; utilizo una rutina muy similar para el cálculo rápido y sucio de las constantes de Stieltjes.

Esto me motivó a intentar mejorar mis anteriores cálculos de juguete para calcular ahora los primeros 512 Stieltjes con una precisión de 1000 dígitos dec. No soy capaz de estimar el número de dígitos correctos mediante argumentos analíticos; al menos wolframalpha me permitió mostrar StieltjesGamma[511] a 400 dígitos, lo que satisfizo mis propios cálculos.

La única tabla disponible libremente parece ser la de S. Plouffe (enlazada a través de wikipedia ) pero sólo muestran los primeros 78 números con una precisión de 256 dígitos.

Actualización2: Esta es la fórmula efectiva a la que se reduce el código Pari/GP:

Dejemos que $ \qquad h_c = {1\over c!} \sum_{k=0}^\infty (-1)^k {\ln(1+k)^c\over1+k}$ Esto se hace utilizando el sumalt -procedimiento.

Siguiente $ \qquad r_c = - {\ln(2)^{c-1}\over c!} b_c$ donde $b_c$ son los números de Bernoulli

Entonces $ \qquad \gamma_c = c! \sum_{d=0}^{c+1} h_d \cdot r_{c+1-d} $

Así que mi pregunta:

¿cómo podría obtener una estimación del número de dígitos correctos basándome en mi rutina Pari/GP?

Alternativamente:

¿hay alguna tabla con una precisión comparable por ahí que me permita al menos comprobar la coincidencia de los primeros m dígitos (donde m debería llegar óptimamente a 1000)?

_(aquí está la tabla con mis cálculos actuales de 512 coeficientes por 1000 dígitos )_


Actualización1:
Heurísticamente encuentro, que empezando con cierta precisión, digamos $300$ dec dígitos en el primer $\gamma_0$ simplemente pierdo un dígito de precisión por paso en el índice, por lo que en $\gamma_k$ son aproximadamente $300-k$ dígitos correctos, tal vez un puñado menos.
Para ello he utilizado las diferencias cuando se calculan con precisión $200,300,400,500,600,700$ de eso con precisión $800$ , $\gamma_0$ tenía casi todos los dígitos iniciales constantes, cuando se aumentaba la precisión, por lo que siempre era correcto hasta la precisión total.
Eso significaría, que si quiero $1000$ dígitos correctos para $\gamma_{511}$ Necesito una precisión dec (al menos) $1550$ . Simple, si eso es cierto...


Esta es mi rutina. He reducido el parámetro de precisión para que pueda ser copiado y pegado en un entorno Pari/GP. Para la precisión de 1000 dígitos dec y 512 coeficientes esto debe ser optimizado debido al aumento exorbitante de la pila y el tiempo de cálculo de lo contrario

Preparar los cálculos con parámetros para la precisión del cálculo

termsforseries = 32
digitstocompute = 200; digitstoshow = 12;
default(realprecision,digitstocompute)
default(format,Str("g0.",digitstoshow))
default(seriesprecision,termsforseries)

Calcular los coeficientes de la expansión de Laurent de la zeta por conversión del mismo tipo de serie de la función eta (la zeta alternante)

\\ ========= Zeta Laurent-expansion providing Stieltjes-coefficients ====
ps_eta = sumalt(k=0,taylor((-1)^k/(1+k)^(1-x),x))

    tmp = Vec(1-2*2^(-(1-x)));
    tmp[1]=0; \\ make the first zero exact. this step is needed for
              \\ allowing the reciprocal of the powerseries
ps_etatozeta=1/Ser(tmp)

ps_zeta = ps_eta * ps_etatozeta \\ contains now the Stieltjes-coefficients

    tmp=Vec(ps_zeta);tmp=vector(#tmp-1,c,tmp[1+c]) \\ remove the first coefficient (at 1/x)
sti = vector(#tmp,r,tmp[r]*(r-1)!)  \\ extract Stieltjes-constants by mult with factorials

5voto

GrizzlyGuru Puntos 62

Podrías comparar con la salida de mpmath:

sage: import mpmath
sage: mpmath.mp.dps = 1000
sage: %time mpmath.stieltjes(511)
CPU times: user 123.17 s, sys: 0.02 s, total: 123.19 s
Wall time: 123.40 s
mpf('673581492593841075447052270498937988033439947306384442967711559788996269245614412865378751092398327114199475672304543519558074203937367354475627304841991475249868411079091195038704370379319922304314968920977080.4218186954910530966341150821211999689800345913062006500416130863993252444286525401536530609127800808358611180051913954061786113778487954768827917318185861285728540852470806490244553130800206629709991267757983837666355484638397085316115099902138453930569718675294835237821298508690226519561229169443578986238598614523990440226172962706436119188515904391443174279895106345752233034115379099381680958168062786627389335290431416199037643058641914376639305675292168558263653044141610653456719446309980037732502545489019580865593535176949757824659484296855986638635532332512794555243036229273521585906314889067495562018805980518215400448131311489588531760771126389926309367463577942595344292677230759234541824332220012416082001221662802813469321335808232095303910714771240349667445255785796410716571')

Esto sólo parece coincidir con tu resultado hasta unos 715 dígitos. Mathematica 8 coincide con mpmath, por lo que es de suponer que tendrás que aumentar la precisión en tu algoritmo.

2voto

GrizzlyGuru Puntos 62

Recientemente he calculado una gran tabla de valores rigurosos de las constantes de Stieltjes. Gracias a la codificación de Jon Bober, la tabla puede consultarse mediante una interfaz web en LMFDB.org (la base de datos de funciones L y formas modulares):

http://beta.lmfdb.org/riemann/stieltjes/

Para cualquier $n \le 10^5$ La interfaz web permite imprimir $\gamma_n$ hasta al menos 10000 dígitos (más de 30000 dígitos para las $n$ ). También pueden descargarse los datos en bruto (archivos enormes).

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