DAS Forum für Enthusiasten
L1 berechnen
- Rainer Raisch
-
Autor
- Offline
- Moderator
-
- Beiträge: 3083
- Thanks: 514
L1 berechnen
2 Tage 11 Stunden her - 2 Tage 11 Stunden her
Es geht um den Lagrangepunkt von zwei beliebigen Körpern mit den Massen M und m im stabilen (Kreis)-Orbit im Abstand bzw Radius D.
Es ist natürlich eine (blitzschnelle) Iteration, für die Darstellung als Kurve geht aber die Umkehrfunktion.
Der Eingbewert ist my = m/(M+m) = 1/(1+M/m) < 0,5 oder my = M/(M+m) = 1/(1+m/M) > 0,5 und der Rückgabewert ist fn_Li(my)=Li/D
function fn_Li(my) {
//plausi
if (my > 1) return err("maximal fn_Li(1)"), -999;
if (my < 0) return err("mindestens fn_Li(0)"), -999;
// 1. Robuster Startwert (Hill-Radius)
let li = Math.cbrt(my / 3);
let li_alt = 0;
let count = 0;
// 2. Die Schleife (Konvergenz-Garantie)
// Wir iterieren, bis die Änderung kleiner als das Maschinen-Epsilon ist
// oder maximal 10 Mal (für L1 reicht das locker)
while (Math.abs(li - li_alt) > 1e-17 && count < 100) {
li_alt = li;
// Ihr heute verifizierter "Klammer-Marathon"
// Nutzt Math.cbrt für Vorzeichensicherheit
let zaehler = my * Math.pow(1 - li, 2);
let nenner = (li * li) + li * (my - 3) + (3 - 2 * my);
li = Math.cbrt(zaehler / nenner);
count++;
}
// alert(count);
return li;
}
Es ist natürlich eine (blitzschnelle) Iteration, für die Darstellung als Kurve geht aber die Umkehrfunktion.
Der Eingbewert ist my = m/(M+m) = 1/(1+M/m) < 0,5 oder my = M/(M+m) = 1/(1+m/M) > 0,5 und der Rückgabewert ist fn_Li(my)=Li/D
function fn_Li(my) {
//plausi
if (my > 1) return err("maximal fn_Li(1)"), -999;
if (my < 0) return err("mindestens fn_Li(0)"), -999;
// 1. Robuster Startwert (Hill-Radius)
let li = Math.cbrt(my / 3);
let li_alt = 0;
let count = 0;
// 2. Die Schleife (Konvergenz-Garantie)
// Wir iterieren, bis die Änderung kleiner als das Maschinen-Epsilon ist
// oder maximal 10 Mal (für L1 reicht das locker)
while (Math.abs(li - li_alt) > 1e-17 && count < 100) {
li_alt = li;
// Ihr heute verifizierter "Klammer-Marathon"
// Nutzt Math.cbrt für Vorzeichensicherheit
let zaehler = my * Math.pow(1 - li, 2);
let nenner = (li * li) + li * (my - 3) + (3 - 2 * my);
li = Math.cbrt(zaehler / nenner);
count++;
}
// alert(count);
return li;
}
Letzte Änderung: 2 Tage 11 Stunden her von Rainer Raisch.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Re: L1 berechnen
1 Tag 21 Stunden her
Ich sehne mich nach den Zeiten ohne KI herbei.
Niemand ist unantastbar.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Re: L1 berechnen
1 Tag 20 Stunden her - 1 Tag 14 Minuten herIch muss mir immer alles anschauen können würde es in der Test Version wohl eher so schreiben.
count++;
}
// alert(count);
}
Code:
count++;
console.log(count); // Jeder schritt einschließlich Endergebnis
}
console.log(count); // Nur Endergebnis
Dann im Browser F12 ->Konsole sehr viel informativer als der alert();
Die count Ausgabe ist jetzt nicht so Interessant aber geht halt mit jeden Wert in dem Loop.
NULLIUS IN VERBA
"Zu nah an der Wahrheit
Zu nah am Leben
Zu penetrant um
Ignoriert zu werden" Böhse Onkelz 1996
"Gedankenexperimente beginnen bei mir grundsätzlich im leeren Raum." Ich! Hier, am 18.05.2024
"Zu nah an der Wahrheit
Zu nah am Leben
Zu penetrant um
Ignoriert zu werden" Böhse Onkelz 1996
"Gedankenexperimente beginnen bei mir grundsätzlich im leeren Raum." Ich! Hier, am 18.05.2024
Letzte Änderung: 1 Tag 14 Minuten her von FabsOtX.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Re: L1 berechnen
23 Stunden 57 Minuten herIch sehne mich nach den Zeiten ohne KI herbei.
Warum?
Orginal
Code:
let zaehler = my * Math.pow(1 - li, 2);
let nenner = (li * li) + li * (my - 3)
+ (3 - 2 * my);
li = Math.cbrt(zaehler / nenner);
Optimiert
Code:
const my3 = my - 3;
const c32my = 3 - 2 * my;
let d = 1 - li;
li = Math.cbrt((my * d * d) /
(li * li + li * my3 + c32my));
Die Original-Version nutzt Math.pow(), was flexibel, aber rechenintensiv ist. Die optimierte Version berechnet Invarianten (Werte, die sich in der Schleife nicht ändern) vorab, was bei großen Datenmengen oder Echtzeit-Visualisierungen die CPU entlastet.
Test:
Zeit (1 Mio. Aufrufe) Org. = 859 ms Opt. = 781 ms
NULLIUS IN VERBA
"Zu nah an der Wahrheit
Zu nah am Leben
Zu penetrant um
Ignoriert zu werden" Böhse Onkelz 1996
"Gedankenexperimente beginnen bei mir grundsätzlich im leeren Raum." Ich! Hier, am 18.05.2024
"Zu nah an der Wahrheit
Zu nah am Leben
Zu penetrant um
Ignoriert zu werden" Böhse Onkelz 1996
"Gedankenexperimente beginnen bei mir grundsätzlich im leeren Raum." Ich! Hier, am 18.05.2024
Danke von: Rainer Raisch
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Rainer Raisch
-
Autor
- Offline
- Moderator
-
- Beiträge: 3083
- Thanks: 514
Re: L1 berechnen
12 Stunden 25 Minuten her - 12 Stunden 8 Minuten herIch mag keine Konsole, die stört doch nur. Und wo da etwas außer Fehlern angezeigt wird, habe ich noch nicht herausgefunden. Na das habe ich wohl deaktiviert.Ich muss mir immer alles anschauen können würde es in der Test Version wohl eher so schreiben.
Es ging ja nur um die Fehlerkontrolle, weil er abgestürzt ist, bzw weil er gar nicht aufgerufen wurde und schon vorher abstürzte.
Inzwischen lege ich mir allerdings ein Logbuch an:
logbuch("loops in fn_Li: "+count);
Du hast vollkommen Recht, allerdings dauert es keinen Wimpernschlag, weil meine Formel von Haus aus optimiert ist. und der Anfangswert mit der Daumenformel fast schon eine Punktlandung ist. Da schaue ich mir die Lösung der KI gar nicht so genau an. Aber diese Marotte mit Math.pow kann ich ihm nicht austreiben. Bei jeder Korrektur baut er es wieder ein.Optimiert
Ja wie dicht hast Du die Gesamtkurve denn berechnet. 0,5/1000000Zeit (1 Mio. Aufrufe) Org. = 859 ms Opt. = 781 ms
Dafür genügt wie gesagt die Umkehrfunktion ohne Iteration. Das muss man dann nur spiegeln bzw eben in der Grafik y und x vertauschen.
Letzte Änderung: 12 Stunden 8 Minuten her von Rainer Raisch.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Infos
Copyright © 2026 Umwelt-Wissenschaft. Alle Rechte vorbehalten.
Joomla! ist freie, unter der GNU/GPL-Lizenz veröffentlichte Software.
Entwicklung und Design: It Prisma