Ajuste de una EDO de segundo orden IVP para incluir parámetros.
Estoy escribiendo un código basado en dos vehículos que se mueven a la misma velocidad, donde uno es el líder y el otro el seguidor. Están separados por 500 pies y la longitud promedio del vehículo es de 15 pies. Ambos se mueven inicialmente a una velocidad de 30 mph antes de que el automóvil líder desacelere a 3 mi/s^2 antes de detenerse por completo.
La ODE de segundo orden dada es:
(xfc – xlc)* (d^2xfc/dt^2) + k* (dxfc/dt) – k*v_lc = 0
dxfc/dt = vfc = v_fco
xfc(t=0) = xfco
Condiciones Iniciales
Velocidad de los vehículos
v_lc = 30
v_fc = 30
Desaceleración de lc
da_lc = -3 #mi/s^2
v_lc1 = 0
Constante de sensibilidad, k (mph)
k = 17
Distancia desde el frente del vehículo líder hasta el frente del vehículo seguidor, d (ft)
d = 500
Longitud promedio del vehículo, x (ft)
x = 15
¿Cómo puedo utilizar esto para incluir la distancia entre los dos vehículos y la desaceleración del vehículo líder?
davy.ai
Para incluir la distancia entre los dos autos y la desaceleración del auto líder en la ecuación diferencial de segundo orden proporcionada, necesitamos modificar la ecuación de la siguiente manera:
[(x_fc – x_lc – d – x)* (d^2x_fc/dt^2)] + k* [(dx_fc/dt) – v_lc – (da_lc*t)] = 0
donde:
– x_fc: distancia desde el comienzo al frente del auto que sigue
– x_lc: distancia desde el comienzo al frente del auto líder
– d: distancia entre el frente del auto líder y el del auto seguidor
– x: largo promedio de los autos
– t: tiempo
– v_fc: velocidad del auto seguidor
– v_lc: velocidad del auto líder
– da_lc: desaceleración del auto líder
– k: constante de sensibilidad
Para implementar esta ecuación en Python, podemos definir una función que tome el tiempo y la posición como entradas y devuelva la velocidad y la aceleración calculadas usando la ecuación mencionada anteriormente. Luego podemos utilizar la función solve_ivp del módulo scipy.integrate para resolver la posición y velocidad del auto seguidor a lo largo del tiempo. Aquí hay un ejemplo de implementación:
import numpy as np
from scipy.integrate import solve_ivp
Parámetros constantes
v_lc = 30 # Velocidad del auto líder
v_fco = 30 # Velocidad inicial del auto seguidor
da_lc = -3 # Desaceleración del auto líder (m/s^2)
k = 17 # Constante de sensibilidad (mph)
d = 500 # Distancia entre el auto líder y el seguidor (ft)
x = 15 # Largo promedio de los autos (ft)
def dxf_dt(t, y):
x_fc = y[0]
v_fc = y[1]
dx_fc = v_fc
dv_fc = ((k(v_lc – v_fc – da_lct))/(x_fc – d – x)) / (d**2)
return [dx_fc, dv_fc]
Resuelve la posición y velocidad del auto seguidor a lo largo del tiempo
time_span = np.linspace(0, 20, 100)
initial_conditions = [0, v_fco]
solution = solve_ivp(dxf_dt, [0, 20], initial_conditions, t_eval=time_span)
Grafica los resultados
import matplotlib.pyplot as plt
plt.figure()
plt.plot(solution.t, solution.y[0])
plt.xlabel(‘Tiempo (s)’)
plt.ylabel(‘Posición del auto seguidor (ft)’)
plt.show()
Este código simula la posición del auto seguidor a lo largo del tiempo, dada su velocidad inicial y la desaceleración del auto líder. El cálculo se realiza utilizando la ecuación diferencial de segundo orden mencionada anteriormente. La salida se grafica utilizando matplotlib.