Ejercicio: 3Eva_2024PAOII_T1 Accidente entre aeronaves
literal a
La distancia entre las aeronaves se determina a partir de las ecuaciones proporcionadas en el enunciado.
La ecuación también mantiene la forma y el mínimo si se utiliza el cuadrado de la distancia:
Las diferencias de distancia por eje pueden ser convergentes hacia el punto de impacto, dado que se conoce que el accidente ya ocurrió. Por lo que también se pueden revisar las distancias entre ejes en lugar de la distancia total en 3D, simplificando un poco el ejercicio. Observe la gráfica proporcionada:
Avión | Helicóptero | distancia por eje |
Ax(t) = 5.1 | Hx(t) = 0.5t | |0.5t-5.1| |
Ay(t) = 0.4t | Hy(t) = sin(0.1t)cos(0.7t)+3.7 | |sin(0.1t)cos(0.7t) + 3.7-0.4| |
Hz(t) = 0.36 | |0.36 – (0.5 e^{-0.2t} + 0.3)| |
Se realiza la gráfica para la distancia al cuadrado Di y las distancias por cada eje dxi, dyi, dzi :
Por lo que el resultado también se podría determinar usando por ejemplo el eje y. La ecuación a buscar la distancia mínima, punto de choque o cruce por cero podría ser:
literal b
Por la gráfica se puede obtener un intervalo de búsqueda entre [8, 12], que usando solo las distancias en el eje y, se tiene:
literal c
Se pide usar un método de búsqueda de raíces, pudiendo seleccionar Bisección en el intervalo encontrado en el literal b.
iteración 1
cambio de signo a la derecha
iteración 2
cambio de signo a la izquierda
iteración 3
cambio de signo a la izquierda
literal d
La variable independiente en el ejercicio es tiempo ‘t’, que podría ser segundos. Si la tolerancia se estima en milisegundos, tolera = 10-3 .
El error se ha calculado en cada iteración
literal e
El error disminuye en cada iteración, por lo que el método converge.
La distancia mínima entre las aeronaves no tiene que llegar a cero para que se produzca un accidente. Las dimensiones de las aeronaves muestran que se encuentran entre 70m y 4 m, por lo que se estima que debe existir una separación mayor a 70 metros en cualquiera de los ejes para evitar un accidente. Si las coordenadas se estiman en Km, la tolerancia sería de 0.070 Km al considerar más de 70 metros como la distancia segura.
literal f
Usando el algoritmo se encuentra la raíz en:
i ['a', 'c', 'b'] ['f(a)', 'f(c)', 'f(b)'] tramo 0 [8, 10.0, 12] [ 1.0564 0.3344 -1.584 ] 2.0 1 [10.0, 11.0, 12] [ 0.3344 -0.5633 -1.584 ] 1.0 2 [10.0, 10.5, 11.0] [ 0.3344 -0.0811 -0.5633] 0.5 3 [10.0, 10.25, 10.5] [ 0.3344 0.1368 -0.0811] 0.25 4 [10.25, 10.375, 10.5] [ 0.1368 0.0302 -0.0811] 0.125 5 [10.375, 10.4375, 10.5] [ 0.0302 -0.0249 -0.0811] 0.0625 6 [10.375, 10.40625, 10.4375] [ 0.0302 0.0028 -0.0249] 0.03125 7 [10.40625, 10.421875, 10.4375] [ 0.0028 -0.011 -0.0249] 0.015625 8 [10.40625, 10.4140625, 10.421875] [ 0.0028 -0.0041 -0.011 ] 0.0078125 9 [10.40625, 10.41015625, 10.4140625] [ 0.0028 -0.0007 -0.0041] 0.00390625 10 [10.40625, 10.408203125, 10.41015625] [ 0.0028 0.001 -0.0007] 0.001953125 11 [10.408203125, 10.4091796875, 10.41015625] [ 0.001 0.0002 -0.0007] 0.0009765625 raíz en: 10.4091796875
Por lo que las coordenadas de choque entre aeronaves será:
Avión | Helicóptero | distancia por eje |
Ax(t) = 5.1 | Hx(t) = 0.5 (10.40) = 5.2 | |5.1-5.2| = 0.1 |
Ay(t) = 0.4(10.4) = 4.16 | Hy(t) = sin(0.1(10.40))cos(0.7(10.40))+3.7 = 4.168 | |4.16 – 4.168| = 0.008 |
= 0.3624 |
Hz(t) = 0.36 | |0.3624 – 0.36| = 0.0024 |
Instrucciones en Python para Gráfica de distancias
import numpy as np import matplotlib.pyplot as plt import sympy as sym # INGRESO # Avión Aterriza Ax = lambda t: 5.1 + 0*t Ay = lambda t: 0.4*t Az = lambda t: 0.5*np.exp(-0.2*t) + 0.3 # helicóptero Hx = lambda t: 0.5*t + 0*t Hy = lambda t: np.sin(0.10*t)*np.cos(0.7*t)+ 3.7 Hz = lambda t: 0.36 + 0*t a = 0 b = 6/0.5 # x entre[0,6] usando gx(t)= 6 muestras = 41 # PROCEDIMIENTO # Distancia por ejes dx = lambda t: Hx(t) - Ax(t) dy = lambda t: Hy(t) - Ay(t) dz = lambda t: Hz(t) - Az(t) # Distancia 3D distancia2 = lambda t: dx(t)**2 + dy(t)**2 + dz(t)**2 # Simulacion en segmento t=[a,b] ti = np.linspace(a,b,muestras) dxi = dx(ti) dyi = dy(ti) dzi = dz(ti) Di = distancia2(ti) # SALIDA print(dy(8)) print(dy(12)) plt.plot(ti,Di, label='Di') plt.plot(ti,dxi,label='dxi') plt.plot(ti,dyi,label='dyi') plt.plot(ti,dzi,label='dzi') plt.xlabel('ti') plt.ylabel('distancia2') plt.grid() plt.legend() plt.show()
Instrucciones en Python – Algoritmo Bisección
# 3Eva_2024PAOII_T1 Accidente entre aeronaves # Algoritmo de Bisección # [a,b] se escogen de la gráfica de la función # error = tolera import numpy as np import matplotlib.pyplot as plt # Algoritmo de Bisección # [a,b] se escogen de la gráfica de la función # error = tolera import numpy as np def biseccion(fx,a,b,tolera,iteramax = 20, vertabla=False, precision=4): ''' 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) if cambia<0: # existe cambio de signo f(a) vs f(b) if vertabla==True: print('método de 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) if vertabla==True: print(itera,[a,c,b],np.array([fa,fc,fb])) if (cambia<0): b = c fb = fc else: a = c fa = fc tramo = np.abs(b-a) if vertabla==True: 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 return(respuesta) # INGRESO fx = lambda t: np.sin(0.10*t)*np.cos(0.7*t)+ 3.7 - 0.4*t a = 8 b = 12 tolera = 0.001 # PROCEDIMIENTO respuesta = biseccion(fx,a,b,tolera,vertabla=True) # SALIDA print('raíz en: ', respuesta)