using Plots
using LaTeXStrings
plot([0, 3], [0, 1], arrow = true, linewidth = 2, legend = false)
Plots.annotate!(1.5, 0.4, L"$\mathbf{u}$")
.plot!([0, 1], [0, 2], arrow = true, linewidth = 2)
Plotsannotate!(0.4, 1, L"$\mathbf{v}$")
.plot!([3, 1], [1, 2], arrow = true, linewidth = 2)
Plotsannotate!(2.1, 1.6, L"$\mathbf{u}-\mathbf{v}$")
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.
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\).
using GLMakie
using LaTeXStrings
= Point2(0, 0)
o = Vec2(3, 1)
u = Vec2(1, 2)
v = Figure()
fig = Axis(fig[1,1])
ax arrows!(ax, [o], [u], color = :blue)
text!(ax, 1.5, 0.4, text = L"$\mathbf{u}$")
!(ax, [o], [v], color = :red)
arrowstext!(ax, 0.4, 1, text = L"$\mathbf{v}$")
!(ax, [o+v], [u-v], color = :green)
arrowstext!(ax, 2.1, 1.6, text = L"$\mathbf{u}-\mathbf{v}$")
fig
Ejercicio 8.2 Sean \(\mathbf{u}=(1,2,-1)\) y \(\mathbf{v}=(3,0,2)\) dos vectores del espacio real \(\mathbb{R}^3\).
Calcular el módulo (norma) de ambos vectores y construir vectores unitarios con su misma dirección.
AyudaUsar la función
norm
del paqueteLinearAlgebra
para calular el módulo de un vector.Soluciónusing LinearAlgebra = [-1, 2, -1] u = [-2, 0, 1] v 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]
Calcular su producto escalar.
AyudaUsar la función
dot
del paqueteLinearAlgebra
para calcular el producto escalar de dos vectores.Soluciónprintln("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
Calcular su producto vectorial.
AyudaUsar la función
cross
del paqueteLinearAlgebra
para calcular el producto vectorial de dos vectores.Soluciónprintln("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]
Dibujar \(\mathbf{u}\), \(\mathbf{v}\) y \(\mathbf{u}\times\mathbf{v}\) en el espacio real.
Soluciónusing Plots = u × v uv plot([0, u[1]], [0, u[2]], [0, u[3]], arrow = true, linewidth = 2, xlabel = "X", ylabel = "Y", zlabel = "Z", legend = false) Plots.plot!([0, v[1]], [0, v[2]], [0, v[3]], arrow = true, linewidth = 2) Plots.plot!([0, uv[1]], [0, uv[2]], [0, uv[3]], arrow = true, linewidth = 2) Plots.
using GLMakie = Figure() fig = Axis3(fig[1,1], azimuth = -pi/4, aspect = (1,1,1)) ax = [0, 0 ,0] O arrows!(ax, [Point3(O)], [Vec3(u), Vec3(v), Vec3(u × v)], = [:blue,:red, :green], arrowcolor = [:blue,:red, :green], linecolor = 0.02, arrowsize = Vec3(0.1, 0.1, 0.1)) linewidth fig
Ejercicio 8.3 Dibujar las trayectorias de las siguientes funciones vectoriales.
\(f(t)=(\operatorname{sen}(t), \cos(t))\).
AyudaSoluciónusing Plots f(t) = [sin(t), cos(t)] = range(0, 2pi, length = 200) ts = [f(t)[1] for t in ts] xs = [f(t)[2] for t in ts] ys plot(xs, ys, aspect_ratio = :equal) Plots.
using GLMakie f(t) = [sin(t), cos(t)] = range(0, 2pi, length = 200) ts = Point2.(f.(ts)) points = Figure() fig = Axis(fig[1,1], aspect = 1) ax lines!(ax, points, linewidth = 2, color = :blue) fig
\(\mathbf{g}(t) = (\cos(t), \operatorname{sen}(t), t/4)\).
Solucióng(t) = [cos(t), sin(t), t/4] = range(0, 2pi, length = 200) ts = [g(t)[1] for t in ts] xs = [g(t)[2] for t in ts] ys = [g(t)[3] for t in ts] zs plot(xs, ys, zs, aspect_ratio = :equal, xlabel = "X", ylabel = "Y", zlabel = "Z", label = "") Plots.
using GLMakie g(t) = [cos(t), sin(t), t/4] = range(0, 2pi, length = 200) ts = Point3.(g.(ts)) points = Figure() fig = Axis3(fig[1,1]) ax 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]\).
Dibujar el nudo tórico con \(p=2\) y \(q=3\).
SoluciónUsando el paquete
Makie
.using GLMakie # Definimos las ecuaciones paramétricas del toro. = range(-pi, pi, 100) U = range(-pi, pi, 20) V = [2cos(u) + cos(u) * cos(v) for u in U, v in V] x1 = [2sin(u) + sin(u) * cos(v) for u in U, v in V] y1 = [sin(v) for u in U, v in V] z1 # Inicializamos la figura y los ejes. = Figure() fig = Axis3(fig[1,1], aspect = (3, 3, 1)) ax # Dibujamos el toro. surface!(ax, x1, y1, z1; colormap = :viridis, transparency = true, alpha = 0.5) Makie.# 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. = range(0, 2pi, length = 200) ts = Point3.(f.(ts)) points # Dibujamos el nudo tórico. lines!(ax, points, linewidth = 3, color = :red) fig
Definir una función para crear nudos tóricos con parámetros
p
yq
para los enteros que definen el toro y un parámetro opcional booleanotoro
, para dibujar el toro o no.Soluciónusing 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 = 0.5 alpha else = 0 alpha end # Definimos las ecuaciones paramétricas del toro. = range(-pi, pi, 100) U = range(-pi, pi, 20) V = [2cos(u) + cos(u) * cos(v) for u in U, v in V] x1 = [2sin(u) + sin(u) * cos(v) for u in U, v in V] y1 = [sin(v) for u in U, v in V] z1 # Dibujamos el toro en los ejes. surface!(ax, x1, y1, z1; colormap = :viridis, transparency = true, alpha = alpha) Makie.# 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. = range(0, 2pi, length = 200) ts = Point3.(f.(ts)) points # Dibujamos el nudo tórico. lines!(ax, points, linewidth = 3, color = :red) end = Figure() fig = Axis3(fig[1,1], aspect = (3, 3, 1)) ax nudo_torico(ax, 5, 9, true) fig
Ejercicio 8.5
Calcular las ecuaciones de la rectas tangente y normal a la trayectoria \(\mathbf{f}(t) = (\operatorname{sen}(2t), \cos(t))\) en el punto correspondiente a \(t=\pi/2\) y dibujarlas.
AyudaLa 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\).
La ecuación de la recta normal a la trayectoria de la función vectorial \(\mathbf{f}(t)\) en el instante \(t=a\) es \(\mathbf{f}(a)+\mathbf{N}(a)t\), donde \(\mathbf{N}(a)\) es un vector normal a \(f'(a)\), como por ejemplo \(\mathbf{N}(a) = (f'(a)_2, -f'(a)_1)\).
Soluciónusing SymPy, Plots @syms t::real # Definimos la función vectorial. f(t) = [sin(2t), cos(t)] # Instante = pi/2 a # Dibujamos la trayectoria. plot(f(t)..., 0, 2pi, aspect_ratio = :equal, label = "f(t)=(sen(t), cos(t))") Plots.# Dibujamos el punto de tangencia. scatter!([f(a)[1]],[f(a)[2]], label = "") Plots.# Calculamos la función derivada. = lambdify(diff.(f(t))) df # Calculamos la ecuación de la recta tangente. tl(t) = f(a) + df(a) * t # Dibujamos la recta tangente. plot!(tl(t)..., -1, 1, label = "Tangente") Plots.# Calculamos la ecuación de la recta normal. nl(t) = f(a) - [df(a)[2],-df(a)[1]] * t plot!(nl(t)..., -0.6, 0.6, label = "Normal") Plots.
using SymPy, GLMakie @syms t::real # Definimos la función vectorial. f(t) = [sin(2t), cos(t)] # Instante = pi/2 a # Dibujamos la trayectoria. = range(0, 2pi, 200) ts = Point2.(f.(ts)) points = Figure() fig = Axis(fig[1,1], aspect = DataAspect()) ax lines!(ax, points) # Dibujamos el punto de tangencia. scatter!(Point2(f(a)), color = :red) Makie.# Calculamos la función derivada. = lambdify(diff.(f(t))) df # Calculamos la ecuación de la recta tangente. tl(t) = f(a) + df(a) * t # Dibujamos la recta tangente. = Point2.(tl.(range(-1, 1, 2))) pointstl lines!(ax, pointstl) # Calculamos la ecuación de la recta normal nl(t) = f(a) - [df(a)[2],-df(a)[1]] * t = Point2.(nl.(range(-0.6, 0.6, 2))) pointsnl lines!(ax, pointsnl) fig
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/2\) y dibujarlas.
Soluciónusing SymPy, LinearAlgebra, GLMakie @syms x, y, z, t # Definimos la función vectorial. g(t) = [cos(t), sin(t), sqrt(t)] # Instante = pi/2 a # Dibujamos la trayectoria. = range(0, 2pi, 200) ts = Point3.(g.(ts)) points = Figure() fig = Axis3(fig[1,1], title = "Recta tangente y plano normal a una trayectoria", aspect = :equal) ax lines!(ax, points) # Dibujamos el punto de tangencia. scatter!(Point3(g(a)), color = :red) Makie.# Calculamos la derivada en el punto. = lambdify(diff.(g(t))) dg # Calculamos la ecuación de la recta tangente. tl(t) = g(a) + dg(a) * t # Dibujamos la recta tangente. = Point3.(tl.(range(-pi, pi, 2))) pointstl lines!(ax, pointstl) # Calculamos la ecuación del plano normal = lambdify(solve(dot(([x, y, z] - g(a)), dg(a)), z)[1]) np = range(-1, 1, 2) xs = range(0, 2, 2) ys = [np(x,y) for x in xs, y in ys] zs surface!(ax, xs, ys, zs, colormap = ["red"], alpha = 0.5, transparency = true) Makie. 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.
= range(-pi, pi, 100)
U = range(-pi, pi, 20)
V = [2cos(u) + cos(u) * cos(v) for u in U, v in V]
x1 = [2sin(u) + sin(u) * cos(v) for u in U, v in V]
y1 = [sin(v) for u in U, v in V]
z1 # Inicializamos la figura y los ejes.
= Figure()
fig = Axis3(fig[1,1], aspect = (3, 3, 1))
ax # Dibujamos el toro.
surface!(ax, x1, y1, z1; colormap = :viridis, shading = false, transparency = true, alpha = 0.5)
Makie.# 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.
= range(0, 2pi, length = 200)
ts = Point3.(f.(ts))
points # Dibujamos el nudo tórico.
lines!(ax, points, linewidth = 3, color = :red)
# Punto
= pi/2
a # Dibujamos el punto.
scatter!(ax, Point3(f(a)))
Makie.# Vector tangente unitario.
= lambdify(diff.(f(t)) / norm(diff.(f(t))))
Tan # Vector normal unitario.
= lambdify(diff.(Tan(t)) / norm(diff.(Tan(t))))
Norm # Calculamos la ecuación del plano osculador.
= lambdify(solve(dot(([x, y, z] - f(a)), cross(Tan(a), Norm(a))), z)[1])
po = range(-3, -1, 2)
xs = range(-1, 1, 2)
ys = [po(x,y) for x in xs, y in ys]
zs surface!(ax, xs, ys, zs, colormap = ["magenta"], alpha = 0.8, transparency = true)
Makie. fig
┌ Warning: `shading = false` is not valid. Use `Makie.automatic`, `NoShading`, `FastShading` or `MultiLightShading`. Defaulting to `NoShading`.
└ @ Makie ~/.julia/packages/Makie/YkotL/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.