Zitat Zitat von Desmulator Beitrag anzeigen
Code:
int depth = 0;
while(depth != -1){
    L[depth].value += L[depth].delta;
    if(L[depth].value > L[depth].max) { L[depth].value = L[depth].min; depth--; }
    if(depth = L.size()-1) { code. }
    else { depth++ };
}
Wow .. das ist wirklich eine klevere Loesung ^__^

Nun ja .. ich habs mittlerweile umstrukturiert und doch mit Rekursion gemacht.
Allerdings finde ich das Thema interessant genug, um es hier weiter zu verfolgen. Ist ja ohnehin nicht allzuviel los.

Worum es geht ...
In einem Inputfile bastel ich ueber Schluesselwoerter eine Modellfunktion zusammen, die von meheren nichtlinearen (P0 bis Pn) und meheren linearen (A0 bis Am) Parametern abhaengt.

F = A[0] * f[0](P0, P1, ..., Pn) + A[1] * f1(P0, P1, ..., Pn) + ... A[m-1] * f[m-1](P0, P1, ..., Pn) + A[m]

Die nichtlinearen P Parameter (effektiv Achsen in hochdimensionalen Raeumen) werden dann nach Benutzervorgabe mit den Schleifen abgerastert. An jedem Punkt wird ueber die restlichen linearen Parameter A0 bis Am eine multilineare Optimierung durchgefuehrt und die Regressionsguete R2 bestimmt. Danach wird, um moeglichst das Globale Optimum im Parameterraum P zu finden vom Rasterpunkt mit bester Regressionsguete eine nichtlineare Optimierung ueber alle Parameter P0 bis Pn und A0 bis Am gemacht.

Da die Anzahl der Parameter ( m und n ) vom Inputfile abhaengt, weiss man vorher nicht, wieviele Schleifen ineinander zu schachteln sind. Zudem sind die Funktionen f als Klassen (mit einer vrtuellen Methode) vom selben Basistyp abgeleitet um maximale Erweiterbarkeit zu gewaehrleisten. Nicht alle Funktionen f brauchen alle Parameter P0 bis Pn (die meisten haben nur 1 oder 2 Parameter). Das ganze laeuft dann ueber einen Levenberg-Marquardt-Solver zur Ermittlung minimaler Fehlerquadrate (Regression) bezueglich einiger Messwerte. Die Funktionen f sind selbst hochkomplexe Berechnungen aus quantenchemischen Rechnungen.

Wie man sieht, wird der Code nicht einfach haeufig ausgefuehrt, sondern die Werte der Parameter haben schon eine Bewandnis.