Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabe A3
Hallo,
Hat zufaellig jemand Testcases fuer die Aufgabe 3 geschrieben und waere so lieb, diese seinen Kommilitonen und Kommilitoninnen zugaenglich zu machen? Ich wuede mich sehr freuen
Viele Gruesse
Ist es eigentlich egal, ob ich bei der Householderspiegelung fuer Matrix Q
und fuer Matrix R
oder fuer Q
und R
bekomme? Also Vorzeichen in der zweiten Spalte von Q und der zweiten Zeile von R vertauscht.
Das Matrixprodukt ergibt in beiden Faellen A. Ist das Vorzeichen wichtig oder sind beide Loesugen aequivalent?
Da die QR-Zerlegung nicht eindeutig ist (Vektoren können z.B. auf positiven oder negativen Einheitsvektor gespiegelt werden etc.), muss für eine korrekte Zerlegung von A daher nur gelten:
- A = QR
- QQ^T = Id = Q^TQ (Q ist orthogonal)
- R ist obere Dreiecksmatrix
Nachdem das alles bei dir erfüllt ist, sollte die Lösung schon passen.
Die Header files darf man abändern (ohne öffentliche Schnittstellen einer Klasse zu verändern), oder?
Wenn nicht, dann würde es irgendwie wenig Sinn machen, wenn du die auch hochladen kannst, oder?
Darf man ausserhalb von Methoden Variablen anlegen?
Gibt es irgendwo eine muster.o-datei fuer die qrDecompositum?
Weil die A3b bei mir nicht richtig funktioniert und ich nicht genau weiss ob das an meiner Implementierung von der a liegt oder nicht.
Denn alle meine Testcases sind da eigentlich recht problemlos durch… und ich kriege bei der line aufgabe auch keine Fehlermeldungen, es zeigt nur einfach die Gerade nicht an bei mehr als 2 Punkten.
Btw, muss dieses Rueckwaertseinsetzen nur fuer nxn-Matrixen funktionieren oder auch fuer m>n Matrixen?
Hey, konnte leider erst jetzt mit der Aufgabe anfangen und schaffe es jetzt nicht mehr in die Rechnerübung. Ich bekomme beim Versuch die getColumn() zu testen nen komischen g+±Motzer.
g++ -m64 -g -Wall -std=c++11 -c linearText.cpp -o objs/linearText.o
In file included from linearText.cpp:1:0:
qrDecomposition.h: In function ‘int main(int, char**)’:
qrDecomposition.h:34:12: error: ‘ColVector QRDecomposition::getColumn(unsigned int)’ is protected
ColVector getColumn(unsigned int col);
^
linearText.cpp:38:16: error: within this context
qr.getColumn(0);
^
Makefile:41: recipe for target ‘objs/linearText.o’ failed
make: *** [objs/linearText.o] Error 1
Verstehe gar nicht was das heißen soll…
EDIT: Verstehe gar nicht was das heißen soll… passt schon
Kann es sein, dass der Screenshot in der Aufgabenstellung für die Punktewolke 5 nicht so ganzen mit den Punkten im Test-Tool übereinstimmt? Sieht bei mir so aus:
[m]rand()[/m] verhält sich z.B. unter Windows anders als unter Linux
Aha, daher kommen also diese Punkte? Einmal mit Profis… die Beschreibung von diesem Screenshot ist aber schon irgendwie irreführend. Und nicht mal ihre Screenshots machen sie auf dem Referenzsystem™?
Aha, daher kommen also diese Punkte? Einmal mit Profis… die Beschreibung von diesem Screenshot ist aber schon irgendwie irreführend. Und nicht mal ihre Screenshots machen sie auf dem Referenzsystem™?
Wenn ich das richtig sehe, steht aber auch folgendes im Vorgabecode:
[m]20 random points[/m].
Ja, das steht tatsächlich irgendwo, aber für mich klingt die Beschreibung von dem Screenshot (“Abbildung 1: Ergebnisgerade fur Punktewolke 5”) so, als solle das für Punktewolke 5 am Ende genau so aussehen, an der Stelle kein Wort dazu, dass die Punkte aus rand() fallen. Und zumindest ich habe mir den Sourcecode von diesem OpenGL-Ding nicht komplett angeschaut.
Servus,
habt ihr auch Probleme mit den Floats beim ersten Teil der Aufgabe? Hab ganz kleine Fließkommafehler drinnen, jetzt stehen in manchen Matrizen anstatt 0en Zahlen wie 1,33*10^-7 drinnen. Kann ich das so lassen oder muss man da was machen?
Greetz.
Servus,
habt ihr auch Probleme mit den Floats beim ersten Teil der Aufgabe? Hab ganz kleine Fließkommafehler drinnen, jetzt stehen in manchen Matrizen anstatt 0en Zahlen wie 1,33*10^-7 drinnen. Kann ich das so lassen oder muss man da was machen?Greetz.
Matrix A:
| 2 | -1 | 4 | 2 |
| -2 | 1 | -1 | -2 |
| 2 | -2 | 2 | 1 |
| -2 | 2 | 1 | 3 |
Vector b:
| 2 |
| 4 |
| 2 |
| 4 |
==================
Matrix Q:
| 0.5 | 0.5 | 0.5 | -0.5 |
| -0.5 | -0.5 | 0.5 | -0.5 |
| 0.5 | -0.5 | 0.5 | 0.5 |
| -0.5 | 0.5 | 0.5 | 0.5 |
Matrix R:
| 4 | -3 | 3 | 1 |
| 0 | 1 | 2 | 3 |
| 0 | 0 | 3 | 2 |
| 0 | 0 | 0 | 2 |
Vector x:
| -5 |
| -4 |
| 2 |
| 0 |
det of A
24
ich hab da runde zahlen raus
EDIT: Für alle die Ubuntu benutzen(bzw.andere distrus benutzen bei denen das --as-needed flag gesetzt ist) und die 2. Aufgabe nicht linken will:
Im Makefile für A3b (LDFLAGS) am ende hinzufügen, sprich soll so aussehen:
(CXX) -o @ ^ $(LDFLAGS)
Ja bei der Beispielangabe gehts zufälliger Weise auch.
Naja bleibt nur zu hoffen, dass deswegen nicht alle Test-Cases fehlschlagen.
Greetz.
Das liegt an der Ungenauigkeit, die man sich durch das Rechnen mit floats einhandelt und sich nicht vermeiden lässt. Ich weiß nicht genau, auf wie viele Nachkommastellen die Genauigkeit bei float ist, aber eine Zahl wie 10^-7 scheint schon realistisch zu sein, wenn da exakt gerechnet Null stehen würde. (Zumindest hab ich das so bei meinem Programm).
@Gammla: In dem Beispiel wird auf “runde” Zahlen gerundet, aber probier das Ganze mal mit einer anderen Matrix, wie z.B. einer Systemmatrix zur Ausgleichsrechnung wie in Teilaufgabe b). Da dürften dann bei dir auch die Zahlen “krummer” werden.
EDIT: Wiedermal erledigt.