Ich bin jetzt auf die Schnelle nicht durch deine Berechnungen gestiegen, würde dir aber den Tipp geben bei Berechnungen wie "p = 1 - (0.0065 * pos_z / 288.15)" und "druck = 9.80665 / 0.0065 / R" großzügig mit Klammern umzugehen. Meiner Erfahrung nach entstehen gerade bei solchen Termen gerne Fehler, weil man dem Programm ganz genau beipulen muss, welche Terme zusammen gehören und welche Terme Priorität haben.
Was die Lesbarkeit angeht bin ich da voll bei dir. Was die "Priorität" angeht hab ich jetzt Schwierigkeiten zu folgen. Für den Compiler / Interpreter wird das nicht gebraucht. Oder hab ich dich einfach falsch verstanden ?
Ich würde noch einen weiteren Punkt hinzufügen. Vermeide Konstanten in numerischer Form in Quelltexten. Das spielt für die Performance keine Rolle - erhöht aber die Lesbarkeit und vermeidet Tippfehler.
PHP:
const double temp_std = 288.15;
Die Codeschnipsel werden auch lesbarer, wenn man die hier mit dem PHP-Tag versieht.
T = 288.15 - (0.0065 * pos_z);
p = 1 - (0.0065 * pos_z / 288.15);
Vermeide doppelte Berechnungen:
hier besser
p = Math.pow(p, druck);
p = p * 101325;
Sowas ist ganz schwer zu debuggen. Wenn du zu einem bestimmten Zeitpunkt pausierst musst du ständig im Hinterkopf haben was p denn jetzt gerade sein soll. Wenn du mehrere Schritte brauchst, dann nimm auch mehr (temporäre) Variablen. Eine Variable sollte niemals die Einheit wechseln. Später, wenn dir der Code nicht mehr so parat ist, dann hilft das auch ungemein, wenn du bereits bei der Deklaration von Variablen einen Kommentar dabei schreibst in welcher Einheit die Werte der Variablen gültig sind.
PHP:
const double p0 = 101325;
...
p = p0 * Math.pow(pRel, druck);
x_pkt_pkt = FT [Schub in N] - (sinus(gamma) * FG + FW);
x_pkt_pkt = x_pkt_pkt / gewicht;
v = x_pkt = x_pkt_pkt * dt;
a = x_pkt_pkt;
x_neu = x_alt + v * dt + 0.5 * a * dt^2;
v_neu = v_alt + a * dt;
x_erde = x_erde + v_neu * cosinus(gamma) * dt;
s.o. - beim Debuggen schwer zu behandeln.
PHP:
Fx = FT [Schub in N] - (sinus(gamma) * FG + FW); // X-Achse ist hier entlang der Flugzeugachse - ist das so gewollt ?
Ax = Fx / masse;
v_neu = v_alt + a * dt;
x_neu = x_alt + v_neu * dt;
x_erde += v_neu * dt * cosinus(gamma);
Ein Problem ist in meinen Augen deine Wahl von x mit einem Koordiantensystem, dass sich auf das Flugzeug bezieht. Wenn sich gamma ändert, dann musst du das einrechnen. Das macht aber gar keinen Spass und ist in meinen Augen auch ziemlich unnötig. Wenn du erdfeste Koordinaten nimmst hast du das Problem nicht. Kräfte bezogen auf das Koordinatensystem sind unproblematisch. Raumkoordinaten damit schon.
PHP:
// spezifisch für deine Simulation
Fx = cos(gamma) * (FT [Schub in N] - FW) - sinus(gamma) * FG;
Fy = sin(gamma) * (FT [Schub in N] - FW) - cosinus(gamma) * FG;
// allgemein - unabhängig vom simulierten Objekt
A_x = Fx / masse;
A_y = Fy / masse;
V_x += A_x * dt;
V_y += A_y * dt;
pos_x += V_x * dt;
pos_Y += V_y * dt;
Das läßt sich vektoriell natürlich noch einfacher gestalten - entsprechend einfach Arrays verwenden.
Bei sich ändernden Werten von F / A / V ist diese Form der Integration natürlich ungenau. Das kann man durch eine kleine Wahl von dt natürlich deutlich verbessern. Noch besser ist aber z.B. eine Integration nach Runge Kutta (oder ähnlichem). Für die Validierung deiner Testdaten sollte das aber noch nicht relevant sein.