M A T R I X Version 1.5 von Christian MAURER I. Was ist eine Matrix ? Eine Matrix ist ein System von Zahlen, die in einem rechteckigen Schema angeordnet sind. II. Was kann das Programm ? MATRIX ist in der Lage einen Grossteil der moeglichen Matrizen- berechnungen auszufuehren. Sie koennen - Matrizen multiplizieren, invertieren, transponieren - Matrizen addieren, subtrahieren - eine Konstante zu einer Matrix addieren, von ihr subtrahieren, mit ihr multiplizieren bzw. eine Matrix durch eine Konstante dividieren - zu 3 anzugebenden Winkeln die Rotationsmatrix berechnen - natuerlich alle diese Funktionen zu einem Befehl verknuepfen - Matrizen editieren, abspeichern ... III. Wozu dient die Matrizenrechnung ? Die haeufigsten Anwendungen der Matrizenrechnung liegen darin lineare Gleichungssysteme aufzuloesen und geometrische Abbildungen zu berechnen. Dazu einige Beispiele: - lineare Gleichungssysteme In der Schule haben wir ausschliesslich (Ausnahmen bestaetigen die Regel) folgende Schreibweise zur Beschreibung eines Gleichungssystems verwendet: z.B: 3x + 2y - 2z = 5 2x - 5y + 3z = 4 x + 2y + 4z = -3 In Matrizenschreibweise wuerde diese Gleichung wie folgt geschrieben A * x = y mit den Matrizen 3 3 3 1 3 1 ( 3 2 -2 ) (x) ( 5) A = ( 2 -5 3 ) , x = (y) und y = ( 4) 3 3 ( 1 2 4 ) 3 1 (z) 3 1 (-3) Die Zahlen unter den Matrixnamen geben die Dimension der Matrix an (z.B. steht unter y links eine 3 und rechts eine 1, was soviel bedeutet wie: y hat 3 Zeilen und 1 Spalte). Die Loesung fuer ein Gleichungssystem wuerde in Matrizen- schreibweise -1 x = A * y -1 lauten. A ist dabei die I n v e r s e von A. Sie hat die gleiche Dimension wie A. Es ist zu beachten, dass obige Operation -1 A * y und nicht -1 y * A lauten m u s s. Die Matrizenmultiplikation ist also n i c h t kommutativ. Mit Recht werden Sie bemerken, dass die Matrizen x und y eigentlich nichts anderes als Vektoren sind. Wir koennen damit eine Matrix auch als Zusammenfassung von Vektoren betrachten. Allerdings ist es nicht unwesentlich ob es sich um Spalten - oder Zeilenvektoren handelt (Spaltenvektor hat n Zeile und 1 Spalte, ein Zeilenvektor dagegen 1 Zeile und n Spalten) z.B. (-1) ( 2) ist in Matrizenschreibweise ungleich (-1 2 3) ( 3) Wir sind es auch gewohnt das Skalarprodukt zweier Vektoren folgendermassen zu schreiben: z.B. (-1) ( 4) ( 2) * (-1) = -1 * 4 + 2 * -1 + (3 * -2) = -12 ( 3) (-2) Diese Operation waere nach den Gesetzen der Matrizenrechnung nicht erlaubt, sondern muesste lauten: ( 4) (-1 2 3) * (-1) = 12 (-2) Mit anderen Worten: Multiplikation zweier Matrizen ist nur dann moeglich, wenn Anzahl der Spalten der Linksmatrix und Anzahl der Zeilen der Rechtsmatrix u e b e r - e i n s t i m m e n. Die Ergebnismatrix hat dann soviele Zeilen wie die Linksmatrix und soviele Spalten wie die Rechtsmatrix. z.B A * B = C erlaubt 3 4 4 5 3 5 A * B = C nicht erlaubt 2 5 4 3 ? ? Wie wir wissen lassen sich Punkte im Raum durch Vektoren beschreiben. Wir ahnen schon, dass sich auch Berechnungen von Punktkoordinaten bequem mit der Matrizenrechung ermitteln lassen. Mehr dazu in - geometrische Abbildungen (alle Angaben beziehen sich zwar auf den Raum, gelten analog natuerlich auch in der Ebene, indem man 3-zeilige Matrizen durch 2-zeilige ersetzt) a) Verschiebung eines Punktes P um den Vektor t N = P + t 3 1 3 1 3 1 ( 1) wir wollen z.B. den Punkt P = ( 2) in x-Richtung (-1) um 2, in y-Richtung um 1 und in z-Richtung um 3 Einheiten verschieben, dann laesst sich der Neupunkt N wie folgt berechnen: ( 1) (2) (3) N = ( 2) + (1) = (3) 3 1 (-1) (3) (2) Beachte: Matrizenaddition ist genauso wie die Matrizen- subtraktion nur dann moeglich wenn beide Matrizen gleiche Dimension haben. b) Drehung des Punktes P um Punkt Z mit Winkeln , , N = A * ( P - Z ) + Z 3 1 3 3 3 1 3 1 3 1 mit der "Drehmatrix" A (laesst sich vom Programm berechnen) c) zentrische Streckung mit Zentrum Z und Faktor k: N = A * ( P - Z ) + Z 3 1 3 3 3 1 3 1 3 1 ( k 0 0 ) (k 0) mit A = ( 0 k 0 ) bzw. in Ebene : A = (0 k) ( 0 0 k ) IV. Das Programm Wenn Sie das Programm starten, oeffnet es ein Fenster im Workbench - Screen. Links oben befindet sich eine Gruppe von 16 Gadgets, in denen die Namen der im Speicher befindlichen Matrizen stehen. Darunter liegt ein Stringgadget, in das ein auszufuehrender Befehl eingegeben werden kann. Rechts oben befindet sich eine weitere Gruppe mit allen moeglichen Befehlen. Im unteren Drittel finden wir schliesslich Namen, Anzahl der Zeilen und Spalten und einen Ausschnitt von 16 Elementen einer editierbaren Matrix. - Editieren einer Matrix Klicken Sie einfach das gewuenschte Gadget an, und geben Sie die gewuenschten Werte ein. Als Name ist prinzipiell jede alphanumerische Zeichenkette erlaubt mit folgenden Ausnnahmen: - Der Name d a r f nicht mit einem Unterstrich ('_') beginnen - Er s o l l t e auch nicht mit einem der folgenden Zeichen enden, da diese zur Kennzeichnung der verschiedenen Operationen reserviert sind: ' ... Transponieren $ ... Invertieren @ ... Rotationsmatrix. Sie koennen diese Zeichen aber ganz bewusst ans Ende eines Matrixnamens setzen um sich so das Anklicken des jeweiligen Befehls zu ersparen. Um die Dimension der Matrix zu aendern geben Sie den gewuenschten Wert ein und schliessen Sie unbedingt mit ab, ansonsten behaelt die Matrix die gleiche Groesse. Ausnahme: Wenn Sie sowohl die Anzahl der Zeilen, alsauch die der Spalten aendern wollen, ist es ratsam erst die zweite Eingabe mit zu beenden. Z.B: Die Editiermatrix hat eine Groesse von 3x3 und Sie wollen sie auf 4x5 aendern. Klicken Sie ins Zeilen - Gadget, geben '4' ein, klicken ins Spalten - Gadget, geben '5' ein und druecken erst jetzt die - Taste. - Die Befehle Um den Aus- bzw. Eingabekanal zu waehlen klicken Sie je nachdem auf "Ram:", "File" oder "Prt:". Sie koennen diese Kanaele auch kombinieren (natuerlich nur fuer die Ausgabe). Dazu ist noch zu sagen, dass es sich bei "Ram:" nicht um die Ram-Disk handelt, sondern um den Speicher, in dem sich eine Liste von Matrizen befindet. Die Ausgabe auf den Drucker ist (im Augenblick) nur fuer kleinere Matrizen geeignet, das wird sich sicher in einer spaeteren Version aendern. Haben Sie die Matrix eingegeben, koennen Sie die Matrix durch Anklicken von "Save" auf ihren angewaehlten Kanaelen abspeichern. Um eine Matrix zu lesen, klicken Sie, n a c h d e m Sie auf "Read" gedrueckt haben, die gewuenschte Matrix an bzw. geben ihren Namen im Requester ein. Analog dazu funktioniert das Loeschen. Wollen Sie eine symmetrische Matrix eingeben, so koennen Sie Tipparbeit sparen, indem Sie die Elemente ueber der Diagonale eingeben, und die Taste "Sym" betaetigen. Weiters haben Sie die Moeglichkeiten alle Elemente auf 0 zu setzen ("0"), Einheits- matrizen einzugebn ("I") und sowohl obere als auch untere Dreiecks- matrizen einzugeben. Wollen Sie invertieren, transponieren oder die Rotationsmatrix berechnen, klicken Sie wieder n a c h d e m Sie die Matrix in das Befehlsstringgadget kopiert haben, die gewuenschte Operation an. Um die Rotationsmatrix zu 3 Winkeln zu berechnen, speichern Sie eine 3x1 - Matrix ab, welche die Winkel enthaelt. Vorher sollten sichergehen, dass Sie den richtigen Winkelmodus gewaehlt haben. Determinante und Spur werden berechnet indem, Sie v o r h e r die Operation und anschliessend die Matrix anklicken. Das Ergebnis wird in das Befehlstringgadget kopiert. Mit Precision koennen Sie die Anzahl der gewuenschten Nachkomma- stellen, mit der Matrizen abgespeichert und angezeigt werden sollen, eingeben. Um einen Befehl auszufuehren druecken Sie auf "XEQ". V. Sonstiges - Alle Berechnungen werden mit DOUBLE - Precision ausgefuehrt. - Zur Berechnung von Determinate und Inverser wird das Gauss'sche Eliminationsverfahren mit Pivot - Wahl verwendet. - Sollte z.B folgende oder aehnliche Fehlermeldung auftreten: "Matrix not available: _0" kann das auf einen Syntaxerror im Befehl- string hindeuten. VI. Abschliessend moechte ich Sie bitten, mir ihre Erfahrungen mit dem Programm zu schreiben. Sollten Sie das Programm benutzen und die Arbeit dieses Programm zu schreiben anerkennen, dann bitte ich Sie mir einen Ihrer Meinung nach angemessenen Geldbetrag zu schicken: Christian Maurer Lenaugasse 1/15 1080 WIEN OESTERREICH DANKE !!!