¿Cuántos dígitos significativos debo usar para simular ecuaciones de movimiento de aeronaves?

He codificado las ecuaciones de movimiento en Matlab y estoy usando la función ode45 para simular la dinámica no lineal del F/A-18 Hornet sin ningún controlador (solo el fuselaje). He dado condiciones iniciales como condiciones de ajuste.

d2r = pi/180;           % degree to rad

V       =  438.653328;  % Airspeed , ft/s
beta    =  0*d2r;       % Sideslip Angle, rad
alpha   =  10*d2r;      % Angle-of-attack, rad

p       =  0*d2r;       % Roll rate, rad/s
q       =  0*d2r;       % Pitch rate, rad/s
r       =  0*d2r;       % Yaw rate, rad/s

phi     =  0*d2r;       % Roll Angle, rad
theta   =  10*d2r;      % Pitch Angle, rad
psi     =  0*d2r;       % Yaw Angle, rad

pN = 0;                 % X position in Earth Frame, ft
pE = 0;                 % Y position in Earth Frame, ft
h = -25000;             % Z position in Earth Frame, ft

Durante la primera iteración, C_m tiene un valor pequeño muy positivo (1e-10), lo que genera cierto momento de cabeceo cuando se multiplica por S, c y qbar (aunque es pequeño). Pero, a medida que el tiempo sigue aumentando, este valor de C_m sigue aumentando y, como resultado, se crea un gran momento. Debido a la alta precisión de Matlab, el coeficiente de momento de cabeceo no es para la condición de asiento dada.

Mi pregunta es: ¿debo redondear los valores de C_m a 3 o 4 dígitos? Al redondear, C_m será cero y obtendré M como cero.

La siguiente figura muestra cómo varía la velocidad con el tiempo cuando se dan las condiciones iniciales antes mencionadas.

Esta cifra se obtiene luego de redondear C_m a 4 dígitos significativos .

ingrese la descripción de la imagen aquí

Esta cifra se obtiene sin redondear C_m a 4 dígitos significativos.ingrese la descripción de la imagen aquí

Valores alfa y theta sin redondeo C_m.ingrese la descripción de la imagen aquí

Espera, ¿por qué aumenta C_m ( coeficiente de momento de cabeceo de todo el avión)? ¿Cuál es el valor (o al menos el signo) de su componente principal, el C metro α (o norte z ) derivado? Debería determinar la estabilidad del tono, dado que el resto es básicamente amortiguación. Si es estable en tono (la derivada es negativa), los errores de cálculo no deberían ser significativos.
El signo del momento de cabeceo es positivo, lo que indica que es inestable. Entonces, sin control externo, no estará en equilibrio (independientemente de la entrada de condición de ajuste), ¿verdad?
Me parece que la tasa de simulación es demasiado baja. El redondeo de los números podría generar mejores resultados simplemente porque se alinea mejor con la tasa de simulación. (Creo que se llama efecto de aliasing)
Momento de cabeceo positivo simplemente significa morro hacia arriba. Lo que determina la estabilidad es su derivación (por ángulo de ataque o aceleración normal), que es un parámetro del propio modelo. (Es, por supuesto, una función de otros parámetros como la ubicación del CG). Si la derivada es positiva, el modelo/avión es inestable y no importa mucho qué tipo de perturbación induzcas. Si haces trampa con C_m, verás inestabilidad en el momento en que comiences a cambiar otras cosas (por ejemplo, el control de vuelo normal).
De hecho, a juzgar por el último gráfico que agregó (entiendo que es la velocidad del aire, pero el tono o el alfa serían más indicativos), el modelo es estable. Es solo que la condición de ajuste inicial está un poco apagada y se acumula con el tiempo, lo que da como resultado un movimiento phugoide típico. Al reducir la precisión, lo está obligando a estar 'en' ajuste. Básicamente, parece que no hay nada malo con el modelo tal como está. Si agrega control, debería poder volarlo.
He agregado la trama para alfa y theta.
@Pavan No debes truncar nada artificialmente. ¿Es posible que sea solo un mal punto de ajuste? Según sus nuevos gráficos, parece que el modelo está tratando de estabilizarse en otro lugar.
@JZYL, seguramente lo investigaré.

Respuestas (2)

Según su descripción, no es un problema con los coeficientes aerodinámicos. Si, como ha descrito anteriormente , está modelando un F-18, entonces el fuselaje debería ser inestable longitudinalmente. Una desviación de 1e-10 (suponiendo que se aplique también a las tasas y velocidades del cuerpo, etc.) está dentro del límite típico del error de compensación; de hecho, una desviación es inevitable cuando se trata de punto flotante computacional. Pero si es longitudinalmente inestable, cualquier desviación se magnificará exponencialmente con el tiempo.

Hasta donde yo sé, el F/A-18 (AD) 'original' es estáticamente estable. EF se trata de neutral o marginalmente inestable. No esperaría que su modelo abandone significativamente la condición de ajuste (sin perturbaciones externas) en menos de 7-10 segundos...
@JZYL, como dijiste, el valor de 1e-10 está dentro del error de ajuste, ¿debería redondearlo? Porque Matlab no lo considera cero y crece con el tiempo.
@Zeus, como dijiste, la velocidad es constante durante los primeros 45 segundos.

Las computadoras en estos días no se preocupan por los "dígitos decimales significativos" para el cálculo, ya que utilizan la representación binaria IEEE-754 internamente. Los tamaños de número típicos son float(la mayoría de las veces 32 bits en estos días) y double(la mayoría de las veces 64 bits). C ofrece precisión extendida de 80 bits ( long double) y, a veces, está disponible el doble de 128 bits. Puedes leer sobre tallas aquí . Además, algunos lenguajes y paquetes de programación pueden hacer una precisión arbitraria, pero generalmente es lento.

A menudo hay "casos de esquina" en el modelo que pueden requerir una precisión inusualmente alta. Por ejemplo, la expresión (a-b)/(c-d)puede ser muy difícil de calcular cuando ase acerca a bmientras cse acerca a d. Debido a tales casos, normalmente prefiero usar la precisión más alta disponible (el doble menos largo) en las simulaciones. Incluso puede haber casos de esquina que requieran aritmética de tipo complejo, incluso si tanto la entrada como el resultado son del tipo real ( sqrt(-1)**2).

Los tamaños más pequeños a menudo ni siquiera son más rápidos. A veces tienen sentido si trabaja con matrices de datos tan grandes que la memoria se convierte en un problema, o si usa una tarjeta GPU de jugador para computación que no cuenta con doble precisión.

Para informes legibles por humanos, es común dejar suficientes dígitos decimales para representar el valor con precisión conocida, o uno más, pero no más. Por ejemplo, si el valor se conoce con una precisión de 0,1, podría imprimirse como 0,6 o 0,66, por ejemplo, pero no como 0,6666666666666666. Pero si esta salida de texto no es para humanos y será leída por una computadora, no hay razón para limitar la cantidad de dígitos. Además, si conoce más dígitos, el redondeo solo puede hacer lo mismo o peor.

Todo esto no es relevante para la pregunta, pero no puedo evitar señalar que la precisión de 80 bits es una característica de la Intel FPU (y algunas otras), en lugar de la de C. De hecho, C no garantiza mucho a este respecto; específicamente, en Visual C long double es de 64 bits , mientras que en gcc es de 80 en el mismo hardware.