Mein Problem ist, dass ich eine Matrix habe, wo die Summe aller Zeilen und die Summe aller Spalten Null ist. Alle Zahlen sind auf x Dezimalstellen gerundet.Rundungsfehler von Matrix zu beseitigen
Dann multipliziere ich die gesamte Matrix mit einer Zahl zwischen 0 und 1 (zB 1/6) und runde alle Zahlen auf x Dezimalstellen. Jetzt kann ich nicht sicher sein, dass die Summe der Zeilen und Spalten Null ist. Ich möchte die Summen wieder Null mit der geringstmöglichen Anpassung (oder zumindest sehr kleine Anpassung)
Gibt es einen Algorithmus, der ein solches Problem beheben kann?
Beispiel (sehr einfach): Matrix:
200 -200 0
400 400 -800
-600 -200 800
round2 ((1/6) * Matrix)
33.33 -33.33 0
66.67 66.67 -133.33
-100 -33.33 133.33
Ich würde nur die Zeilen und Spalten hinzufügen und anstelle der Prüfung, ob sie gleich Null, Test, wenn der Absolutwert der Summe ist kleiner als eine bestimmte Toleranz - in diesem Fall vielleicht "abs (Summe) <= 0,01" – Blazemonger
Dies ist KEINE "Algorithmus" -Frage. Sie führen ein Problem durch Runden ein und egal, wie Sie es "reparieren", Sie werden andere Probleme einführen, zum Beispiel die Symmetrie zwischen bestimmten Elementen innerhalb der Matrix zu brechen. Können Sie die Rundung nicht auf den "angezeigten" Wert beschränken, während Sie den vollen Wert für die mathematische Verarbeitung beibehalten? Sie würden immer noch ein 'Rauschen' haben, was die Summen möglicherweise nicht null macht, aber dieses Problem sollten Sie behandeln, indem Sie "Null" als "kleiner als eine Toleranz" definieren. –