7  Series de números reales

7.1 Ejercicios Resueltos

Para la realización de esta práctica se requieren los siguientes paquetes:

using SymPy  # Para el cálculo simbólico de límites.
using Plots  # Para el dibujo de gráficas.
using Makie # Para obtener gráficos interactivos.
using LaTeXStrings  # Para usar código LaTeX en los gráficos.
using Bessels  # Para definir funciones de Bessel.
[ Info: Precompiling Bessels [0e736298-9ec6-45e8-9647-e4fc86a2fe38] 

Ejercicio 7.1 La paradoja de la dicotomía de Zenon establece que para que un corredor pueda recorrer una distancia hasta la meta, primero tiene que recorrer la mitad de la distancia, después la mitad de la distancia restante, después la mitad de la distancia restante, y así hasta el infinito, por lo que, aparentemente, nunca llegaría a la meta.

La serie que calcula la distancia recorrida por el corredor es

\[ \sum \frac{1}{2^n} \]

  1. Calcular los 50 primeras sumas parciales de la serie.

    Definir una función para el término general y aplicar la función a los naturales de 1 a 50 usando compresiones de arrays. Usar la función cumsum para realizar sumas parciales.

    a(n) = 1/2^n
    an = [a(n) for n = 1:50]
    cumsum(an)    
    50-element Vector{Float64}:
     0.5
     0.75
     0.875
     0.9375
     0.96875
     0.984375
     0.9921875
     0.99609375
     0.998046875
     0.9990234375
     0.99951171875
     0.999755859375
     0.9998779296875
     ⋮
     0.999999999998181
     0.9999999999990905
     0.9999999999995453
     0.9999999999997726
     0.9999999999998863
     0.9999999999999432
     0.9999999999999716
     0.9999999999999858
     0.9999999999999929
     0.9999999999999964
     0.9999999999999982
     0.9999999999999991
    a(n) = 1/2^n
    A(n) = sum(a, 1:n)
    An = [A(n) for n = 1:50]
    50-element Vector{Float64}:
     0.5
     0.75
     0.875
     0.9375
     0.96875
     0.984375
     0.9921875
     0.99609375
     0.998046875
     0.9990234375
     0.99951171875
     0.999755859375
     0.9998779296875
     ⋮
     0.999999999998181
     0.9999999999990905
     0.9999999999995453
     0.9999999999997726
     0.9999999999998863
     0.9999999999999432
     0.9999999999999716
     0.9999999999999858
     0.9999999999999929
     0.9999999999999964
     0.9999999999999982
     0.9999999999999991
  2. Dibujar en una gráfica las primeras sumas parciales de la serie.

    Definir una función para el término general y aplicar la función a los naturales de 1 a 50 usando compresiones de arrays como en el ejercicio anterior y usar la función cumsum para calcular las sumas parciales. Después usar la función scatter del paquete Plots, o bien la función scatter del paquete Makie, para dibujar el array de las sumas parciales.

    using Plots, LaTeXStrings
    Plots.scatter(An, legend=false)
    using GLMakie
    Makie.scatter(An)
  3. ¿Es cierto que el corredor nunca llegará a la meta?

    No, porque la serie converge a 1.

Ejercicio 7.2 Calcular las 50 primeras sumas parciales de la serie \(\sum \frac{1}{n!}\) empezando en \(n=0\). ¿Cuántas cifras decimales del número \(e\) son correctas en la última suma parcial?

Para que no se desborde cálculo del factorial deben usarse enteros de la clase BigInt.

a(n) = 1/factorial(big(n))
an = [a(n) for n = 0:50]
An = cumsum(an)
decimales = round(abs(log10(abs(ℯ-last(An)))))
println(An)
println("Cifras del número e correctas: $decimales")
BigFloat[1.0, 2.0, 2.5, 2.666666666666666666666666666666666666666666666666666666666666666666666666666644, 2.708333333333333333333333333333333333333333333333333333333333333333333333333322, 2.716666666666666666666666666666666666666666666666666666666666666666666666666671, 2.718055555555555555555555555555555555555555555555555555555555555555555555555534, 2.718253968253968253968253968253968253968253968253968253968253968253968253968258, 2.718278769841269841269841269841269841269841269841269841269841269841269841269832, 2.718281525573192239858906525573192239858906525573192239858906525573192239858903, 2.718281801146384479717813051146384479717813051146384479717813051146384479717817, 2.718281826198492865159531826198492865159531826198492865159531826198492865159574, 2.718281828286168563946341724119501897279675057452835230613008390786168563946358, 2.718281828446759002314557870113425668981224536780092335647891203446759002314557, 2.718281828458229747912287594827277366959906642446324986007525690065372605055147, 2.718281828458994464285469576474867480158485449490740496031501322506613511904548, 2.718281828459042259058793450327841862233396624931016465407999799534191068582618, 2.718281828459045070516047795848605061178979635251032698900735004065225042504853, 2.718281828459045226708117481710869683342623135824366934094775848761393596611634, 2.718281828459045234928752728335199400298604372696647683315514840587507731038329, 2.718281828459045235339784490666415886146403434540261720776551790178813437759681, 2.718281828459045235359357431729807147377251008913767151131839263968875614270182, 2.718281828459045235360247110869052204705925898658017397966170512777514804111594, 2.718281828459045235360285792570758511546303067777332626089402306203977377582977, 2.718281828459045235360287404308329607664652116490637427261203630930079984810947, 2.718281828459045235360287468777832451509386078439169619308075683919124089100055, 2.718281828459045235360287471257428714734183538514113165156032301341779631572729, 2.718281828459045235360287471349265613372138999998370333520771435320396503516118, 2.718281828459045235360287471352545502609208837908522375248083547248204248942663, 2.718281828459045235360287471352658602238073315077837962893852930418128653957366, 2.718281828459045235360287471352662372225702130983481815815378576523792800791222, 2.71828182845904523536028747135266249383820628633527677881284714575300777326972, 2.718281828459045235360287471352662497638597041190020371406518038541420741159675, 2.71828182845904523536028747135266249775376039739773987421238685347440295230786, 2.718281828459045235360287471352662497757147554933261036059618289207725958518098, 2.718281828459045235360287471352662497757244330862847354969539187371535187266983, 2.718281828459045235360287471352662497757247019083113641605925878987196554732219, 2.718281828459045235360287471352662497757247091737715433136639032814646861961018, 2.718281828459045235360287471352662497757247093649678638176920957915369238467045, 2.718281828459045235360287471352662497757247093698703335742056391892310837864609, 2.718281828459045235360287471352662497757247093699928953181184777741734377849586, 2.718281828459045235360287471352662497757247093699958846289456201786842269068718, 2.718281828459045235360287471352662497757247093699959558030129330930773409335862, 2.718281828459045235360287471352662497757247093699959574582238008352725296318806, 2.71828182845904523536028747135266249775724709369995957495842229647595147556844, 2.718281828459045235360287471352662497757247093699959574966781947323134279551751, 2.718281828459045235360287471352662497757247093699959574966963678863290427464427, 2.718281828459045235360287471352662497757247093699959574966967545491804388058332, 2.718281828459045235360287471352662497757247093699959574966967626046565095570662, 2.718281828459045235360287471352662497757247093699959574966967627690539803887274, 2.718281828459045235360287471352662497757247093699959574966967627723419298053591]
Cifras del número e correctas: 66.0

Ejercicio 7.3 Dibujar una gráfica con los 10 primeros términos de las series geométricas \(\sum r^n\) para \(r=-2\), \(r=-1/2\), \(r=1/2\) y \(r=2\). ¿Para qué valores de \(r\) crees que converge la serie?

  1. \(r=-2\).

    using Plots, LaTeXStrings
    an = [(-2)^n for n = 0:9]
    Plots.scatter(0:9, cumsum(an), label=L"$\sum (-2)^n$")
    using GLMakie
    an = [(-2)^n for n = 0:9]
    Makie.scatter(0:9, cumsum(an))

    La serie diverge.

  2. \(r=-1/2\).

    bn = [(-1/2)^n for n = 0:9]
    Plots.scatter(0:9, cumsum(bn), label=L"$\sum (-1/2)^n$")
    bn = [(-1/2)^n for n = 0:9]
    Makie.scatter(0:9, cumsum(bn))

    La serie converge.

  3. \(r=1/2\).

    cn = [(1/2)^n for n = 0:9]
    Plots.scatter(0:9, cumsum(cn), label=L"$\sum (1/2)^n$")
    cn = [(1/2)^n for n = 0:9]
    Makie.scatter(0:9, cumsum(cn))

    La serie converge.

  4. \(r=2\).

    dn = [2^n for n = 0:9]
    Plots.scatter(0:9, cumsum(dn), label=L"$\sum 2^n$")
    dn = [2^n for n = 0:9]
    Makie.scatter(0:9, cumsum(dn))

    La serie diverge.

Se puede concluir que la serie converge para \(|r|<1\).

Ejercicio 7.4 Dibujar en la misma gráfica los 100 primeros términos de las series \(\sum \frac{1}{n^p}\) para \(p=1/2\), \(p=1\), \(p=3/2\) y \(p=2\).

¿Para qué valores de \(p\) crees que la serie converge?

using Plots, LaTeXStrings
a(n,p) = 1/n^p
an = [a(n,1/2) for n = 1:100]
Plots.scatter(cumsum(an), label=L"$\sum \frac{1}{p^{1/2}}$", legend=:topleft)
bn = [a(n,1) for n = 1:100]
Plots.scatter!(cumsum(bn), label=L"$\sum \frac{1}{p}$")
cn = [a(n,3/2) for n = 1:100]
Plots.scatter!(cumsum(cn), label=L"$\sum \frac{1}{p^{3/2}}$")
dn = [a(n,2) for n = 1:100]
Plots.scatter!(cumsum(dn), label=L"$\sum \frac{1}{p^2}$")

Se puede concluir que la serie converge para \(p>1\).

Ejercicio 7.5 Una suma parcial de cualquier serie convergente se puede utilizar como aproximación de la suma de la serie. La aproximación será mejor cuanto mayor sea el orden de la serie parcial, pero depende de la velocidad a la que la serie converja a su suma. En el caso de las series alternadas que converjan, el error en la estimación de la suma mediante la suma parcial de orden \(n\) siempre es menor o igual que el término de \(n\) de la sucesión correspondiente, es decir, para la serie alternada \(\sum (-1)^n a_n\), se cumple que

\[ \left|\sum_{n=1}^\infty (-1)^n a_n - \sum_{i=1}^n (-1)^i a_i \right|\leq a_n \]

Calcular la suma aproximada de las siguientes series alternadas con un error menor de \(10^{-10}\). ¿Cuál es la primera suma parcial que da esa aproximación?

  1. \(\sum \frac{(-1)^n}{n!}\)

    error = 10^-10
    a(n) = (-1)^n/factorial(n)
    i = 0
    while abs(a(i)) > error
        i += 1
    end
    println("Suma parcial de orden $i")
    println("Aproximación: $(sum(a, 0:i))")
    Suma parcial de orden 14
    Aproximación: 0.36787944117216204
  2. \(\sum \frac{(-1)^n\ln(n)}{n^2}\)

    error = 10^-10
    a(n) = (-1)^n*log(n)/n^2
    i = 2
    while abs(a(i)) > error
        i += 1
    end
    println("Suma parcial de orden $i")
    println("Aproximación: $(sum(a, 2:i))")
    Suma parcial de orden 357592
    Aproximación: 0.10131657821350423

Ejercicio 7.6 Usar las sumas parciales de las siguientes series para calcular de manera aproximada el valor de \(\pi\). ¿Hasta qué orden de la suma parcial es necesario llegar para obtener una error menor de \(10^{-4}\)? ¿Qué serie converge más rápidamente?

  1. \(\sum_{n=1}^\infty \frac{1}{n^2}\)

    Usar el hecho de que la suma de la serie de Basilea es \(\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}\).

    using SymPy
    @syms x::real
    a(n) = 1/n^2
    error = 10^-4
    i = 1
    while integrate(a(x), (x, i, oo)) > error
        i += 1
    end
    println("Suma parcial de orden $i: $(sqrt(6*sum(a, 1:i)))")
    Suma parcial de orden 10000: 3.1414971639472102
  2. \(\sum_{n=0}^\infty \frac{(-1)^n}{2n+1}\)

    Usar el hecho de que la suma de la serie de Leibniz es \(\sum_{n=0}^\infty \frac{(-1)^n}{2n+1} = \frac{\pi}{4}\).

    using SymPy
    @syms x::real
    a(n) = (-1)^n/(2n+1)    
    error = 10^-4
    i = 0
    while abs(a(i)) > error
        i += 1
    end
    println("Suma parcial de orden $i: $(4*sum(a, 0:i))")
    Suma parcial de orden 5000: 3.1417926135957948

Ejercicio 7.7 Calcular hasta la suma funcional parcial de orden \(9\) de la serie de Maclaurin para la función \(\operatorname{arctg}(x)\). Deducir el término general de la serie y estudiar su radio de convergencia.

Se puede probar que esta serie también converge en \(x=1\). Usar este hecho para calcular el valor de \(\pi\) con un error menor de \(10^-8\).

Para calcular polinomios de Taylor utilizar la función series del paquete SymPy.

Para calcular el radio de convergencia utilizar el criterio de la razón para determinar el radio de convergencia de la serie de potencias.

using SymPy
@syms x::real
p(n) = SymPy.series(atan(x), x, 0, n+1).removeO()
for i = 1:5
    println("Suma funcional parcial de grado $(2i-1): $(p(2i-1))")
end
Suma funcional parcial de grado 1: x
Suma funcional parcial de grado 3: -x^3/3 + x
Suma funcional parcial de grado 5: x^5/5 - x^3/3 + x
Suma funcional parcial de grado 7: -x^7/7 + x^5/5 - x^3/3 + x
Suma funcional parcial de grado 9: x^9/9 - x^7/7 + x^5/5 - x^3/3 + x

El término general de la serie es \(\frac{(-1)^{n-1}}{2n-1}\), y por tanto, se trata de una serie alternada.

