Oh! Böse Falle! Gut daß ich gefragt hab‘. In allen ‚Sprachen und Dialekten‘ die ich kenne, bedeutet sqr oder sqrt Square-Root.
sqr() ist ^2 und sqrt() ist die Quadratwurzel
bedeutet das, daß für fehlerx immer nur die xe[1] und xe[2] Werte verwendet werden und für die Indices > 2 gar nicht erst ausgerechnet werden müssen?
Es werden nur xe[1] und xe[2] für die Fehlerberechnung verwendet,
EDIT: aber natürlich wird xe[k+1] für die Berchung von xe[k] benötigt.
Ich hab‘ die Erweiterung des Programms nochmal etwas ausführlicher aufgeschrieben und hoffe daß ich es formal richtig habe. Um’s wirkliche Verstehen muß ich mich noch kümmern.
Vorab aber noch eine Frage: Du setzt die Fibonacci-Reihe [1,2,3,5,8,13,21] mit s[j = 1 bis 6] gleich. Wieso nicht mit s[j = 1 bis 7] oder s[j = 0 bis 6]?
Die Frage verstehe ich nicht. Alle Schrittanzahlen müssen verschieden sein, sonst teilst du bei der fakt-Berechnung durch 0. Also Fibonaccifolge (nicht Reihe) ohen erste 1. Außerdem solltes du wirklich besser die harmonische Reihe nehmen. Die Rundungsfehler sind im Vergleich zu dem Fehler, dass du nicht relativistisch rechnest in Planetensystemen zu vernachlässigen. Nimm also vorerst s[j]=j
Die Unterstriche zum Einrücken zwingt mir dieser Editor hier auf.
Dim N ___________________________// Anzahl der Objekte
N = Anzahl der Objekte
Dim X[1:N,1:3]____________________// Positionen in x, y und z
Dim V[1:N , 1:3]___________________// Geschwindigkeiten in x, y und z
Dim ex ___________________________//Anzahl der Extrapolationsstufen
ex = 7
versuche zuerst ex=1 und ex=2 und erst wenn es läuft mehr
Dim Xe[1:ex,1:N,1:3]_______________// Extrapolierte Positionswerte
Dim Ve[1:ex,1:N,1:3]_______________// Extrapolierte Geschwindigkeitswerte
Dim Xalt[1:N,1:3]__________________// Archiv für die Ausgangswerte dieses Schrittes
Dim Valt[1:N,1:3]
Dim s[ex]_________________________// Faktor für die Testschrittweiten
Wozu werden die 3 Zeitschritte benötigt?
Dim kleinsterZeitschritt
Dim größterZeitschritt
Dim AktuellerZeitpunkt
Dim faktor________________________// Extrapolationsfaktor
Dim dt___________________________// Zeitteilschritt um zu DT zu kommen
Dim Dt___________________________// maximaler Zeitschritt der noch getestet wird
Dim n____________________________// Anzahl der Zeitschritte die sich aus Dt/dt ergibt
Dim i, j, k_________________________// Laufvariable
...
...
...
// Do dieses Programm so lange, bis der gewünschte Gesamtzeitrahmen erfüllt ist.
DT = größterZeitschritt
// erst mal Startwerte beschaffen
AktuellerZeitpunkt = 0
kleinsterZeitschritt = 10_______________________________// Sekunden
größterZeitschritt = 10 * 21____________________________// 10 * 7te Fibonacci-Zahl
j = 1
s[j]=1
dt = kleinsterZeitschritt _______________________________// oder muß das hier dt = DT lauten?
AktuellerZeitpunkt=startzeitpunkt
Startwerte für X und V beschaffen
DT=100000 _________//Großer Zeitschritt in Sekunden
(X[ 1:N,1:3 ] , V[1:N ,1:3 ])=Algorithmus1(X[1:N,1:3 ] , V[1:N,1:3 ],dt,n=s[j])
Warum zuerst einen Schritt mit Alg1?? das würde die Konvergenzrate zerstören.
// Zuordnung der Fibonacci-Zahlen
s[1] = 1
s[2] = 2 ____// !!
For j = 3 To ex
s[j]=s[j-1]+s[j-2]
Next j
// Harmonische Reihe
For j = 1 To ex
s[j]=j
Next j
While AktuellerZeitpunkt<endzeitpunkt
// Archivieren der Startwerte
Xalt[1:N,1:3] = X[1:N,1:3]
Valt[1:N,1:3] = V[1:N,1:3]
for j=1 to ex
_____X[1:N,1:3] = Xalt[1:N,1:3]
_____V[1:N,1:3] = Valt[1:N,1:3]
_____dt = DT / s[j]
_____// berechne neue X,V zum Zeitpunkt t+DT mit obigem Algoritmus1 in n=s[j] Schritten und _____// Schrittweite DT
_____// hast Du geschrieben, aber es müßte dt heißen, vermute ich.
richtig, war ein Schreibfehler
_____(X[ 1:N,1:3 ] , V[1:N ,1:3 ])=Algorithmus1(X[1:N,1:3 ] , V[1:N,1:3 ],dt,n=s[j])
_____xe[j,1:N,1:3]=X[1:N,1:3]
_____ve[j,1:N,1:3]=V[1:N,1:3]
_____If j>1
__________// Extrapolationschritt
__________For k = j - 1 Bis 1 Schrittweite -1
_______________faktor = 1 / ((s[j]/s[k])^2 - 1)
_______________xe[k,1:N,1:3]=xe[k+1,1:N,1:3]+(xe[k+1,1:N,1:3]-xe[k,1:N,1:3])*faktor
_______________ve[k,1:N,1:3]=ve[k+1,1:N,1:3]+(ve[k+1,1:N,1:3]-ve[k,1:N,1:3])*faktor
__________Next k
__________// Fehlerberechnung
_________ fehlerx=0
fehlerv=0
summier er hier auch auf?
__________fehlerx = fehlerx + (xe[1,1:N,1:3] - xe[2,1:N,2,1:3])^2 _______// Zu den Indices:
__________fehlerv = fehlerv + (ve[1,1:N,1:3] -ve[2,1:N,1:3])^2 ________// Siehe Frage oben
_____EndIf
Next j
X[1:N,1:3] = xe[1,1:N,1:3]
V[1:N,1:3] = ve[1,1:N,1:3]
// nun enthält x und v Ort und Geschwindigkeit zum Zeitpunkt t+DT
AktuellerZeitpunkt=AktuellerZeitpunkt + DT
// Until der gewünschte Gesamtzeitrahmen erfüllt ist. Siehe oben