8  Funciones vectoriales

8.1 Ejercicios Resueltos

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

using SymPy  # Para el cálculo simbólico.
using Plots  # Para el dibujo de gráficas.
using Makie, GLMakie # Para el dibújo de gráficas en 3d.
using LaTeXStrings  # Para usar código LaTeX en los gráficos.
using LinearAlgebra # Para el módulo, producto escalar y vectorial de vectores.
using Roots # Para calcular soluciones de ecuaciones numéricamente.
using CalculusWithJulia # Utilidades para dibujar vectores.

Ejercicio 8.1 Representar gráficamente los vectores \(\mathbf{u}=(3,1)\), \(\mathbf{v}=(1,2)\) y \(\mathbf{u}-\mathbf{v}\) en el plano real \(\mathbb{R}^2\).

Usar la función arrow del paquete CalculusWithJulia para dibujar flechas que representan vectores.

using CalculusWithJulia
using LaTeXStrings
O = [0, 0] # Origin
u = [3, 1]
v = [1, 2]
Plots.plot()
arrow!(O, u)
arrow!(O, v)
arrow!(v, u-v)
annotate!(1.5, 0.4, L"$\mathbf{u}$")
annotate!(0.4, 1, L"$\mathbf{v}$")
annotate!(2.1, 1.6, L"$\mathbf{u}-\mathbf{v}$")

Ejercicio 8.2 Sean \(\mathbf{u}=(1,2,-1)\) y \(\mathbf{v}=(3,0,2)\) dos vectores del espacio real \(\mathbb{R}^3\).

  1. Calcular el módulo (norma) de ambos vectores y construir vectores unitarios con su misma dirección.

    Usar la función norm del paquete LinearAlgebra para calular el módulo de un vector.

    using LinearAlgebra
    u = [-1, 2, -1]
    v = [-2, 0, 1]
    println("Módulo de u: $(norm(u))")
    println("Módulo de v: $(norm(v))")
    println("Vector unitario con la dirección de u $(u/norm(u))")
    println("Vector unitario con la dirección de v $(v/norm(v))")
    Módulo de u: 2.449489742783178
    Módulo de v: 2.23606797749979
    Vector unitario con la dirección de u [-0.4082482904638631, 0.8164965809277261, -0.4082482904638631]
    Vector unitario con la dirección de v [-0.8944271909999159, 0.0, 0.4472135954999579]
  2. Calcular su producto escalar.

    Usar la función dot del paquete LinearAlgebra para calcular el producto escalar de dos vectores.

    println("Producto escalar de u y v: $(dot(u, v))")
    # También se puede usar el clásico punto ⋅
    println("Producto escalar de u y v: $(u  v)")
    Producto escalar de u y v: 1
    Producto escalar de u y v: 1
  3. Calcular su producto vectorial.

    Usar la función cross del paquete LinearAlgebra para calcular el producto vectorial de dos vectores.

    println("Producto vectorial de u y v: $(cross(u, v))")
    # También se puede usar la clásica cruz × 
    println("Producto vectorial de u y v: $(u × v)")
    Producto vectorial de u y v: [2, 3, 4]
    Producto vectorial de u y v: [2, 3, 4]
  4. Dibujar \(\mathbf{u}\), \(\mathbf{v}\) y \(\mathbf{u}\times\mathbf{v}\) en el espacio real.

    using CalculusWithJulia
    Plots.plot(xlabel = "X", ylabel = "Y", zlabel = "Z", legend = false)
    O = [0, 0 ,0]
    arrow!(O, u)
    arrow!(O, v)
    arrow!(O, u × v)
    using GLMakie
    fig = Figure()
    ax = Axis3(fig[1,1], azimuth = -pi/4, aspect = (1,1,1))
    O = [0, 0 ,0]
    arrows!(ax, [Point3(O)], [Vec3(u), Vec3(v), Vec3(u × v)], 
        linecolor = [:blue,:red, :green], arrowcolor = [:blue,:red, :green],
        linewidth = 0.02, arrowsize = Vec3(0.1, 0.1, 0.1))
    fig