@syms n::integer
c(n) = (-1)^(n-1)/(2n-1)
limit(abs(c(n)/c(n+1)), n => Inf)

\(1\)

El radio de convergencia es \(R=1\), y por tanto la serie converge para \(-1<x<1\). En realidad, su dominio de convergencia es \([-1,1]\).

error = 10^-8
i = 0
while abs(c(i)) >= error
    i += 1
end
println("Suma parcial de orden $i")
println("Aproximación de π: $(4*sum(c, 1:i))")
Suma parcial de orden 50000001
Aproximación de π: 3.141592673589794

Ejercicio 7.8 La función de Bessel de orden 0 se obtiene a partir de la suma de la serie de potencias

\[ J_0(x) = \sum_{n=0}^\infty (-1)^n\frac{x^{2n}}{2^{2n}(n!)^2} \]

Esta función sirve, entre otras cosas, para explicar la distribución de temperaturas en una lámina circular o las vibraciones de una membrana.

  1. Calcular el radio de convergencia de la función de Bessel.

    Utilizar el criterio de la razón para determinar el radio de convergencia de la serie de potencias.

    using SymPy
    @syms n::integer
    c(n) = (-1)^n*1/(2^(2n)*factorial(n)^2)
    limit(abs(c(n)/c(n+1)), n => Inf)

    \(\infty\)

    La serie converge para todo \(\mathbb{R}\).

  2. Dibujar en una misma gráfica la suma funcional parcial de orden 10 de la serie y la función de Bessel de orden 0.

    Usar el paquete Bessels para dibujar la función de Bessel de orden 0.

    using Plots, LaTeXStrings, Bessels
    @syms x::real
    a(x,n) = (-1)^n/(2^(2n)*factorial(n)^2) * x^(2n)
    N = 10
    an = [a(x,n) for n=0:N]
    An = sum(an)
    Plots.plot(An, -8, 8,  ylims = (-1,1), label=L"$\sum_{n=0}^{10} (-1)^n\frac{x^{2n}}{2^{2n}(n!)^2}$")
    Plots.plot!(besselj0, label = L"$J_0(x)$")

    La serie converge para todo \(\mathbb{R}\).

