PDA

View Full Version : [Frage] multleft multright?


blackie
29-10-2004, 19:19
bei mir liefert das 4x4 multleft "not ok" aber das darauf aufbauende multright liefert "ok"
wie kann das sein?

Joni
29-10-2004, 19:39
ich hab dasselber problem. ich denke es liegt ein fehler in der angabe vor, obwohl ich mir das schwer vorstellen kann. ich hab mir mal die test-methode näher angeschaut und folgendes herausgefunden:
folgende matrizen werden erzeugt:

2 0 0 0
0 3 0 0
0 0 1 0
0 0 0 1

1 0 0 3
0 1 0 2
0 0 1 5
0 0 0 1

werden diese miteinander linksmultipliziert kommt folgende matrix heraus:
2.0 0.0 0.0 6.0
0.0 3.0 0.0 6.0
0.0 0.0 1.0 5.0
0.0 0.0 0.0 1.0

jedoch wird von der testroutine gefordert, dass
2.0 0.0 0.0 3.0
0.0 3.0 0.0 2.0
0.0 0.0 1.0 5.0
0.0 0.0 0.0 1.0
herauskommt, was aba ein kompletter blödsinn sein muss, wenn man die matrizenmultiplikation analog zur 3x3 durchzieht. ich hab keine ahnung was da los is :confused:

blackie
29-10-2004, 19:42
diese linksmultiplizierte matrix kommt mir händisch auch raus

und auch wenn ich sie mir per println ausgeben lass sollt also stimmen außerdem wie sollte sonst das folgende multright richtig sein?

Joni
29-10-2004, 19:45
naja bei der rightmultiplication sollte rauskommen:
2.0 0.0 0.0 9.0
0.0 3.0 0.0 8.0
0.0 0.0 1.0 10.0
0.0 0.0 0.0 1.0

aba logischerweise durch den "rechenfehler" von vorhin kommt
2.0 0.0 0.0 12.0
0.0 3.0 0.0 12.0
0.0 0.0 1.0 10.0
0.0 0.0 0.0 1.0
heraus

ich werd noch narrisch :hewa:

blackie
29-10-2004, 19:50
nö das stimmt dann schon wenns richtig implementiert is bei mir zumindest kommt ok rechne es mal händisch dann is die erste zeile 1009 so wie's gehört

Joni
29-10-2004, 19:52
ich hab einfach keine ahnung was da los ist, der algorithmus MUSS so funktionieren weil er für 3x3 funktioniert und 4x4 nur eine dimension mehr ist und die vollkommen analog gerechnet wird oder irre ich mich da?

blackie
29-10-2004, 19:55
nein stimmt so is das gleiche wie bei 3x3

Joni
29-10-2004, 20:07
nur zur sicherheit... die multiplikation der 3x3 matrix schaut so aus:

a11b11 + a12b21 + a13b31 | a11b12 + a12b22 + a13b32 |
a21b11 + a22b21 + a23b31 | a21b12 + a22b22 + a23b32 |
a31b11 + a32b21 + a33b31 | a31b12 + a32b22 + a33b32 |

a11b13 + a12b23 + a13b33
a21b13 + a22b23 + a23b33
a31b13 + a32b23 + a33b33

und bei der 4x4 kommt einfach analog eine dimension dazu:
a11b11 + a12b21 + a13b31 + a14b41 | .... | .... | ....
...
...
...

irr ich mich eh nicht?

blackie
29-10-2004, 20:20
ja stimmt soweit das du mit 0 beginnen musst im array is dir aber schon klar oder?

Joni
29-10-2004, 20:22
*gg* naja dass man ein array mit 0 beginnt schreit einem schon jeder säugling ins gesicht oder nicht?

blackie
29-10-2004, 22:08
wohl war bin wohl selbst schon vom proggen verwirrt

Joni
29-10-2004, 22:18
na ich auch, ich packs echt nimma, keine ahnung was da schief läuft...

MrAngel
29-10-2004, 23:17
ich hab dasselber problem. ich denke es liegt ein fehler in der angabe vor, obwohl ich mir das schwer vorstellen kann. ich hab mir mal die test-methode näher angeschaut und folgendes herausgefunden:
folgende matrizen werden erzeugt:

2 0 0 0
0 3 0 0
0 0 1 0
0 0 0 1

1 0 0 3
0 1 0 2
0 0 1 5
0 0 0 1

werden diese miteinander linksmultipliziert kommt folgende matrix heraus:
2.0 0.0 0.0 6.0
0.0 3.0 0.0 6.0
0.0 0.0 1.0 5.0
0.0 0.0 0.0 1.0

jedoch wird von der testroutine gefordert, dass
2.0 0.0 0.0 3.0
0.0 3.0 0.0 2.0
0.0 0.0 1.0 5.0
0.0 0.0 0.0 1.0
herauskommt, was aba ein kompletter blödsinn sein muss, wenn man die matrizenmultiplikation analog zur 3x3 durchzieht. ich hab keine ahnung was da los is :confused:

Ok, ich glaub ich kann dir helfen, und zwar hab ich das ganz gleiche Problem gehabt und ich hab das So gelöst und jetzt stimmts!

Ich hab einfach die multiplikationen vertauscht:
Also wenn du jetzt:

m[i][j]=temp.m[i][0]*left.m[0][j]+....

hast dann vertausche einfach alle left und temp in der Zeile -->

m[i][j]=left.m[i][0]*temp.m[0][j]+....

OK? Es sollte dann funktionieren! Zumindest bei hats des bei mir!

MFG Angel

P.S:Falls es funktioniert, sag bescheid!

blackie
30-10-2004, 00:47
wieso isses bei 4x4 genau andersrum als bei 3x3 ?
funzt übrigens so

Matthias
30-10-2004, 00:53
wieso isses bei 4x4 genau andersrum als bei 3x3 ?

ist es nicht. die multiplikationen bie 4x4 und 3x3 sehen bis auf die andere dimension genau gleich aus.
left muss bei der left multiplikation natürlich links von tmp stehen, denn sonst machst du ja eine right multiplikation. bei dem 3x3 test funktioniert es auch so, da dort die erste multiplikation mit einer diagonalmatrix erfolgt und dort ist es egal, ob man links oder rechts multipliziert.

blackie
30-10-2004, 10:53
ja stimmt schon jetzt hab ich verstanden wies es bei der 3x3 egal is auch wenn mans verkehrt macht das ding is ja symetrisch da isses egal ob mans links oder rechts hinschreibt

Joni
30-10-2004, 20:37
ja wie es aussieht hab ich die matrizenmultiplikation von der falschen seite gemacht und einfach alles verdreht. nochmals danke :thumb: