Funciones suaves con segunda derivada enloquecida

Un pequeño cuaderno para explorar con más cuidado este fenómeno.

La función propuesta es:

$$f(x)=\sum_{k=1}^{100} \frac{\sin(2\pi k^2 x)}{k^54\pi^2} +\frac{x^2}{2k}.$$

Por ende, su primera derivada es

$$f'(x) = \sum_{k=1}^{100} \frac{\cos(2\pi k^2 x)}{k^3 2\pi}+\frac{x}{k}.$$

Y la segunda,

$$f''(x) = \sum_{k=1}^{100} \frac{-\sin(2\pi k^2 x)}{k} + \frac{1}{k}.$$

In [76]:
import numpy as np
from sympy import *
from __future__ import division

init_printing()

Definamos el término de la suma usando Sympy para calcular sus derivadas:

In [77]:
# Inicializamos las variables.

x = Symbol("x")
k = Symbol("k")
y = Symbol("y")

b = Symbol("b")

t = sin(2*pi*x*(k**2))/ (4*(pi**2)*(k**5)) + (x**2) / (2*k)

t
Out[77]:
$$\frac{x^{2}}{2 k} + \frac{\sin{\left (2 \pi k^{2} x \right )}}{4 \pi^{2} k^{5}}$$
In [78]:
t1 = diff(t,x)

t1
Out[78]:
$$\frac{x}{k} + \frac{\cos{\left (2 \pi k^{2} x \right )}}{2 \pi k^{3}}$$
In [79]:
t2 = diff(t1,x)

t2
Out[79]:
$$- \frac{\sin{\left (2 \pi k^{2} x \right )}}{k} + \frac{1}{k}$$
In [80]:
def sumatoria(a, termino, N=100):
    return sum(termino.subs(x,a).subs(k,b+1) for b in range(N))

def f(a):
    return sumatoria(a,t)

def f1(a):
    return sumatoria(a,t1)

def f2(a):
    return sumatoria(a,t2)

Empecemos por graficar $f$:

In [81]:
plot(f(y), (y,0,1))

show()

Ahora grafiquemos $f'$:

In [82]:
plot(f1(y), (y,0,1))

show()

Y finalmente $f''$:

In [83]:
plot(f2(y), (y,0,1))

show()

Hagamos una función que, dado el término de la primera función, calcule y grafique la función y sus primeras dos derivadas:

In [84]:
def CalcularyGraficar(t):
    t1 = diff(t,x)
    t2 = diff(t1,x)
    def f(a):
        return sumatoria(a,t)

    def f1(a):
        return sumatoria(a,t1)

    def f2(a):
        return sumatoria(a,t2)

    plot(f(y), (y,0,1))
    plot(f1(y), (y,0,1))
    plot(f2(y), (y,0,1))

    show()

Modifiquemos la función original: En lugar de $k^5$ en el denominador del primer sumando, pongamos $k^3$.

In [94]:
t = sin(2*pi*x*(k**2))/ (4*(pi**2)*(k**3)) + (x**2) / (2*k)

CalcularyGraficar(t)

Por si acaso la suavidad de la primera función es aparente por la escala, modifiquemos el dominio del primer gráfico:

In [86]:
plot(f(y), (y,0,0.0001))

show()

Ahora eliminemos el segundo sumando del término original (y dejemos $k^5$ en el denominador. Creo que esta es mi versión minimal favorita del fenómeno.

In [95]:
t = sin(2*pi*x*(k**2))/ (4*(pi**2)*(k**5))

CalcularyGraficar(t)

¿Y qué pasa si en el denominador ponemos $k$ en lugar de $k^5$? (Demasiado ruidoso)

In [75]:
t = sin(2*pi*x*(k**2))/ (4*(pi**2)*(k)) + (x**2) / (2*k)
    
CalcularyGraficar(t)

¿O $k^{10}$? (Demasiado suave.)

In [96]:
t = sin(2*pi*x*(k**2))/ (4*(pi**2)*(k**10)) + (x**2) / (2*k)
    
CalcularyGraficar(t)
Back to top