Ejercicio 7.9 Una serie de Fourier es una serie cuyo término general se construye combinando funciones sinusoidales simples (como senos y cosenos) que converge puntualmente a una función periódica continua. La forma general de una serie de Fourier es

\[ a_0 + \sum a_n\cos\left(\frac{2n\pi}{T}t\right)+b_n\operatorname{sen}\left(\frac{2n\pi}{T}t\right), \] donde \(a_n\) y \(b_n\) son los coeficientes de Fourier y \(T\) es el periodo.

Las series de Fourier son muy útiles para aproximar funciones periódicas que describen las ondas, por lo que se utilizan a menudo para modelizar procesos que involucran sonido, imágenes o corriente eléctrica.

Dibujar las gráficas las 10 primeras sumas parciales de las siguientes series de Fourier y predecir hacia qué función convergen.

  1. \(\sum \operatorname{sen}(nt)\)
using Plots, SymPy, Latexify
@syms t::real
a(t,n) = sin(n*t)
N = 10
an = [a(t,n) for n=1:N]
An = cumsum(an)
plots = []  # Array para guardar las gráficas
for i in An
    push!(plots, Plots.plot(i, label=latexify(i), legend=:outertop))
end
Plots.plot(plots..., layout=(5,2), size=(800,1600))

Converge aproximadamente a la función de tipo pulso, que se anula en todo su dominio excepto en los puntos \(x=2n\pi\) donde se produce discontinuidad de salto.

  1. \(\sum \frac{\operatorname{sen}(nt)}{n}\)
