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