Die Gruppen 1 und 3 haben uns diese Woche in der Sprechstunde Ihr Problem mit der Aktualisierung von mu bei der Längenreduktion erklärt. Lineare Algebra und ein paar Stunden debugging ergaben den folgenden Code:
Code: Alles auswählen
void LengthReduce(mat_ZZ& b, mat_RR& mu) {
for (long k = b.NumRows()-2; k >= 0; k--) {
for (long j = k+1; j < b.NumRows(); j++) {
RR int_part = round(mu[j][k]);
b[j] -= to_ZZ(int_part)*b[k];
mu[j] -= int_part*mu[k];
mu[j][k] -= int_part;
}
}
}
Wie wir mehrmals erwähnt haben sind die Variablen in Schnorrs Skript/Papern und verwandten Arbeiten (Filipovic/Koy) stets als selbst-aktualisierend zu verstehen. Das bedeutet in diesem Fall, dass die mu Werte die man benutzen will vorher aktualisiert werden müssen. Ein einmaliges durchdenken/rechnen des Algorithmus in Dimension 3 sollte einem die richtige Intuition geben.
Markus und Richard