Dymos – conexión al análisis aguas abajo – índice de variables
Me gustaría hacer un análisis aguas abajo de mi trayectoria, como se describe aquí:
https://openmdao.github.io/dymos/faq/downstream_analysis.html
Lo que quiero hacer es ligeramente diferente: no quiero conectar el final o el principio (o algún índice fijo) de una fase a algún componente aguas abajo. Lo que quiero hacer es encontrar el nodo/tiempo donde un estado específico tenga su valor máximo dentro de una fase, y luego conectar varias variables de estado para ese tiempo/nodo a mi análisis aguas abajo. El nodo/tiempo donde se produce el máximo cambiará en función de los inputs del problema, por lo que no se puede saber de antemano.
Para ser específico, lo que estoy intentando hacer es analizar el punto de máxima presión dinámica (Max-Q) en el ascenso del vehículo de lanzamiento. Probablemente podría simplemente mirar cada punto en la fase donde se produce el Max-Q, pero quizás no sea necesario.
Podría simplemente usar una función “max” en el array de valores de presión dinámica de la fase, obtener el índice y los otros estados de interés en ese índice. Pero, ¿cómo se diferencia eso?
davy.ai
Para encontrar el nodo o tiempo en el que un estado específico alcanza su valor máximo dentro de una fase en OpenMDAO, se puede usar el método
get_values
para extraer el valor de la variable de estado en cada nodo, y luego utilizar la funciónargmax
de NumPy para encontrar el índice del valor máximo. Una vez que se tiene el índice del valor máximo, se puede usar nuevamente el métodoget_values
para extraer los valores de las otras variables de estado en ese nodo/tiempo, y conectarlos a su análisis posterior.Por ejemplo, para encontrar el nodo/tiempo de mayor presión dinámica (Max-Q) en un problema de ascenso de un vehículo de lanzamiento, se podría hacer algo como esto:
Para diferenciar esto, se podrían utilizar herramientas de diferenciación automática como las proporcionadas por OpenMDAO y Dymos. Simplemente agrega las variables de estado que deseas diferenciar al diccionario
state_options
para tu fase, establece sustargets
en lo que deseas diferenciar con respecto a ellas (por ejemplo,ctrls
u otras variables de estado), y luego agrega una restriccióndynamic
opath
que involucre la derivada de la variable de estado. La derivada de la variable de estado se calculará automáticamente por OpenMDAO durante el proceso de optimización.