Ejercicio 8.3 Dibujar las trayectorias de las siguientes funciones vectoriales.

  1. \(f(t)=(\operatorname{sen}(t), \cos(t))\).

    Usar la función plot del paquete Plots o la función lines del paquete Makie para dibujar la trayectoria, pasándole cada una de las funciones componentes separadas por comas.

    using Plots
    using CalculusWithJulia
    f(t) = [sin(t), cos(t)] 
    ts = range(0, 2pi, length = 200)
    xs, ys = unzip(f.(ts))
    Plots.plot(xs, ys, aspect_ratio = :equal)
    using GLMakie
    f(t) = [sin(t), cos(t)] 
    ts = range(0, 2pi, length = 200)
    points = Point2.(f.(ts))
    fig = Figure()
    ax = Axis(fig[1,1], aspect = 1)
    lines!(ax, points, linewidth = 2, color = :blue)
    fig
  2. \(\mathbf{g}(t) = (\cos(t), \operatorname{sen}(t), t/4)\).

    g(t) = [cos(t), sin(t), t/4] 
    ts = range(0, 2pi, length = 200)
    xs, ys, zs = unzip(g.(ts))
    Plots.plot(xs, ys, zs, aspect_ratio = :equal, xlabel = "X", ylabel = "Y", zlabel = "Z", label = "")
    using GLMakie
    g(t) = [cos(t), sin(t), t/4] 
    ts = range(0, 2pi, length = 200)
    points = Point3.(g.(ts))
    fig = Figure()
    ax = Axis3(fig[1,1])
    lines!(ax, points, linewidth = 2, color = :blue)
    fig

Ejercicio 8.4 Un nudo tórico es un nudo que se forma mediante una trayectoria que gira sobre la superficie de un toro en \(\mathbb{R}^3\). La función vectorial que define este tipo de nudos sobre un toro de ecuación \((r-2)^2+z^2 = 1\) es \(\mathbf{f}(t) = ((2+\cos(qt))\cos(pt), (2+\cos(qt))\operatorname{sen}(pt), -\operatorname{sen}(qt))\), donde \(p\) y \(q\) son dos enteros primos entre si y \(t\in [0,2\pi]\).

  1. Dibujar el nudo tórico con \(p=2\) y \(q=3\).

    Usando el paquete Makie.

    using GLMakie
    # Definimos las ecuaciones paramétricas del toro.
    U = LinRange(-pi, pi, 100)
    V = LinRange(-pi, pi, 20)
    x1 = [2cos(u) + cos(u) * cos(v) for u in U, v in V]
    y1 = [2sin(u) + sin(u) * cos(v) for u in U, v in V]
    z1 = [sin(v) for u in U, v in V]
    # Inicializamos la figura y los ejes.
    fig = Figure()
    ax = Axis3(fig[1,1], aspect = (3, 3, 1))
    # Dibujamos el toro.
    Makie.surface!(ax, x1, y1, z1; colormap = :viridis, shading = false, transparency = true, alpha = 0.5)
    # Definimos la función vectorial de nudo tórico.
    f(t) = [(2+cos(3t))cos(2t), (2+cos(3t))sin(2t), -sin(3t)] 
    # Generamos los puntos de la trayectoria del nudo tórico.
    ts = range(0, 2pi, length = 200)
    points = Point3.(f.(ts))
    # Dibujamos el nudo tórico.
    lines!(ax, points, linewidth = 3, color = :red)
    fig
    ┌ Warning: `shading = false` is not valid. Use `Makie.automatic`, `NoShading`, `FastShading` or `MultiLightShading`. Defaulting to `NoShading`.
    └ @ Makie ~/.julia/packages/Makie/VRavR/src/lighting.jl:243
  2. Definir una función para crear nudos tóricos con parámetros p y q para los enteros que definen el toro y un parámetro opcional booleano toro, para dibujar el toro o no.

    using GLMakie
    """
        nudo_torico(ax, p, q, toro)
    
    Función dibuja un nudo tórico de parámetros p, q sobre los ejes ax. Si el parámetro toro es true dibuja también el toro sobre el que se traza el nudo.
    """
    function nudo_torico(ax::Axis3, p::Int64, q::Int64, toro::Bool = true)
        if toro 
            alpha = 0.5
        else
            alpha = 0
        end
        # Definimos las ecuaciones paramétricas del toro.
        U = LinRange(-pi, pi, 100)
        V = LinRange(-pi, pi, 20)
        x1 = [2cos(u) + cos(u) * cos(v) for u in U, v in V]
        y1 = [2sin(u) + sin(u) * cos(v) for u in U, v in V]
        z1 = [sin(v) for u in U, v in V]
        # Dibujamos el toro en los ejes.
        Makie.surface!(ax, x1, y1, z1; colormap = :viridis, shading = false, transparency = true, alpha = alpha)
        # Definimos la función vectorial de nudo tórico.
        f(t) = [(2+cos(q*t))cos(p*t), (2+cos(q*t))sin(p*t), -sin(q*t)] 
        # Generamos los puntos de la trayectoria del nudo tórico.
        ts = range(0, 2pi, length = 200)
        points = Point3.(f.(ts))
        # Dibujamos el nudo tórico.
        lines!(ax, points, linewidth = 3, color = :red)
    end
    
    fig = Figure()
    ax = Axis3(fig[1,1], aspect = (3, 3, 1))
    nudo_torico(ax, 5, 9, true)
    fig
    ┌ Warning: `shading = false` is not valid. Use `Makie.automatic`, `NoShading`, `FastShading` or `MultiLightShading`. Defaulting to `NoShading`.
    └ @ Makie ~/.julia/packages/Makie/VRavR/src/lighting.jl:243

