Berechnung/Logik
bearbeitet von
Hallo Jo,
5 Schleifen ineinander, grusel...
Bevor du Pseudocode raushaust, sollte man vielleicht noch etwas konzeptionell denken.
Du gehst also erstmal die erste Spalte durch. Wenn die Summierung zum Unterlauf führt, willst du die Zeilenvektoren herunter skalieren, die in der betrachteten Spalte negative Werte haben.
Das ist, denke ich, am einfachsten, wenn du zunächst positive und negative Werte für die ganze Spalte getrennt addierst und danach schaust, ob du skalieren musst. Wenn ja, berechne den Faktor und skaliere die betroffenen Zeilen.
Dann machst du das gleiche mit Spalte 2. Problem ist, dass hier andere Zeilen die negativen Werte enthalten können, d.h. wenn du jetzt skalierst, machst du dir ggf die Summe für Spalte 1 negativ. Das ignoriere erstmal. Gehe einfach alle Spalten durch.
Nach dem ersten Durchgang hast du keine sichere Lösung, bist ihr aber näher gekommen. Darum wiederholst du nun den Prozess, bis du nicht mehr skalieren musstest.
D.h. die nichtOk schleife muss die äußerste sein, und du solltest Funktionen verwenden.
~~~
while (skaliereMatrix(e, M));
~~~
skaliereMatrix gibt true zurück wenn skaliert wurde.
~~~
function skaliereMatrix(Vector e, Matrix M) : bool {
bool skaliert = false
for (i) {
f = berechneFaktor(e[i], M[i]);
if (f < 1) {
skaliert = true;
skaliereZeilen(f, M);
}
}
}
~~~
usw. Bin am Handy, der Rest ist mir zu mühsam...
_Rolf_
--
sumpsi - posui - clusi