Estoy tratando de hacer un código para predecir el rendimiento de un cohete sonoro que quiero construir. Para hacer esto, necesito la densidad atmosférica en cualquier punto del vuelo para la simulación de paso de tiempo que realicé.
Obtuve mi densidad atmosférica en slug / ft ^ 3 de https://www.engineeringtoolbox.com/standard-atmosphere-d_604.html y ponga todos esos datos en este script de python, bajo el supuesto de que la función que mejor describa estos datos sería una exponencial negativa.
from scipy import optimize
import numpy as np
import matplotlib.pyplot as plt
def fxn(x, a, b, c):
return a*np.exp(-b*x) + c
altitudes = np.array([0,5000,10000,15000,20000,25000,30000,35000,40000,45000,50000,60000,70000,80000,90000,100000,150000,200000,250000])
density1 = np.array([23.8,20.48,17.56,14.96,12.67,10.66,8.91,7.38,5.87,4.62,3.64,2.26,1.39,.86,.56,.33,.037,.0053,.00065])
altitudeLinSpace = np.linspace(0,500000,500000)
#Popt returns a array containing constants a,b,c... etc for function 'fxn'
popt, pcov = optimize.curve_fit(fxn, altitudes, density1, p0=(1, 1e-6, 1))
print(popt)
#Plots data
plt.grid(True)
plt.ylim((0,25))
plt.plot(altitudes, density1)
plt.plot(altitudeLinSpace, fxn(altitudeLinSpace, popt[0], popt[1], popt[2]))
plt.show()
Lo que me da este gráfico cuando graficar la solución (Altitud ft (x), densidad en slug / ft ^ 3 * 10 ^ -4 (y)):
La curva naranja es lo que Python encontró como solución, el azul es el gráfico de los datos que utilicé para el ajuste de curvas. Debido al mal ajuste, supongo que los datos no son en realidad un exponencial negativo, pero no estoy realmente seguro de cómo determinar el tipo de función que podría ser ...
No estoy buscando la perfección, pero usar un polinomio no es una solución ideal aquí, ya que las "ondulaciones" dan demasiado error a mayores altitudes.
Cualquier sugerencia sobre cómo podría encajar mejor estos datos sería muy apreciada!
Solución de Math SE: https://math.stackexchange.com/questions/3009560/curve-fitting-atmosphere
fuente
Respuestas:
Aquí están ajustando los resultados con la ecuación mostrada.
Cualquier mayor precisión requiere un modelo más allá de este ajuste semi-empírico muy crudo. Preste atención a los límites de confianza (1 $ \ sigma $ valores). Para el primer orden, se pueden propagar a través de su ecuación de predicción utilizando un análisis de incertidumbre lineal. Esto puede ayudarlo a decidir si se necesita un esfuerzo adicional para ser más preciso, por ejemplo, dividiendo las regiones de presión y / o obteniendo datos de mayor resolución (más puntos de datos en el rango completo o deseado).
fuente
En lugar de una curva de ajuste, ¿por qué no hacer una interpolación de los datos? La interpolación spline cúbica debe dar suficiente precisión. Mira scipy.interpolate
fuente
La densidad varía exponencialmente, pero a la velocidad depende no solo de la altitud sino también de la temperatura.
fuente
fuente
Si desea un ajuste más preciso, tendrá que dividirlo en capas atmosféricas:
y ajuste el exponente en cada uno de estos, posiblemente introduciendo umbrales adicionales para la estratosfera (a 20 km y 35 km), una spline creada de curvas exponenciales. Tratar de encontrar una función simple y única que se ajuste a la realidad con este tipo de complejidad es un intento equivocado.
fuente