using Plots, SymPy, Latexify
@syms t::real
a(t,n) = sin(n*t)/n
N = 10
an = [a(t,n) for n=1:N]
An = cumsum(an)
plots = []  # Array para guardar las gráficas
for i in An
    push!(plots, Plots.plot(i, label=latexify(i), legend=:outertop))
end
Plots.plot(plots..., layout=(5,2), size=(800,1600))

Converge aproximadamente a la función de tipo diente de sierra con periodo \(2\pi\).

  1. \(\sum \frac{\operatorname{sen}((2n-1)t)}{2n-1}\)
using Plots, SymPy, Latexify
@syms t::real
a(t,n) = sin((2n-1)t)/(2n-1)
N = 10
an = [a(t,n) for n=1:N]
An = cumsum(an)
plots = []  # Array para guardar las gráficas
for i in An
    push!(plots, Plots.plot(i, label=latexify(i), legend=:outertop))
end
Plots.plot(plots..., layout=(5,2), size=(800,1600))

Converge aproximadamente a la función

\[ f(x)=\begin{cases} 0.75 & \mbox{si $2k\pi<x<(2k+1)\pi$}\\ -0.75 & \mbox{si $(2k+1)\pi<x<(2k+2)\pi$} \end{cases} \]

7.2 Ejercicios propuestos

Ejercicio 7.10 Calcular la suma parcial de orden 100 de las siguientes series (empezando en \(n=1\)):

  1. \(\sum \frac{1}{n2^n}\)

 🎁
  1. \(\sum \frac{n!}{n^n}\)

 🎁

Ejercicio 7.11 Dibujar las 100 primeras sumas parciales de las siguientes series y determinar cuáles convergen.

Ejercicio 7.12 ¿Hasta qué suma parcial de la serie de Maclaurin de la función \(e^x\) hay que llegar para aproximar el número \(\sqrt{e}\) con un error menor de \(10^{-50}\)?


Ejercicio 7.13 Calcular el radio de convergencia de las siguientes series de potencias.

  1. \(\sum \frac{(x-2)^n}{n5^n}\)

  1. \(\sum \frac{2^n(x-2)^n}{\sqrt(n+3)}\)

Ejercicio 7.14 La fuerza que ejerce la gravedad que actúa sobre un cuerpo de masa \(m\) a una altura \(h\) sobre la superficie de la Tierra viene dada por la fórmula

\[ F = \frac{mgR^2}{(R+h)^2} \]

donde R es el radio de la Tierra (tomar un radio medio 6371 km) y \(g\) es la aceleración de la gravedad (tomar \(9.81\) m/s^2). Expresar \(F\) como una serie de potencias de \(h/R\) y usarla para dar la aproximación de cuarto grado de \(F\) para \(h=100\) m. ¿Cuál es error relativo cometido en la aproximación?


 🎁

Aplicar el teorema de la serie alternada para dar una cota superior del error relativo cometido en la aproximación anterior.


 🎁

Ejercicio 7.15 ¿Cuál de las siguientes gráficas se corresponde con la serie de Fourier

\[ \sum (-1)^n\frac{\operatorname{sen}((2n-1)t)}{(2n-1)^2} \mbox{ ?} \]

Image for hotspot selection