Mathematischer Hintergrund
Sei A eine N mal N Matrix von reellen Zahlen, ein ba Vektor von N reellen Zahlen und xa Vektor N unbekannte reelle Zahlen. Eine Matrixgleichung lautet Ax = b.
Jacobis Methode ist wie folgt: Zerlegen Sie A = D + R, wobei D die Matrix der Diagonalen ist und R die verbleibenden Einträge sind.
Wenn Sie eine anfängliche Schätzlösung x0 erstellen, ist eine verbesserte Lösung x1 = invers (D) * (b - Rx), wobei alle Multiplikationen Matrix-Vektor-Multiplikation sind und invers (D) die inverse Matrix ist.
Problemspezifikation
- Eingabe : Ihr gesamtes Programm sollte die folgenden Daten als Eingabe akzeptieren: die Matrix A, den Vektor b, eine anfängliche Schätzung x0 und eine 'Fehlernummer' e.
- Ausgabe : Das Programm muss die Mindestanzahl von Iterationen so ausgeben, dass sich die neueste Lösung von der tatsächlichen Lösung unterscheidet, höchstens von e. Dies bedeutet, dass sich jede Komponente der Vektoren in absoluter Größe um höchstens e unterscheidet. Sie müssen Jacobis Methode für Iterationen verwenden.
Wie die Daten eingegeben werden, liegt bei Ihnen . Es könnte Ihre eigene Syntax in einer Befehlszeile sein, Sie könnten Eingaben aus einer Datei übernehmen, was auch immer Sie wählen.
Wie die Daten ausgegeben werden, liegt bei Ihnen . Es kann in eine Datei geschrieben werden, die in der Befehlszeile angezeigt wird und als ASCII-Grafik geschrieben ist, solange es von einem Menschen gelesen werden kann.
Weitere Details
Sie erhalten nicht die wahre Lösung: Wie Sie die wahre Lösung berechnen, liegt ganz bei Ihnen. Sie können es beispielsweise nach der Cramer-Regel lösen oder eine Inverse direkt berechnen. Was zählt, ist, dass Sie eine echte Lösung haben, um mit Iterationen vergleichen zu können.
Präzision ist ein Problem; Die "genauen Lösungen" einiger Leute zum Vergleich können unterschiedlich sein. Für die Zwecke dieses Code-Golfs muss die genaue Lösung 10 Dezimalstellen entsprechen.
Um ganz klar zu sein: Wenn sogar eine Komponente Ihrer aktuellen Iterationslösung die entsprechende Komponente in der wahren Lösung um e überschreitet, müssen Sie die Iteration fortsetzen.
Die Obergrenze für N hängt davon ab, welche Hardware Sie verwenden und wie viel Zeit Sie für die Ausführung des Programms aufwenden möchten. Für die Zwecke dieses Code-Golfs wird maximal N = 50 angenommen.
Voraussetzungen
Wenn Ihr Programm aufgerufen wird, können Sie jederzeit davon ausgehen, dass Folgendes gilt:
- N> 1 und N <51, dh Sie erhalten niemals eine Skalargleichung, immer eine Matrixgleichung.
- Alle Eingaben liegen über dem Feld der reellen Zahlen und werden niemals komplex sein.
- Die Matrix A ist immer so, dass die Methode zur wahren Lösung konvergiert, so dass Sie immer eine Anzahl von Iterationen finden können, um den Fehler (wie oben definiert) unten oder gleich e zu minimieren.
- A ist niemals die Nullmatrix oder die Identitätsmatrix, dh es gibt eine Lösung.
Testfälle
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
Die wahre Lösung ist (0,586, 1,138). Die erste Iteration ergibt x1 = (5/9, 1), was sich um mehr als 0,04 von der tatsächlichen Lösung um mindestens eine Komponente unterscheidet. Bei einer weiteren Iteration ergibt sich x2 = (0,555, 1,148), was sich um weniger als 0,04 von (0,586, 1,138) unterscheidet. Somit ist die Ausgabe
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
In diesem Fall ist die wahre Lösung (2.2, -0.8) und die anfängliche Schätzung x0 hat bereits einen Fehler von weniger als e = 1.0, daher geben wir 0 aus. Das heißt, wenn Sie keine Iteration durchführen müssen, geben Sie einfach aus
0
Einreichungsbewertung
Dies ist Code Golf, wobei alle Standardlücken hiermit nicht zugelassen werden. Das kürzeste korrekte vollständige Programm (oder die Funktion), dh die niedrigste Anzahl von Bytes, gewinnt. Es wird davon abgeraten , Dinge wie Mathematica zu verwenden, die viele der erforderlichen Schritte in einer Funktion zusammenfassen, aber jede gewünschte Sprache verwenden.