View Full Version : [Frage] multRight
was ist eigentlich der unterschied zwischen multLeft und multRight?
left ist klar aber right?
einfach statt m1*m2, m2*m1 ist es ja nicht oder?
ich komm einfach nicht auf die Lösung bei test() für multRight
ChrisChiu
27-10-2004, 18:02
einfach statt m1*m2, m2*m1 ist es ja nicht oder?
Doch :)
m1.multLeft(m2) bedeutet m2 * m1
m1.multRight(m2) bedeutet m1 * m2
matrizenmultiplikation ist ja nicht symetrisch ... darum ist das ergebnis von m1*m2 und m2*m1 ein anderes ...
Also leute, ich steh momentan total der Leitung, ich wollte gerade multLeft und multRight implementieren. Aber ich weis nicht was ich mit was multiplizieren soll, bzw. vorher deklarieren soll. Viell bringt mich auch nur der die class test durcheinander, hoff jemand kanns mir sagen, die Schleifen hab ich schon nur, was Multipliziere ich?
.... m1[i-1][0]*m2[0][j-1]... oder
.... left.m[i-1][0]*m[0][j-1]... oder?
Danke!
MFg Angel
bei multright komm ich bloss nicht auf diese matrix
14 26 20
8 36 20
8 18 18
wie soll das gehen?
bei mir kommt die selbe matrix raus wie bei multleft was auch verständlich ist wenn man bedenkt das
2 0 0
0 2 0
0 0 2
symetrisch ist
black_sheep
28-10-2004, 15:24
i zeile, j spalte
zerst eine kopie von der derzeitigen matrix machen (copy)
und bei multLeft
m[i][j] = left.m[i][0] * copy.m[0][j] + left.m[i][1] * ...
Matthias
28-10-2004, 18:40
bei multright komm ich bloss nicht auf diese matrix
14 26 20
8 36 20
8 18 18
wie soll das gehen?
bei mir kommt die selbe matrix raus wie bei multleft was auch verständlich ist wenn man bedenkt das
2 0 0
0 2 0
0 0 2
symetrisch ist
ja, das stimmt auch. aber wenn du dir die testfunktion genau ansiehst, dann siehst du auch, dass zuerst m1 = m2 * m1 und danach aufbauend auf diesem ergebnis m1 = m1 * m2.
ah das ergibt natürlich sinn
was ist eigentlich der unterschied zwischen multLeft und multRight?
left ist klar aber right?
man kanns auch so sehen: wenn man m1 * m2 machen will, shreibt man entweder m1.multRight(m2), oder m2.multLeft(m1). ich finde es aber nicht so toll, zuerst eine der beiden methoden zu implementieren, dann copy&paste zu machen und den selben code ein zweites mal für die andere methode zu verwenden. (ist schlechter programmierstil, weil es das OnceAndOnlyOnce-prinzip verletzt, glaube ich brauche nicht erwähnen welche nachteile daraus entstehen.) ich würde einfach eine methode machen, die zwei matritzen multipliziert, und zwar zwei beliebige (solange die dimensionen kompatibel sind), damit wird die implementierung aller vier CG1Matrix?x?.mult*-methoden trivial.
zum beispiel:
public CG1Matrix3x3 multLeft (CG1Matrix3x3 left) {
copyMatrix(multiplyMatrices(left.m, m), m);
return (this);
}
public CG1Matrix3x3 multRight (CG1Matrix3x3 right) {
copyMatrix(multiplyMatrices(m, right.m), m);
return (this);
}
in diesem beispiel liefert multiplyMatrices natürlich ein neues array zurück und verändert die beiden übergebenen nicht, daher muss das ergebnis noch in die matrix m kopiert werden. könnte man in diesem fall aber auch mit System.arrayCopy() machen. das hat den vorteil, dass multiplyMatrices 'public static' deklariert werden und somit in beiden CG1Matrix?x?-klassen verwendet werden kann.
jedenfalls sieht man in diesem beispiel, wie überaus einfach die sache mit dem left und right eigentlich ist.
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.