Ejercicio: 3Eva2026PAOI_T1 Trayectoria paramétrica cerca a origen
La trayectoria de un objeto se describe por las ecuaciones paramétricas mostradas.
x(t)=2.3 \cos(10t) + \cos(23t) y(t)=2.3sen(10t)-sen(23t)intervalo entre [π/2, 19π/32]
literal a
Realice el planteamiento:
Se empieza por determinar la distancia de cada punto en la trayectoria al origen [0,0]
d2= (x2-x1)2 +(y2-y1)2
d = \sqrt{\left(2.3 \cos(10t) + \cos(23t)-0\right)^2+\left( 2.3sen(10t)-sen(23t)-0\right)^2} d = \sqrt{\left(2.3 \cos(10t) + \cos(23t)\right)^2+\left( 2.3sen(10t)-sen(23t)\right)^2}Para encontrar el punto mas cercano se observa el comportamiento de la gráfica dentro del intervalo dada en el enunciado del ejercicio:

Se observa que existen dos mínimos dentro del intervalo, por lo que para el análisis se reduce el intervalo a [π/2, 1.65] enfocando el algoritmo a la primera raíz.
Para encontrar el mínimo se obtienen la derivada de la distancia dfd que se puede simplificar usando las tablas trigonométricas. También es posible realizar la operación con asistencia de la instrucción sym.diff() de Sympy usadas desde la unidad 1 para el Polinómio de Taylor y simplificar la expresión con sym.simplify().
# trayectoria avion y distancia a origen
# literal a
import sympy as sym
# INGRESO
t = sym.Symbol('t')
fx = 2.3*sym.cos(10*t)+sym.cos(23*t)
fy = 2.3*sym.sin(10*t)-sym.sin(23*t)
fd = sym.sqrt(fx**2 + fy**2)
# PROCEDIMIENTO
fd_s = sym.simplify(fd)
dfd = sym.diff(fd_s,t,1)
dfd_s = sym.simplify(dfd)
# SALIDA
print('fd: ',fd)
print('fd simplificado:')
sym.pprint(fd_s)
print("fd':")
sym.pprint(dfd_s)
con lo que se obtiene la expresión para la búsqueda de raíces:
fd: sqrt((2.3*sin(10*t) - sin(23*t))**2 + (2.3*cos(10*t) + cos(23*t))**2)
fd simplificado:
_______________________________________
8.57904423581089⋅╲╱ 0.0625⋅cos(33⋅t) + 0.0854619565217391
fd':
-8.84713936817998⋅sin(33⋅t)
─────────────────────────────────────────
_______________________________________
╲╱ 0.0625⋅cos(33⋅t) + 0.0854619565217391
literal b
Se puede utilizar un método numérico, se escoge Bisección por ser el más básico que el estudiante aprendió en la primeras clases. Aunque se espera que seleccione uno más eficiente.
Siendo la fd' para obtener el cruce por cero, se tiene que:
f(t) = \frac{-8.84713936817998 \sin(33t)}{\sqrt{0.0625\cos(33 t) + 0.0854619565217391}}Se valida el intervalo revisando el cambio de signo:
f \left(\frac{\pi}{2} \right) = \frac{-8.84713936817998 \sin(33\left(\frac{\pi}{2} \right))}{\sqrt{0.0625\cos(33 \left(\frac{\pi}{2} \right)) + 0.0854619565217391}} = -30.2633 f(1.65) = \frac{-8.84713936817998 \sin(33(1.65))}{\sqrt{0.0625\cos(33 (1.65)) + 0.0854619565217391}}= 32.8955con lo que se comprueba el cambio de signo dentro del intervalo seleccionado. Se inician las iteraciones
itera 0
a=π/2, b = 1.65
c = \frac{a+b}{2} = \frac{\frac{\pi}{2}+1.65}{2} = 1.6104 f(1.6104) = \frac{-8.84713936817998 \sin(33(1.6104))}{\sqrt{0.0625\cos(33 (1.6104)) + 0.0854619565217391}}= -14.5607cambio de signo a la derecha: a=1.6104,b =1.65
tramo = |1.65-1.6104| = 0.03960
itera 1
a=1.6104, b = 1.65
c =\frac{1.6104+1.65}{2} = 1.6302 f(1.6302) = \frac{-8.84713936817998 \sin(33(1.6302))}{\sqrt{0.0625\cos(33 (1.6302)) + 0.0854619565217391}}= 20.2057cambio de signo a la izquierda: a=1.6104,b =1.6302
tramo = |1.6302-1.6104| = 0.01980
itera 2
a=1.6104, b = 1.6302
c = \frac{1.6104+1.6302}{2} = 1.6203 f(1.6203) = \frac{-8.84713936817998 \sin(33(1.6203))}{\sqrt{0.0625\cos(33 (1.6203)) + 0.0854619565217391}}= 3.6532cambio de signo a la izquierda: a=1.6104,b =1.6203
tramo = |1.6203-1.6104| = 0.0099
Aun el error o tramo es mayor que la tolerancia del ejercicio de 10-3, por lo que el valor final se lo obtiene usando el algoritmo
literal c
Revisando los errores según los tramos en cada iteración, estos disminuyen, por lo que el método converge. Según la tabla de resultados.txt la raíz se encuentra en raíz en 1.6184 con error de 0.0006187
literal d
los resultados del algoritmo se presentan como:
método de la Bisección
i ['a', 'c', 'b'] ['f(a)', 'f(c)', 'f(b)']
tramo
0 [1.5708 1.6104 1.65 ] [-30.2633 -14.5607 32.8955]
0.03960183660255168
1 [1.6104 1.6302 1.65 ] [-14.5607 20.2057 32.8955]
0.019800918301275727
2 [1.6104 1.6203 1.6302] [-14.5607 3.6532 20.2057]
0.009900459150637753
3 [1.6104 1.6153 1.6203] [-14.5607 -5.8224 3.6532]
0.004950229575318765
4 [1.6153 1.6178 1.6203] [-5.8224 -1.1031 3.6532]
0.0024751147876593826
5 [1.6178 1.6191 1.6203] [-1.1031 1.2804 3.6532]
0.0012375573938296913
6 [1.6178 1.6184 1.6191] [-1.1031 0.0888 1.2804]
0.0006187786969147346
f: -8.84713936817998*sin(33*t)/sqrt(0.0625*cos(33*t) + 0.0854619565217391)
Método de la Bisección
iteraciones: 7
raíz en: 1.6184422864573413
errado: 0.0006187786969147346
la gráfica de búsqueda de raíz es:
![Trayectoria Parametrica Objeto cercano a [0,0] intervalo usado t=[pi/2,1.65]](http://blog.espol.edu.ec/algoritmos101/files/2026/09/TrayectoriaParametricaObjeto03.png)
Algoritmo en Python
Continua a partir de literal a y el método de la bisección publicado como función para observar la tabla y valores a usar en las iteraciones.
# Tema 1 trayectoria avion y distancia a origen
# Método de la Bisección
# [a,b] se seleccionan de la gráfica de f(x)
import numpy as np
# INGRESO
f = sym.lambdify(t,dfd)
# intervalo grafica
a0 = np.pi/2
b0 = np.pi*19/32
# intervalo bUsqueda de raiz
a = np.pi/2
b = 1.65
muestras = 41
tolera = 0.001
verdigitos=4
# PROCEDIMIENTO
def biseccion(fx,a,b,tolera,iteramax = 50,
vertabla=False, precision=6):
'''Algoritmo de Bisección
Los valores de [a,b] son seleccionados
desde la gráfica de la función
error = tolera
'''
fa = fx(a)
fb = fx(b)
tramo = np.abs(b-a)
itera = 0
cambia = np.sign(fa)*np.sign(fb)
tabla=[]
if cambia<0: # existe cambio de signo f(a) vs f(b)
if vertabla==True:
print('método de la Bisección')
print('i', ['a','c','b'],[ 'f(a)', 'f(c)','f(b)'])
print(' ','tramo')
np.set_printoptions(precision)
while (tramo>=tolera and itera<=iteramax):
c = (a+b)/2
fc = fx(c)
cambia = np.sign(fa)*np.sign(fc)
unafila = np.array([a,c,b,fa,fc,fb])
if (cambia<0):
b = c
fb = fc
else:
a = c
fa = fc
tramo = np.abs(b-a)
unafila = np.concatenate([unafila,[tramo]],axis=0)
tabla.append(unafila)
if vertabla==True:
print(itera,unafila[0:3],unafila[3:6])
print(' ',tramo)
itera = itera + 1
respuesta = c
# Valida respuesta
if (itera>=iteramax):
respuesta = np.nan
else:
print(' No existe cambio de signo entre f(a) y f(b)')
print(' f(a) =',fa,', f(b) =',fb)
respuesta=np.nan
tabla = np.array(tabla,dtype=float)
return(respuesta,tabla)
c,tabla = biseccion(f,a,b,tolera,
vertabla=True,
precision=verdigitos)
n = len(tabla)
errado = tabla[n-1,6]
# SALIDA
print('f:', dfd.simplify())
print('Método de la Bisección')
print('iteraciones:',n)
print('raíz en: ',c)
print('errado:',errado)
# GRAFICA
import matplotlib.pyplot as plt
tk = np.linspace(a0,b0,muestras)
fk = f(tk)
plt.plot(tk,fk)
plt.plot(a,f(a),'o',label='[a,f(a)]')
plt.plot(b,f(b),'o',label='[b,f(b)]')
plt.axhline(0)
plt.xlabel('t')
plt.ylabel('f(t)')
plt.title('Intervalo ['+str(a0)+','+str(b0)+']')
plt.legend()
plt.tight_layout()
plt.show()
literal e
Con el algoritmo completo, modifique los parámetros de la ecuaciones iniciales para acercar más la trayectoria al punto 0,0
Por ejemplo disminuya las amplitudes de las sinusoides de 2.3 a 0.9 y observe los resultados. Se adjunta solo la gráfica, realice los cambios como parte de la tarea.

Otras gráficas mostradas en el ejercicio, no obligatorias para el tema se obtienen con instrucciones adicionales:
# Distancia a origen
fdk = sym.lambdify(t,fd)
dk = fdk(tk)
plt.plot(tk,dk)
plt.xlabel('t')
plt.ylabel('d')
plt.title('trayectoria objeto: distancia a [0,0]')
plt.tight_layout()
plt.show()
# Trayectoria avion
fxk = sym.lambdify(t,fx)
fyk = sym.lambdify(t,fy)
xk = fxk(tk)
yk = fyk(tk)
plt.plot(xk,yk)
plt.plot([0],[0],'o')
plt.annotate('[0,0]',xy=[0,0],xytext=[0+0.1,0+0.1])
plt.plot(xk[0],yk[0],'o')
plt.annotate('t0',xy=[xk[0],yk[0]],xytext=[xk[0]+0.1,yk[0]-0.05])
plt.xlabel('x(t)')
plt.ylabel('y(t)')
plt.title('trayectoria objeto')
plt.tight_layout()
plt.show()
literal a (alterno)
A partir de la expresión de la distancia,
d = \sqrt{\left(2.3 \cos(10t) + \cos(23t)\right)^2+\left( 2.3sen(10t)-sen(23t)\right)^2}Si se separa de la magnitud física y se enfoca en la expresión, se puede considerar que los valores mínimos de mantienen al expresar f respecto a d2.
d^2 = \left(2.3 \cos(10t) + \cos(23t)\right)^2+\left( 2.3sen(10t)-sen(23t)\right)^2Con lo que f ya no es distancia, pero mantiene la forma de la gráfica para encontrar el mínimo. La expresión derivada y simplificada con Sympy se convierte en:
fd: (2.3*sin(10*t) - sin(23*t))**2 + (2.3*cos(10*t) + cos(23*t))**2
fd':
-151.8⋅sin(33⋅t)
Queda como tarea realizar los otros literales con ésta opción, el resultado debe ser el mismo que el presentado en el desarrollo anterior.