Ejercicio 8.5  

  1. Calcular las ecuaciones de la recta tangente y el plano normal a la trayectoria \(\mathbf{f}(t) = (\operatorname{sen}(2t), \cos(t))\) en el punto correspondiente a \(t=\pi/2\) y dibujarlas.

    La ecuación de la recta tangente a la trayectoria de la función vectorial \(\mathbf{f}(t)\) en el instante \(t=a\) es \(\mathbf{f}(a)+\mathbf{f}'(a)t\).

    using SymPy, Plots
    @syms t::real
    # Definimos la función vectorial.
    f(t) = [sin(2t), cos(t)]
    # Instante 
    a = pi/2
    # Dibujamos la trayectoria.
    Plots.plot(f(t)..., 0, 2pi, aspect_ratio = :equal, label = "f(t)=(sen(t), cos(t))")
    # Dibujamos el punto de tangencia.
    Plots.scatter!([f(a)[1]],[f(a)[2]], label = "")
    # Calculamos la derivada en el punto.
    df = subs.(diff.(f(t)), t=>a)
    # Calculamos la ecuación de la recta tangente.
    tl(t) = f(a) + df * t
    # Dibujamos la recta tangente.
    Plots.plot!(tl(t)..., -1, 1, label = "Tangente")
    # Calculamos la ecuación de la recta normal.
    nl(t) = f(a) - [df[2],-df[1]] * t
    Plots.plot!(nl(t)..., -0.6, 0.6, label = "Normal")
  2. Calcular las ecuaciones de las recta tangente y el plano normal a la trayectoria \(\mathbf{g}(t) = (\cos(t), \operatorname{sen}(t), \sqrt{t})\) en punto correspondiente a \(t=\pi\) y dibujarlas.

    using SymPy, LinearAlgebra, GLMakie
    @syms x, y, z, t::real
    # Definimos la función vectorial.
    g(t) = [cos(t), sin(t), sqrt(t)]
    # Instante 
    a = pi/2
    # Dibujamos la trayectoria.
    ts = range(0, 2pi, 200)
    points = Point3.(g.(ts))
    fig = Figure()
    ax = Axis3(fig[1,1], title = "Recta tangente y plano normal a una trayectoria", aspect = :equal)
    lines!(ax, points)
    # Dibujamos el punto de tangencia.
    Makie.scatter!([Point3(g(a))])
    # Calculamos la derivada en el punto.
    dg = subs.(diff.(g(t)), t=>a)
    # Calculamos la ecuación de la recta tangente.
    tl(t) = g(a) + dg * t
    # Dibujamos la recta tangente.
    pointstl = Point3.(tl.(range(-pi, pi, 2)))
    lines!(ax, pointstl)
    # Calculamos la ecuación del plano normal
    np(x,y) = solve(dot(([x, y, z] - g(a)),dg), z)[1]
    xs = range(-1, 1, 2)
    ys = range(0, 2, 2)
    zs = [np(x,y) for x in xs, y in ys]
    Makie.surface!(ax, xs, ys, zs, colormap = ["red"], alpha = 0.5, transparency = true)
    fig

Ejercicio 8.6 Dada una función vectorial \(\mathbf{f}(t)\) en \(\mathbb{R}^3\), el plano osculador de la trayectoria de \(\mathbf{f}(t)\) en \(t=a\) es el plano definido por los vectores tangente \(\mathbf{T}(a)\) y normal \(\mathbf{N}(a)\).

Calcular y dibujar el plano osculador de la función vectorial del nudo tórico del apartado a del ejercicio Ejercicio 8.4 en el punto correspondiente a \(t=\pi/2\).

Usando el paquete Makie.

using SymPy, LinearAlgebra, GLMakie
@syms x, y, z, t::real
# Definimos las ecuaciones paramétricas del toro.
U = LinRange(-pi, pi, 100)
V = LinRange(-pi, pi, 20)
x1 = [2cos(u) + cos(u) * cos(v) for u in U, v in V]
y1 = [2sin(u) + sin(u) * cos(v) for u in U, v in V]
z1 = [sin(v) for u in U, v in V]
# Inicializamos la figura y los ejes.
fig = Figure()
ax = Axis3(fig[1,1], aspect = (3, 3, 1))
# Dibujamos el toro.
Makie.surface!(ax, x1, y1, z1; colormap = :viridis, shading = false, transparency = true, alpha = 0.5)
# Definimos la función vectorial de nudo tórico.
f(t) = [(2+cos(3t))cos(2t), (2+cos(3t))sin(2t), -sin(3t)] 
# Generamos los puntos de la trayectoria del nudo tórico.
ts = range(0, 2pi, length = 200)
points = Point3.(f.(ts))
# Dibujamos el nudo tórico.
lines!(ax, points, linewidth = 3, color = :red)
# Punto
a = pi/2
# Dibujamos el punto.
Makie.scatter!(ax, [Point3(f(a))])
# Vector tangente unitario.
Tan(t) = diff.(f(t)) / norm(diff.(f(t)))
Ta = subs.(Tan(t), t=>a)
# Vector normal unitario.
Norm(t) = diff.(Tan(t)) / norm(diff.(Tan(t)))
Na = subs.(Norm(t), t=>a)
# Calculamos la ecuación del plano osculador.
po(x,y) = solve(dot(([x, y, z] - f(a)), cross(Ta, Na)), z)[1]
xs = range(-3, -1, 2)
ys = range(-1, 1, 2)
zs = [po(x,y) for x in xs, y in ys]
Makie.surface!(ax, xs, ys, zs, colormap = ["magenta"], alpha = 0.8, transparency = true)
fig
┌ Warning: `shading = false` is not valid. Use `Makie.automatic`, `NoShading`, `FastShading` or `MultiLightShading`. Defaulting to `NoShading`.
└ @ Makie ~/.julia/packages/Makie/VRavR/src/lighting.jl:243

Ejercicio 8.7 Para construir un cuaderno de 30 cm de altura se utiliza una espiral de alambre con radio 1 cm y una distancia entre cada dos vueltas consecutivas \(\pi/4\) cm. Dibujar la espiral y calcular la cantidad de alambre necesaria para cada cuaderno.

La longitud de la trayectoria de una función vectorial \(\mathbf{f}(t)\) en el intervalo \(t\in [a,b]\) se calcula mediante la integral

\[ \int_a^b |\mathbf{f}'(t)|\, dt \]

Dibujamos primero la espiral.

using SymPy, GLMakie
@syms t::real
# Definimos la función vectorial.
f(t) = [cos(t), sin(t), t/8]
# Calculamos el número de revoluciones.
h = solve(f(t)[3]-30)[1]
# Dibujamos la trayectoria.
ts = range(0, h, 2000)
points = Point3.(f.(ts))
fig = Figure()
ax = Axis3(fig[1,1], title = "Espiral de un cuaderno", aspect = (1, 1, 30))
lines!(ax, points)
fig

A continuación calculamos la longitud de la espiral.

using LinearAlgebra
# Calculamos longitud de la trayectoria
N(integrate(norm(diff.(f(t))), (t, 0, h)))
241.8677324489565

Ejercicio 8.8 Dibujar función de curvatura de campana de Gauss correspondiente a la función de densidad de una distribución normal estándar

\[ f(x) = \frac{1}{\sqrt{2\pi}}e^{-x^2/2}. \]

¿En qué puntos la curvatura es nula? ¿Dónde la curvatura es máxima localmente?

La curvatura de la gráfica de una función real \(f(x)\) se calcula mediante la fórmula

\[ \kappa(x) = \frac{|f''(x)|}{(1+f''(x)^2)^{3/2}}. \]

Dibujamos primero la gráfica de la función y la de la función curvatura.

using SymPy, GLMakie
@syms x::real
# Definimos la función.
f(x) = 1/sqrt(2pi) * exp(-x^2/2)
# Dibujamos la gráfica de la función.
fig = Figure()
ax = Axis(fig[1,1], autolimitaspect = 1)
lines!(ax, -3..3, f, label = L"$f(t)= \frac{1}{\sqrt{2\pi}}e^{-x^2/2}$")
fig
# Calculamos la segunda derivada de la función.
df2 = diff(f(x), x, 2)
# Calculamos la función de curvatura.
k(x) = abs(df2(x)) / (1 + df2(x)^2)^(3/2)
# Definimos una serie de puntos de la función curvatura.
xs = range(-3, 3, 200)
points = Point2.(xs, k.(xs))
# Dibujamos la función de curvatura
lines!(ax, points, label = "Curvatura")
# Añadimos la leyenda
axislegend()
fig

Ahora calculamos los puntos con curvatura máxima y mínima localmente.

# Calculamos los puntos que anulan la curvatura.
solve(k(x),x)
# Calculamos los puntos críticos de la curvatura.
# solve(diff(k(x)), x) No encuentra la solución, así que buscamos la solución numéricamente.
using Roots
println("Máximo local en x = $(find_zero(diff(k(x)), -2))")
println("Máximo local en x = $(find_zero(diff(k(x)), 0))")
println("Máximo local en x = $(find_zero(diff(k(x)), 2))")
Máximo local en x = -1.7320508075688774
Máximo local en x = 0.0
Máximo local en x = 1.7320508075688774

Ejercicio 8.9 La torsión de una trayectoria de una función vectorial \(\mathbf{f}(t)\) en el espacio real \(\mathbb{R}^3\) mide la intensidad con la que una curva se sale del plano osculador y se calcula con la fórmula

\[ \tau(t) = \frac{(\mathbf{f}'(t)\times \mathbf{f}''(t))\mathbf{f}'''(t)}{|\mathbf{f}'(t)\times \mathbf{f}''(t)|^2} \]

Definir una función para la curvatura y y otra para la torsión de la trayectoria de la función vectorial \(\mathbf{h}(t)=\cos(2t)\mathbf{i} + \operatorname{sen}(t) \mathbf{j} + \cos(t) \mathbf{k}\), y utilizarla para calcular la curvatura y la torsión en los instantes \(t=0, \pi/4, \pi/2, 3\pi/2\).

Calculamos primero la curvatura.

using SymPy, LinearAlgebra
"""
    curvatura(h, a)

Calcula la curvatura de la trayectoria de una función vectorial h en el punto a.
"""
function curvatura(f, a)
    @syms t::real
    # Calculamos la primera derivada.
    df(t) = diff.(f(t))
    # Calculamos la segunda derivada.
    df2(t) = diff.(df(t))
    # Calculamos la curvatura
    k(t) = norm(cross(df(t), df2(t))) / norm(df(t))^3
    return N(subs(k(t), t=>a))
end

f(t) = [cos(2t), sin(t), cos(t)]
println("Curvatura en t=0: $(curvatura(f, 0))")
println("Curvatura en t=π/4: $(curvatura(f, pi/4))")
println("Curvatura en t=π/2: $(curvatura(f, pi/2))")
println("Curvatura en t=3π/4: $(curvatura(f, 3pi/4))")
Curvatura en t=0: 4.123105625617661
Curvatura en t=π/4: 0.2
Curvatura en t=π/2: 4.123105625617661
Curvatura en t=3π/4: 0.2

Y ahora calculamos la torsión.

using SymPy, LinearAlgebra
"""
    torsion(h, a)

Calcula la torsion de la trayectoria de una función vectorial h en el punto a.
"""
function torsion(f, a)
    @syms t::real
    # Calculamos la primera derivada.
    df(t) = diff.(f(t))
    # Calculamos la segunda derivada.
    df2(t) = diff.(df(t))
    # Calculamos la tercera derivada.
    df3(t) = diff.(df2(t))
    # Calculamos la torsión.
    τ(t) = dot(cross(df(t), df2(t)), df3(t)) / norm(cross(df(t), df2(t)))^2
    return N(subs(τ(t), t=>a))
end

println("Torsión en t=0: $(torsion(f, 0))")
println("Torsión en t=π/4: $(torsion(f, pi/4))")
println("Torsión en t=π/2: $(torsion(f, pi/2))")
println("Torsión en t=3π/4: $(torsion(f, 3pi/4))")
Torsión en t=0: 0
Torsión en t=π/4: -1.2000000000000002
Torsión en t=π/2: -4.3222828205200695e-17
Torsión en t=3π/4: 1.2000000000000002

Ejercicio 8.10 Se lanza una pelota desde la terraza de un edificio de altura \(h\) con una rapidez inicial \(r\) y un ángulo sobre el horizonte \(\theta\). Estudiar la trayectoria que describe la pelota suponiendo que la única fuerza que actúa sobre ella es la de la gravedad.

  1. Definir una función para calcular la función vectorial de la posición de la pelota tomando como parámetros la altura del edificio, la rapidez inicial y el ángulo de lanzamiento.

    using SymPy
    """
        pelota(h, r, θ)
    
    Devuelve un vector con las componentes de la función vectorial que define la posición de una pelota lanzada desde una altura h, con una rapidez r y un ángulo de lanzamiento θ con respecto al horizonte.
    """
    function pelota(h, r, θ)
        @syms t::positive
        # Constante con al aceleración de la gravedad
        g = 9.81
        # Velocidad inicial.
        v₀ = [r*cos(θ), r*sin(θ)]
        # Aceleración constante
        a(t) = [Sym(0), -Sym(g)]
        # Obtenemos el vector velocidad integrando la aceleración.
        v(t) = integrate.(a(t), t) + v₀
        # Obtenemos el vector posición integrando el vector velocidad.
        return integrate.(v(t), t) + [0, h]
    end
    pelota
  2. Construir una función para dibujar la gráfica de la trayectoria de la pelota tomando como parámetros la altura del edificio, la rapidez inicial y el ángulo de lanzamiento.

    using GLMakie
    """
        trayectoria_pelota(ax, h, r, θ)
    
    Dibuja sobre los ejes ax la gráfica de la trayectoria de una pelota lanzada desde una altura h, con una rapidez r y un ángulo de lanzamiento θ con respecto al horizonte.
    """
    function trayectoria_pelota!(ax, h, r, θ)
        @syms t::positive
        # Lambdificamos la expresión de la función vectorial para poder llamarla con parámetros.
        f = lambdify(pelota(h, r, θ))
        # Calculamos el instante en el que la pelota toca el suelo.
        t₀ = solve(f(t)[2], t)[1]
        # Definimos un rango de valores desde 0 hasta el instante en que la pelota toca el suelo.
        ts = range(0, t₀, 200)
        # Obtenemos los puntos de la trayectoria.
        points = Point2.(f.(ts))
        # Dibujamos la trayectoria.
        lines!(ax, points, label = "h =$(h), r = $(r), θ = $(θ)")
        return ax
    end
    
    fig = Figure()
    ax = Axis(fig[1,1], title = "Trayectoria de la pelota", aspect = DataAspect())
    trayectoria_pelota!(ax, 100, 20, PI/4)
    trayectoria_pelota!(ax, 100, 20, PI/6)
    trayectoria_pelota!(ax, 100, 20, PI/8)
    trayectoria_pelota!(ax, 100, 20, PI/10)
    # Añadimos la leyenda
    axislegend(position = :lb)
    fig
  3. Si se lanza la pelota a nivel del suelo, con una rapidez de 20 m/s ¿para qué ángulo se alcanzará una mayor distancia? ¿Y si se lanza desde 100 m de altura?

    Calculamos primero el ángulo para una altura 0.

    @syms θ, t:: positive
    # Definimos la función vectorial.
    f(t) = pelota(0, 20, θ)
    # Calculamos el instante en que la pelota toca el suelo.
    t₀ = solve(f(t)[2], t)[1]
    # Calculamos los puntos críticos de la derivada de la posición horizontal de la pelota.
    solve(diff(subs(f(t)[1], t=>t₀), θ))
    2-element Vector{Sym{PyCall.PyObject}}:
     -0.785398163397448
      0.785398163397448

    Y ahora para una altura de 100 m.

    using Roots
    @syms θ, t:: positive
    # Definimos la función vectorial.
    f(t) = pelota(100, 20, θ)
    # Definimos la función vectorial.
    t₀ = solve(f(t)[2], t)[2]
    # Calculamos los puntos críticos de la derivada de la posición horizontal de la pelota.
    find_zero(diff(subs(f(t)[1], t=>t₀), θ), 0.5)
    0.3903970673218906
  4. Determinar las componentes tangencial y normal del vector aceleración, para una altura de 100 m, una rapidez de 20 m/s y un ángulo \(\pi/4\). Comprobar que la componente tangencial de la aceleración se anula en el mismo instante en el que la componente normal es máxima y cuando la pelota alcanza la máxima altura.

    La componente tangencial del vector aceleración se puede calcular con la fórmula

    \[ a_T(t) = |\mathbf{v}(t)|' = \frac{\mathbf{f}'(t)\mathbf{f}''(t)}{|\mathbf{f}'(t)|}. \]

    Y la componente normal mediante la fórmula

    \[ a_N(t) = \kappa(t)|\mathbf{v}(t)|^2 = \frac{|\mathbf{f}'(t)\times \mathbf{f}''(t)|}{|\mathbf{f}'(t)|}. \]

    Si la trayectoria no es en el plano real, se pueden aplicar estas fórmulas añadiendo una tercera componente nula.

    Calculamos primero la componente tangencial del vector aceleración.

    using LinearAlgebra
    @syms t::positive
    # Creamos la función vectorial
    f(t) = pelota(100, 20, PI/4)
    # Añadimos una tercera componente nula para estar en el espacio real.
    f3 = push!(f(t), 0)
    # Calculamos la primera derivada (vector velocidad).
    df = diff.(f3, t)
    # Calculamos la segunda derivada (vector aceleración).
    df2 = diff.(df, t)
    # Calculamos la componente tangencial del vector aceleración.
    at = dot(df, df2) / norm(df)

    \(\frac{96.2361 t - 98.1 \sqrt{2}}{\sqrt{100 \left(0.981 t - \sqrt{2}\right)^{2} + 200}}\)

    Y a continuación la componente normal.

    an = norm(cross(df, df2)) / norm(df)

    \(\frac{138.734350468801}{\sqrt{100 \left(0.981 t - \sqrt{2}\right)^{2} + 200}}\)

    Ahora calculamos el instante en el que se anula la componente tangencial.

    solve(at)
    1-element Vector{Sym{PyCall.PyObject}}:
     1.44160403911630

    Finalmente comprobamos que es el mismo instante en el que la componente normal de la aceleración es máxima.

    # Instante en el que la componente normal de la acelaración es máxima.
    solve(diff(an))
    1-element Vector{Sym{PyCall.PyObject}}:
     1.44160403911630

    Y comprobamos también que coincide con el instante en que la pelota alcanza la máxima altura.

    solve(diff(f(t)[2]))
    1-element Vector{Sym{PyCall.PyObject}}:
     1.44160403911630

8.2 Ejercicios propuestos

Ejercicio 8.11 Calcular el módulo del producto vectorial de los vectores \((-\pi,\sqrt{2},1)\) y \((\sqrt{3},-e,-2)\).


 🎁

Ejercicio 8.12 ¿A qué función vectorial le corresponde la trayectoria siguiente?

Select an item

Ejercicio 8.13 Un mosquito sigue la trayectoria de la función \(f(t)=(\cos(t), t/2, \ln(t+1))\). Si en el instante \(t=1\) se sale por la tangente a la trayectoria, ¿a qué distancia del origen de coordenadas estará el mosquito en el instante \(t=2\)?


 🎁

Ejercicio 8.14 ¿Cuál de las siguientes ecuaciones es la del plano normal a la trayectoria de la función \(g(t)=(\cos(t-1), \ln(\sqrt{t}), t^2)\) en el instante \(t=1\)?

Select an item

Ejercicio 8.15 Un avión sigue la trayectoria de la función \(h(t)=(2t^2+t, \operatorname{sen}(t)+2cos(t), e^{-t/2})\).

  1. ¿Qué distancia habrá recorrido desde instante \(t=1\) hasta el instante \(t=5\)?


     🎁
  2. ¿Cuál será la curvatura de la trayectoria en el instante \(t=2\)?


     🎁
  3. ¿Cuál será la torsión de la trayectoria en el instante \(t=2\)?


     🎁

Ejercicio 8.16 Un coche circula por una circuito elíptico cuya trayectoria viene dada por la función vectorial \(f(t)=(400\cos(10t), 100\operatorname{sen}(10t))\), donde \(t\) está dado en minutos y las coordenadas de \(f\) en metros.

  1. Calcular la rapidez del vehículo en el instante \(t=\pi\).


     🎁
  2. Calcular el módulo del vector aceleración en el mismo instante.


     🎁
  3. Calcular la componente tangencial del vector aceleración en ese instante.


     🎁
  4. Calcular la componente normal del vector aceleración en ese instante.


     🎁
  5. Suponiendo que los neumáticos no proporcionan ningún agarre (por ejemplo porque hay hielo en la carretera), ¿Cuál es el mínimo ángulo que debería tener el peralte de la curva en este instante para que el coche no se salga del circuito? Tómese una aceleración debida a la gravedad de \(9.8\) m/s\(^2\).


     🎁