javascript square matrix library - adrian.zentner.name filejavascript square matrix library v0.3 ist...

39
JavaScript Square Matrix Library Version 0.3 Adrian Zentner

Upload: tranngoc

Post on 26-Aug-2019

264 views

Category:

Documents


0 download

TRANSCRIPT

JavaScript

Square Matrix

Library

Version 0.3

Adrian Zentner

Inhaltsverzeichnis

1 Allgemeines1.1 Adrian Zentner1.2 Einleitung

2 Konstruktor2.1 Matrix()

3 Eigenschaften3.1 status3.2 order3.3 eXY3.4 e[X][Y]3.5 modus

4 Methoden4.1 info()4.2 update()4.3 round()4.4 equals()4.5 duplicate()4.6 plus()4.7 minus()4.8 times()4.9 over()4.10 under()4.11 transpose()4.12 adjoint()4.13 inverse()4.14 getDeterminant()4.15 getRow()4.16 getColumn()4.17 getDiagonal()4.18 getSubmatrix()4.19 toArray()4.20 toString()4.21 toXmlString()4.22 toFormatedString()

5 Ergänzungen5.1 eigene Methoden5.2 Objekt Handling

JavaScript Square Matrix Library

2

1 Allgemeines

1.1 Adrian Zentner

1.2 Einleitung JavaScript Square Matrix Library v0.3 ist eine JavaScript Bibliothek, mit deren Hilfe alle gängigen mathematischen Operationen für quadratische Matrizen durchgeführt werden können.

Quadratische Matrizen haben die gleiche Anzahl an Reihen und Spalten. Derartige Matrizen finden in einer Vielzahl von Bereichen ihre Anwendung.

Das Script läuft mit den Browsern Microsoft Internet Explorer 5.x, Netscape 7.x, Mozilla 1.x und Opera 7.x unter Windows ohne Einschränkungen. Andere Browser und Systeme wurden nicht getestet.

Hinweis:

Um die nachfolgenden Erläuterungen nachvollziehen zu können, sind Grundkenntnisse in JavaScript und der Matrix-Algebra notwendig.

Der Einfachheit halber wird die englische Notation mit einem Punkt anstatt Komma zur Trennung von Ganzzahl und Nachkommastellen verwendet (z.B. π ≈ 3.1412 anstatt π ≈ 3,1412).

Beachten Sie:

JavaScript Square Matrix Library ist urheberrechtlich geschützte Freeware (freie Software). Sie wird "so wie sie ist" zur Verfügung gestellt, ohne eine Garantie irgendeiner Art. Hinweise auf Programmfehler und Verbesserungsvorschläge für zukünftige Versionen sind herzlich willkommen.

E-Mail: [email protected]

Homepage: www.adrian.zentner.name

JavaScript Square Matrix Library

3

2 Konstruktor

2.1 Matrix() Bevor die Bibliothek verwendet werden kann, muss die Datei "SquareMatrix.js" in das Verzeichnis der HTML-Seite kopiert werden und durch die Notation <script type="text/javascript" src="SquareMatrix.js"></script> in den Header der HTML-Seite eingefügt werden. Sollten sich die HTML-Seite und die Datei "SquareMatrix.js" in unterschiedlichen Verzeichnissen befinden, so muss die relative Pfadangabe src entsprechend angepasst werden.

Anschließend kann in einem eigenen <script type="text/javascript">...</script> - Bereich mit dem new Operator eine neue Instanz des Matrix Objektes erstellt werden.

Hierfür gibt es zwei Varianten.

Variante 1:

Variante 2:

Beispiel:

var A = new Matrix(1,2, 3,4);

var myArray = new Array(5,6, 7,8); var B = new Matrix(myArray);

<html> <head> <title>Square Matrix Beispiel 1</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2, 3,4); var myArray = new Array(5,6, 7,8); var B = new Matrix(myArray); var C = A.plus(B); window.alert(A + "\n+\n\n" + B + "\n=\n\n" + C);

JavaScript Square Matrix Library

4

Erläuterung:

Das Beispiel zeigt, wie ein neues Matrix-Objekt A der Form

nach Variante 1 erstellt wird. Die einzelnen Elemente der neuen Matrix werden als Zahlen an den Matrix()-Konstruktor übergeben. Die Zahlen werden hierbei reihenweise in die Matrix geschrieben.

Die Matrix B

wurde nach Variante 2 erstellt, d.h. dem Matrix()-Konstruktor wurde ein Array Objekt als Parameter übergeben. Die einzelnen Elemente des Arrays bilden die neue Matrix. Somit erzeugen die folgenden Aufrufe jeweils gleiche Matrizen.

Matrix C ist die Summe der Matrizen A und B:

Das Ergebnis wird in einem Meldungsfenster ausgegeben. Die Methode Matrix.plus() wird weiter unten erläutert.

Hinweis:

Da nur quadratische Matrizen unterstütz werden, muss die Anzahl N an Zahlenwerten,

</script> </body> </html>

var myArray = new Array(1,2, 3,4); var A = new Matrix(1,2, 3,4); var B = new Matrix(myArray); var C = new Matrix(myArray[0],myArray[1], myArray[2],myArray[3]);

JavaScript Square Matrix Library

5

welche dem Matrix()-Konstruktor übergeben werden, immer der Form N = n2 (n positiv und ganzzahlig) sein.

Gleiches gilt für die Länge des Zahlen-Arrays, wenn die Matrix nach Variante 2 erstellt wird.

Anders ausgedrückt, hat N folgende Werte:

1 x 1 Matrix: N = 1 2 x 2 Matrix: N = 4 3 x 3 Matrix: N = 9 4 x 4 Matrix: N = 16 • • • n x n Matrix: N = n2

Natürlich müssen sämtliche Parameter bzw. Elemente des Arrays für den Matrix()-Konstruktor vom Typ number sein. Andere Objekttypen (z.B. Strings) können durch die objektunabhängige Funktion Number() zuvor in den passenden number Typ konvertiert werden.

Beachten Sie:

Theoretisch ist die Größe einer Matrix bei der JavaScript Square Matrix Library nicht beschränkt. Je nach Rechenleistung, Browser und Rechenoperation kommt es jedoch bei Matrizen der Größe 7 x 7 und höher zu erheblichen Verzögerungen.

JavaScript Square Matrix Library

6

3 Eigenschaften

3.1 status

Matrix.status gibt Auskunft über die letzte Warnung oder den letzten Fehler, welcher bei einer Operation aufgetreten ist. Nach der Initialisierung enthält Matrix.status automatisch die Größe/Ordnung der Matrix.

Beispiel:

Erläuterung:

Im Beispiel wird versucht die Inverse von A zu berechnen. Da die Matrix jedoch singulär ist, existiert keine Inverse und es wird eine Warnung in Matrix.status geschrieben. Diese wird anschließend in einem Meldungsfenster ausgegeben.

3.2 order

Matrix.order liefert ein Zahlenwert, welcher die Größe der Matrix angibt. Die Größe oder auch Ordnung einer quadratischen Matrix entspricht der Anzahl Spalten/Reihen.

Lesen

<html> <head> <title>Square Matrix Beispiel 2</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2, 4,8); A.inverse(); window.alert(A.status); </script> </body> </html>

Lesen

JavaScript Square Matrix Library

7

Beispiel:

Erläuterung:

Im Beispiel wird dem Matrix()-Konstruktor N = 16 Zahlen (1-16) übergeben. Die Größe/Ordnung der neuen Matrix A ist somit √N = 4.

3.3 eXY

Mit Matrix.eXY ist es möglich die Werte der einzelnen Elemente der Matrix auszulesen. Matrix.eXY liefert den Zahlenwert der Xten - Reihe und Yten - Spalte der Matrix, d.h. X und Y symbolisieren hier Zahlenwerte (1 ≤ X,Y ≤ Matrix.order).

Beispiel:

<html> <head> <title>Square Matrix Beispiel 3</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16); window.alert( "Die Matrix\n\n" + A + "\n ist eine " + A.order + " x " + A.order + " Matrix" ); </script> </body> </html>

Lesen

<html> <head> <title>Square Matrix Beispiel 4</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(0,0,0, 0,0,0, 0,8,0);

JavaScript Square Matrix Library

8

Erläuterung:

Im Beispiel wird die Matrix A

generiert und anschließend das Element exy = e32 = e 3. Reihe, 2. Spalte = 8 in einem Meldungsfenster ausgegeben.

Beachten Sie:

Das direkte Auslesen der Elemente einer Matrix wird nur bis zu einer Matrixgröße/-ordnung von 9 unterstützt, d.h. Matrix.e19 ist noch möglich, Matrix.e110 hingegen nicht mehr.

3.4 e[X][Y]

Mit Matrix.e[X][Y] ist es möglich die Werte der einzelnen Elemente der Matrix auszulesen und zu ändern. Matrix.e[X][Y] erlaubt den Zugriff auf den Zahlenwert der "X+1"ten - Reihe und "Y+1"ten - Spalte der Matrix, d.h. X und Y symbolisieren hier Zahlenwerte (0 ≤ X,Y ≤ Matrix.order-1).

Beispiel:

window.alert( "Das Element a32 der Matrix\n\n" + A + "\nhat den Wert " + A.e32 + "." ); </script> </body> </html>

Lesen / Ändern

<html> <head> <title>Square Matrix Beispiel 5</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head>

JavaScript Square Matrix Library

9

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert, welche ausschließlich aus Nullen besteht. Anschließend wird der Wert des Elements der 3 Reihe (→ X = 3-1 = 2) und 2 Spalte (→ Y = 2-1 = 1) auf 21 festgelegt.

und die veränderte Matrix in einem Meldungsfenster ausgegeben.

Beachten Sie:

Im Gegensatz zu Matrix.eXY beginnt der Index für X und Y bei Matrix.e[X][Y] bei 0 und kann höchstens die Größe/Ordnung der Matrix minus 1 als Wert annehmen.

Wenn einzelne Elemente mit Matrix.e[X][Y] verändert werden, muss anschließend die Methode Matrix.update() aufgerufen werden, damit Matrix.eXY die aktuellen Werte enthält.

3.5 modus

Mit Matrix.modus wird die Art der Ausgabe von Warnungen oder Fehlern festgelegt.

Folgende Angaben sind für Matrix.modus möglich:

<body> <script type="text/javascript"> var A = new Matrix(0,0,0, 0,0,0, 0,0,0); A.e[2][1] = 21; window.alert(A); </script> </body> </html>

Lesen / Ändern

Angabe Bedeutung

JavaScript Square Matrix Library

10

Der Default-Wert ist "auto"

Beispiel:

Erläuterung:

Im Beispiel wird zuerst die Funktion wasIstLos() deklariert. Als nächstes wird eine neue Matrix A generiert. Durch die Anweisung A.modus = "wasIstLos" wird festgelegt, dass bei Warnungen und Fehlern die zuvor definierte Funktion wasIstLos() mit der Warn-

A.modus = "none" Warnungen und Fehler werden ignoriert.

A.modus = "status"

Warnungen und Fehler werden in der Statuszeile des Browsers angezeigt.

A.modus = "alert" Warnungen und Fehler werden in einem Meldungsfenster angezeigt.

A.modus = "auto" Warnungen werden in der Statuszeile des Browsers angezeigt. Fehler werden in einem Meldungsfenster angezeigt.

A.modus = "matrixMessage"

Bei Warnungen und Fehlern wird die JavaScript-Funktion mit dem betreffenden Funktionsnamen (hier: matrixMessage) aufgerufen. Diese Funktion muss extra definiert werden und bekommt als Parameter die Warn- oder Fehlernachricht übergeben.

<html> <head> <title>Square Matrix Beispiel 6</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> function wasIstLos(message) { window.alert("Das ist los:\n\n" + message) } var A = new Matrix(1,2, 4,8); A.modus = "wasIstLos"; A.inverse(); </script> </body> </html>

JavaScript Square Matrix Library

11

oder Fehlernachricht als Parameter aufgerufen wird. Da die Matrix A singulär ist, löst die Anweisung A.inverse() eine solche Warnmeldung aus und die Funktion gibt diese in einem Meldungsfenster aus.

Hinweis:

Auch wenn Matrix.modus = "none" angegeben wurde, kann die letzte Warn- oder Fehlernachricht mittels Matrix.status abgefragt werden.

JavaScript Square Matrix Library

12

4 Methoden

4.1 info() Die Methode Matrix.info() gibt einen String mit Informationen zur JavaScript Square Matrix Library zurück. Wird der Methode true als Parameter übergeben, erscheint zusätzlich ein Meldungsfenster mit den Informationen.

Syntax:

String Matrix.info(boolean popup)

Der Default-Wert für popup ist false.

Beispiel:

Erläuterung:

Im Beispiel wird zuerst eine Matrix generiert. Da der Methode A.info() als Parameter true übergeben wurde, erscheint beim Aufruf ein Meldungsfenster. Zusätzlich wird der zurückgegebene String in die Statusleiste des Browsers geschrieben.

4.2 update() Die Methode Matrix.update() muss immer dann aufgerufen werden, wenn einzelne Elemente der Matrix mittels Matrix.e[X][Y] verändert wurden. Andernfalls liefert Matrix.eXY falsche Ergebnisse. Alle anderen Eigenschaften und Methoden funktionieren

<html> <head> <title>Square Matrix Beispiel 7</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,3, 4,5,6, 7,8,9); window.status = A.info(true); </script> </body> </html>

JavaScript Square Matrix Library

13

jedoch auch ohne ein update() Aufruf fehlerfrei.

Syntax:

void Matrix.update()

Beispiel:

Erläuterung:

Das Beispiel generiert zuerst eine 1 x 1 Matrix, dessen einziges Element den Wert 66 erhält. Nachfolgend wird der Wert des Elementes mit Matrix.e[0][0] auf 99 gesetzt. Die nächste Zeile speichert den ursprünglichen Wert (66) Matrix.e11 in die Variable alt. Anschließend wird Matrix.update() aufgerufen und erneut der Wert von Matrix.e11 ausgelesen und in die Variable neu abgespeichert. Die Ausgabe am Ende des Scripts verdeutlicht, dass erst nach dem Aufruf von Matrix.update() Matrix.e11 denn tatsächlichen und aktuellen Wert des Elementes enthält.

4.3 round() Die Methode Matrix.round() führt bei allen Elementen einer Matrix eine kaufmännische Rundung durch. Nach der wievielten Nachkommastelle hierbei gerundet wird, richtet sich nach der Zahl, welche der Methode als Parameter übergeben wird.

<html> <head> <title>Square Matrix Beispiel 8</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(66); A.e[0][0] = 99; var alt = A.e11; A.update(); var neu = A.e11; window.alert("Veraltet: " + alt + "\n" + "Aktuell: " + neu); </script> </body> </html>

JavaScript Square Matrix Library

14

Die Methode kann hilfreich sein, da es auf Grund der endlichen Rechnergenauigkeit bei bestimmten Rechenoperationen (insbesondere Matrix.inverse()) zu Gleitkommafehlern kommen kann.

Syntax:

void Matrix.round(number decimalPlaces)

Der Default-Wert für decimalPlaces ist 4.

Beispiel:

Erläuterung:

Das Beispiel generiert zuerst eine 1 x 1 Matrix, dessen einziges Element den Wert 0.123456789 erhält. Anschließend rundet Matrix.round(4) nach der 4. Nachkommastelle. Dies ist die Ziffer 5. Diese erhöht die vorige Ziffer 4 bei kaufmännischer Rundung um +1 auf 5. Das Element a11 lautet somit 0.1235.

Hinweis:

Der Aufruf Matrix.round(0) rundet sämtliche Elemente einer Matrix auf die nächste Ganzzahl.

4.4 equals() Die Methode Matrix.equals() vergleicht zwei Matrizen. Wenn alle Elemente beider Matrizen jeweils gleiche Werte besitzen, liefert die Methode true als Rückgabewert, ansonsten wird false zurückgegeben.

<html> <head> <title>Square Matrix Beispiel 9</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(0.123456789); A.round(4); window.alert("Matrix auf 4 Nachkommastellen gerundet:\n\n" + A); </script> </body> </html>

JavaScript Square Matrix Library

15

Syntax:

boolean Matrix.equals(Matrix myMatrix)

Beispiel:

Erläuterung:

Im Beispiel werden zuerst zwei Matrizen auf 2 Varianten generiert. Die Elemente beider Matrizen enthalten gleiche Werte. Somit liefert A.equals(B) als Rückgabewert true und ein Meldungsfenster erscheint.

Hinweis:

Eventuell ist es sinnvoll vor dem Aufruf von Matrix.equals() beide Matrizen mittels Matrix.round() kaufmännisch zu runden, da es auf Grund der endlichen Rechnergenauigkeit bei bestimmten Rechenoperationen (insbesondere Matrix.inverse()) zu Gleitkommafehlern kommen kann.

4.5 duplicate() Die Methode Matrix.duplicate() dupliziert eine Matrix.

Syntax:

<html> <head> <title>Square Matrix Beispiel 10</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2, 3,4); var myArray = new Array(1,2, 3,4); var B = new Matrix(myArray); if(A.equals(B)) window.alert( "Matrix \n\n" + A + "\n und \n\n" + B + "\nsind identisch" ); </script> </body> </html>

JavaScript Square Matrix Library

16

Matrix Matrix.duplicate()

Beispiel:

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert und ein Duplikat derselben auf die Matrix B abgebildet. Matrix B wird anschließend in einem Meldungsfenster ausgegeben.

Beachten Sie:

Die Methode Matrix.duplicate() wird benötigt, da durch eine einfache Zuweisung B = A; beide Matrizen A und B auf dasselbe Objekt verweisen würden, d.h. Änderungen an A würden sich auch B auswirken und vice versa.

4.6 plus() Die Methode Matrix.plus() berechnet die Summe zweier Matrizen.

Syntax:

Matrix Matrix.plus(Matrix myMatrix)

Beispiel:

<html> <head> <title>Square Matrix Beispiel 11</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,3, 4,5,6, 7,8,9); var B = A.duplicate(); window.alert(A + "\n=\n\n" + B); </script> </body> </html>

<html> <head>

JavaScript Square Matrix Library

17

Erläuterung:

Im Beispiel werden zuerst zwei Matrizen generiert und mittels A.plus(B) summiert. Das Ergebnis wird einer dritten Matrix zugewiesen und in einem Meldungsfenster ausgegeben.

Beachten Sie:

Um die Summe zweier Matrizen bilden zu können, müssen beide die gleiche Größe/Ordnung besitzen.

4.7 minus() Die Methode Matrix.minus() berechnet die Differenz zweier Matrizen.

Syntax:

Matrix Matrix.minus(Matrix myMatrix)

Beispiel:

<title>Square Matrix Beispiel 12</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,3, 4,5,6, 7,8,9); var B = new Matrix(9,8,7, 6,5,4, 3,2,1); var C = A.plus(B); window.alert(A + "\n+\n\n" + B + "\n=\n\n" + C); </script> </body> </html>

<html> <head> <title>Square Matrix Beispiel 13</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript">

JavaScript Square Matrix Library

18

Erläuterung:

Im Beispiel werden zuerst zwei Matrizen generiert und mittels A.minus(B) voneinander subtrahiert. Das Ergebnis wird einer dritten Matrix zugewiesen und in einem Meldungsfenster ausgegeben.

Beachten Sie:

Um die Differenz zweier Matrizen bilden zu können, müssen beide die gleiche Größe/Ordnung besitzen.

4.8 times() Die Methode Matrix.times() hat drei Varianten.

Variante 1:

Der Methode Matrix.times() wird als Parameter eine Zahl übergeben. Als Ergebnis liefert die Methode eine Matrix, deren Elemente mit der Zahl multipliziert wurden (skalare Multiplikation).

Syntax:

Matrix Matrix.times(number scalar)

Variante 2:

Der Methode Matrix.times() wird als Parameter ein Vektor in Form eines Arrays übergeben. Als Ergebnis liefert die Methode das Produkt aus der Matrix und dem Vektor.

var A = new Matrix(5,5, 5,5); var B = Matrix(4,3, 2,1); var C = A.minus(B); window.alert(A + "\n-\n\n" + B + "\n=\n\n" + C); </script> </body> </html>

var A = new Matrix(1,2, 3,4); var B = A.times(2);

JavaScript Square Matrix Library

19

Syntax:

Array Matrix.times(Array vector)

Variante 3:

Der Methode Matrix.times() wird als Parameter eine Matrix übergeben. Als Ergebnis liefert die Methode das Matrixprodukt der beiden Matrizen.

Syntax:

Matrix Matrix.times(Matrix myMatrix)

Beispiel:

var vector = new Array(1,2,3); var A = new Matrix(1,2,3, 4,5,6, 7,8,9); var C = A.times(vector);

var A = new Matrix(1,2, 3,4); var B = new Matrix(5,6, 7,8); var C = A.times(B);

<html> <head> <title>Square Matrix Beispiel 14</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var scalar = 2; var vector = new Array(1, 2); var matrix = new Matrix(1,2, 2,1); var A = new Matrix(2,1, 1,2); var B = A.times(scalar); var C = B.times(matrix); var D = C.times(vector); window.alert( scalar + "\n\n*\n\n" + matrix + "\n*\n\n" + vector.join("\n") + "\n\n=\n\n" +

JavaScript Square Matrix Library

20

Erläuterung:

Im Beispiel werden zuerst ein Skalar, ein Vektor und eine Matrix definiert. Matrix D berechnet sich durch Multiplikation von Matrix A mit dem Skalar, dem Vektor und der Matrix.

Das Ergebnis wird dem Vektor D zugewiesen und in einem Meldungsfenster ausgegeben.

Hinweis:

Mit Hilfe der Methoden Matrix.times() und Matrix.inverse() kann die Lösung eines linearen Gleichungssystems der Form

berechnet werden, wenn die Matrix A und der Spaltenvektor y bekannt sind und eine Lösung existiert. Gelöst werden können nur Lineare Gleichungssysteme, welche die gleiche Anzahl an Unbekannten und Gleichungen besitzen und deren Gleichungen linear unabhängig sind.

Das folgende Beispiel löst ein solches lineares Gleichungssystem 3. Ordnung.

Beachten Sie:

Um das Produkt aus einer Matrix und einem Vektor bilden zu können, muss die Anzahl Elemente/Reihen des Vektors mit der Größe/Ordnung der Matrix übereinstimmten. Das Ergebnis ist wiederum ein Vektor.

Um das Matrixprodukt zweier Matrizen bilden zu können, müssen beide die gleiche Größe/Ordnung besitzen. Das Ergebnis ist wiederum eine Matrix.

D.join("\n") ); </script> </body> </html>

var A = new Matrix(-1,2,3, 4,-5,6, 7,8,-9); var y = new Array(12,12,-4); var x = A.inverse().times(y);

JavaScript Square Matrix Library

21

4.9 over() Die Methode Matrix.over() berechnet die Lösung der Gleichung

C B = A

wenn die Matrizen A und B bekannt sind.

Anders ausgedrückt berechnet A.over(B) die Matrix

C = A B -1

Syntax:

Matrix Matrix.over(Matrix myMatrix)

Beispiel:

Erläuterung:

Im Beispiel werden zuerst zwei Matrizen generiert und anschließend mittels A.over(B) die Lösung folgender Gleichung berechnet:

<html> <head> <title>Square Matrix Beispiel 15</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(2,4, 6,8); var B = Matrix(4,3, 2,1); var C = A.over(B); window.alert( "Die Matrix \n\n" + A + "\nmultipliziert mit der Inversen von \n\n" + B + "\nergibt die Matrix \n\n" + C ); </script> </body> </html>

JavaScript Square Matrix Library

22

Das Ergebnis wird einer dritten Matrix zugewiesen und in einem Meldungsfenster ausgegeben.

Beachten Sie:

Um die Methode Matrix.over() anwenden zu können, müssen beide Matrizen die gleiche Größe/Ordnung besitzen.

4.10 under() Die Methode Matrix.under() berechnet die Lösung der Gleichung

A C = B

wenn die Matrizen A und B bekannt sind.

Anders ausgedrückt berechnet A.under(B) die Matrix

C = A -1 B

Syntax:

Matrix Matrix.under(Matrix myMatrix)

Beispiel:

<html> <head> <title>Square Matrix Beispiel 16</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(4,3, 2,1); var B = Matrix(2,4, 6,8); var C = A.under(B); window.alert( "Die Inverse von \n\n" + A + "\nmultipliziert mit der Matrix \n\n" + B +

JavaScript Square Matrix Library

23

Erläuterung:

Im Beispiel werden zuerst zwei Matrizen generiert und anschließend mittels A.under(B) die Lösung folgender Gleichung berechnet:

Das Ergebnis wird einer dritten Matrix zugewiesen und in einem Meldungsfenster ausgegeben.

Beachten Sie:

Um die Methode Matrix.under() anwenden zu können, müssen beide Matrizen die gleiche Größe/Ordnung besitzen.

4.11 transpose() Die Methode Matrix.transpose() berechnet die Transponierte der Matrix.

Syntax:

Matrix Matrix.transpose()

Beispiel:

"\nergibt die Matrix \n\n" + C ); </script> </body> </html>

<html> <head> <title>Square Matrix Beispiel 17</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(0,1,1,1, 9,0,1,1, 9,9,0,1, 9,9,9,0); window.alert(

JavaScript Square Matrix Library

24

Erläuterung:

Im Beispiel wird zuerst eine Matrix generiert. Diese Matrix und ihre Transponierte werden anschließend in einem Meldungsfenster ausgegeben.

4.12 adjoint() Die Methode Matrix.adjoint() berechnet die Adjunkte der Matrix.

Syntax:

Matrix Matrix.adjoint()

Beispiel:

Erläuterung:

Im Beispiel wird zuerst eine Matrix generiert. Diese Matrix und ihre Adjunkte werden anschließend in einem Meldungsfenster ausgegeben.

"Die Transponierte der Matrix \n\n" + A + "\nist \n\n" + A.transpose() ); </script> </body> </html>

<html> <head> <title>Square Matrix Beispiel 18</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,3, 4,5,6, 7,8,9); window.alert( "Die Adjunkte der Matrix \n\n" + A + "\nist \n\n" + A.adjoint() ); </script> </body> </html>

JavaScript Square Matrix Library

25

4.13 inverse() Die Methode Matrix.inverse() berechnet die Inverse der Matrix.

Syntax:

Matrix Matrix.inverse()

Beispiel:

Erläuterung:

Im Beispiel wird zuerst eine Matrix A generiert. Die Matrix B wird aus der Inversen von Matrix A gebildet. Matrix C ist das Produkt aus Matrix A und B.

Das Ergebnis wird in einem Meldungsfenster ausgegeben.

<html> <head> <title>Square Matrix Beispiel 19</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2, 3,4); var B = A.inverse(); var C = A.times(B); window.alert( "Eine Matrix mit ihrer Inversen multipliziert, " + "ergibt die Einheitsmatrix\n\n" + C ); </script> </body> </html>

JavaScript Square Matrix Library

26

4.14 getDeterminant() Die Methode Matrix.getDeterminant() berechnet die Determinante der Matrix.

Syntax:

number Matrix.getDeterminant()

Beispiel:

Erläuterung:

Im Beispiel wird zuerst eine Matrix generiert. Diese Matrix und ihre Determinante werden anschließend in einem Meldungsfenster ausgegeben.

4.15 getRow() Die Methode Matrix.getRow() extrahiert eine Reihe (Reihenvektor) aus der Matrix und weißt das Ergebnis einem Array zu. Die Zahl (1 ≤ Zahl ≤ Matrix.order), welche der Methode als Parameter übergeben wird, bestimmt welche Reihe extrahiert werden soll.

Syntax:

Array Matrix.getRow(number rowIndex)

Beispiel:

<html> <head> <title>Square Matrix Beispiel 20</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2, 3,4); window.alert( "Die Matrix \n\n" + A + "\nhat die Determinante " + A.getDeterminant() + "." ); </script> </body> </html>

JavaScript Square Matrix Library

27

Erläuterung:

Im Beispiel wird zuerst eine Matrix generiert. Die zweite Reihe dieser Matrix wird mittels A.getRow(2) extrahiert und anschließend in einem Meldungsfenster ausgegeben.

4.16 getColumn() Die Methode Matrix.getColumn() extrahiert eine Spalte (Spaltenvektor) aus der Matrix und weißt das Ergebnis einem Array zu. Die Zahl (1 ≤ Zahl ≤ Matrix.order), welche der Methode als Parameter übergeben wird, bestimmt welche Spalte extrahiert werden soll.

Syntax:

Array Matrix.getColumn(number columnIndex)

Beispiel:

<html> <head> <title>Square Matrix Beispiel 21</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(0,0,0, 1,2,3, 0,0,0); var myRow = A.getRow(2); window.alert( "Die zweite Reihe der Matrix \n\n" + A + "\nhat die Werte\n\n" + myRow ); </script> </body> </html>

<html> <head> <title>Square Matrix Beispiel 22</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript">

JavaScript Square Matrix Library

28

Erläuterung:

Im Beispiel wird zuerst eine Matrix generiert. Die zweite Spalte dieser Matrix wird mittels A.getColumn(2) extrahiert und anschließend in einem Meldungsfenster ausgegeben.

4.17 getDiagonal() Die Methode Matrix.getDiagonal() extrahiert die Haupt- oder Nebendiagonale aus der Matrix und weißt das Ergebnis einem Array zu. Wird der Methode true als Parameter übergeben, wird die Hauptdiagonale zurückgegeben - bei false die Nebendiagonale.

Syntax:

Array Matrix.getDiagonal(boolean mainDiagonal)

Der Default-Wert für mainDiagonal ist true.

Beispiel:

var A = new Matrix(0,1,0, 0,2,0, 0,3,0); var myColumn = A.getColumn(2); window.alert( "Die zweite Spalte der Matrix \n\n" + A + "\nhat die Werte\n\n" + myColumn ); </script> </body> </html>

<html> <head> <title>Square Matrix Beispiel 23</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,0,0,0, 0,2,0,0, 0,0,3,0, 0,0,0,4); var myDiagonal = A.getDiagonal(); var sum = 0; for(var i=0; i<myDiagonal.length; i++)

JavaScript Square Matrix Library

29

Erläuterung:

Im Beispiel wird zuerst eine Matrix generiert und die Hauptdiagonale mittels A.getDiagonal() extrahiert. Anschließend werden in einer Schleife die Elemente der Hauptdiagonalen aufsummiert und in einem Meldungsfenster ausgegeben.

Hinweis:

Da der Methode Matrix.getDiagonal() im Beispiel kein Parameter übergeben wurde, hat die Methode den Default-Wert true verwendet und entsprechend die Hauptdiagonale als Ergebnis zurückgeliefert.

Beachten Sie:

Die Reihenfolgen in der die Elemente in das Array geschrieben werden, sind wie folgt festgelegt:

Hauptdiagonale: Von "Oben-Links" nach "Unten-Rechts", bzw. von e11 nach enn (n = Matrix.order) Nebendiagonale: Von "Oben-Rechts" nach "Unten-Links", bzw. von e1n nach en1 (n = Matrix.order)

4.18 getSubmatrix() Die Methode Matrix.getSubmatrix() extrahiert eine Unter-Matrix aus der Matrix, indem eine Zeile und eine Spalte gestrichen werden. Der erste Parameter bestimmt welche Reihe - der zweite Parameter welche Spalte gestrichen wird (1 ≤ Parameter ≤ Matrix.order). Die neue Matrix hat eine um 1 verringerte Größe/Ordnung.

Syntax:

Matrix Matrix.getSubmatrix(number rowIndex, number columnIndex)

Beispiel:

sum += myDiagonal[i]; window.alert( "Die Summe der Elemente der Hauptdiagonalen " + "der Matrix \n\n" + A + "\nist " + sum + "." ); </script> </body> </html>

JavaScript Square Matrix Library

30

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert. Durch den Befehl B = A.getSubmatrix(3,2) entsteht Matrix B aus A durch das Streichen der 3. Reihe und 2. Spalte. Anschließend werden beide Matrizen in einem Meldungsfenster ausgegeben.

Beachten Sie:

Wird auf eine 1 x 1 Matrix Matrix.subMatrix(1,1) angewendet, so liefert die Methode ebenfalls eine 1 x 1 Matrix mit dem Wert 1.

4.19 toArray() Die Methode Matrix.toArray() konvertiert die Matrix in ein Array Objekt.

Syntax:

Array Matrix.toArray()

Beispiel:

<html> <head> <title>Square Matrix Beispiel 24</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,1,1, 1,2,1,1, 3,0,3,3, 1,2,1,1); var B = A.getSubmatrix(3,2); window.alert( "Die Matrix \n\n" + B + "\nentsteht aus der Matrix \n\n" + A + "\ndurch streichen der 3. Reihe und 2. Spalte" ); </script> </body> </html>

<html> <head> <title>Square Matrix Beispiel 25</title>

JavaScript Square Matrix Library

31

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert. Durch den Befehl B = A.toArray() werden die Elemente von A reihenweise in das Array myArray geschrieben und anschließend in einem Meldungsfenster ausgegeben.

4.20 toString() Die Methode Matrix.toString() konvertiert die Matrix in einen String. Nach der wievielten Nachkommastelle hierbei die Zahl abgeschnitten und gerundet wird, richtet sich nach der Zahl, welche der Methode als Parameter übergeben wird. Eine -1 als Parameter bewirkt, dass keinerlei Formatierung (Zeilenumbruch, Nachkommastellen) vorgenommen werden und die einzelnen Elemente nur durch ein Leerzeichen getrennt zurückgegeben werden.

Syntax:

String Matrix.toString(number decimalPlaces)

Der Default-Wert für decimalPlaces ist 4.

Beispiel:

<script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,3, 4,5,6, 7,8,9); var myArray = A.toArray(); window.alert( "Die Matrix \n\n" + A + "\nhat die Array-Elemente \n\n" + myArray ); </script> </body> </html>

<html> <head> <title>Square Matrix Beispiel 26</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head>

JavaScript Square Matrix Library

32

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert und mittels A.toString(5) in einen String konvertiert und in einem Meldungsfenster ausgegeben. Da der Methode die Zahl 5 als Parameter übergeben wurde, wird nach der 5. Nachkommastelle kaufmännisch gerundet. Dies ist die Ziffer 6. Diese erhöht die vorige Ziffer 5 bei kaufmännischer Rundung um +1 auf 6. Das Element A11 lautet somit 0.12346.

Hinweis:

Wenn ein Matrix Objekt in einem Kontext verwendet wird, der ein String erwartet (z.B. window.document.writeln(), window.alert()), so wird die Methode automatisch mit ihrem Default-Wert von 4 aufgerufen, ohne das explizit die Methode toString() verwendet werden muss.

Beachten Sie:

Wenn bei allen Elementen einer Matrix weniger Nachkommastellen vorkommen, als der Parameter vorgibt, so werden bei allen Elementen die Nullen bis zu dem Element mit den meisten Nachkommastellen gestrichen.

4.21 toXmlString() Die Methode Matrix.toXmlString() konvertiert die Matrix nach MathML. MathML ist ein XML-Derivat des W3-Konsortiums zum exakten Auszeichnen mathematisch-wissenschaftlicher Formeln. Die Methode wird mit 2 Parametern aufgerufen. Der erste Parameter bestimmt, ob der MathML Namensraum mit angegeben werden soll. Der zweite Parameter legt fest, nach der wievielten Nachkommastelle die Zahl abgeschnitten und gerundet wird.

Syntax:

String Matrix.toXmlString(boolean namespace, number decimalPlaces)

Der Default-Wert für namespace ist true. Der Default-Wert für decimalPlaces ist 4.

<body> <script type="text/javascript"> var A = new Matrix(0.123456,0,0, 0,0,0, 0,0,0); window.alert(A.toString(5)); </script> </body> </html>

JavaScript Square Matrix Library

33

Beispiel:

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert und mittels window.document.writeln() als MathML Code dynamisch in das Dokument geschrieben. Da der Methode im Beispiel keine Parameter übergeben wurden, verwendet die Methode die Default-Werte. Zusätzlich wird der MathML Code noch in einem Meldungsfenster ausgegeben.

Hinweis:

Spezielle Software (z.B. Mathematica, MathType) kann MathML Code importieren. Somit steht ein komfortabler Weg bereit, Ergebnisse der Square Matrix Library in Fremdsoftware weiter zu verarbeiten bzw. an Dritte weiter zu geben.

Beachten Sie:

Ohne ein spezielles Plug-In, stellen die meisten Browser im Moment MathML gar nicht oder falsch dar.

Die Matrix wird nur in Form der sog. "Presentation Tags" nach MathML konvertiert.

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <?xml-stylesheet type="text/xsl" href="http://www.w3.org/Math/XSL/mathml.xsl"?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Square Matrix Beispiel 27</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> <!-- <![CDATA[ var A = new Matrix(1,2,3, 4,5,6, 7,8,9); window.document.writeln(A.toXmlString()); window.alert("MathML Code:\n\n" + A.toXmlString()); // ]]> --> </script> </body> </html>

JavaScript Square Matrix Library

34

4.22 toFormatedString() Die Methode Matrix.toFormatedString() konvertiert die Matrix in einen formatierten String nach Benutzerangaben. Ohne Parameter aufgerufen (oder mit den falschen), liefert die Methode einen HTML formatierten String zurück.

Syntax:

String Matrix.toFormatedString( string matrixOpen, string rowOpen, string elementOpen, number decimalPlaces, string elementClose, boolean skipLastElementClosing, string rowClose, boolean skipLastRowClosing, string matrixClose )

Parameterbedeutung:

1. matrixOpen Zeichenkette, welche vor allem anderen geschrieben werden soll (z.B. <table>).

2. rowOpen Zeichenkette, welche zu Begin jeder Reihe der Matrix geschrieben werden soll (z.B. <tr>).

3. elementOpen Zeichenkette, welche zu Begin jedes Elementes der Matrix geschrieben werden soll (z.B. <td>).

4. decimalPlaces Zahl, welche bestimmt, nach der wievielten Nachkommastelle die Elemente der Matrix abgeschnitten und gerundet ausgegeben werden sollen (z.B. 4).

5. elementClose Zeichenkette, welche zum Ende jedes Elementes der Matrix geschrieben werden soll (z.B. </td>).

6. skipLastElementClosing Boole'scher Wert, welcher bestimmt, ob auch beim letzten Element einer Reihe die Zeichenkette elementClose geschrieben werden soll.

7. rowClose Zeichenkette, welche zum Ende jeder Reihe der Matrix geschrieben werden soll (z.B. </tr>).

8. skipLastRowClosing Boole'scher Wert, welcher bestimmt, ob auch bei der letzten Reihe der Matrix die Zeichenkette rowClose geschrieben werden soll.

9. matrixClose Zeichenkette, welche nach allem anderen geschrieben werden soll (z.B. </table>).

Beispiel:

<html> <head> <title>Square Matrix Beispiel 28</title>

JavaScript Square Matrix Library

35

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert und mittels window.document.writeln() dynamisch in das Dokument geschrieben. Da der Methode im Beispiel keine Parameter übergeben wurden, erstellt die Methode als Default HTML-Code in Form einer Tabelle.

Hinweis:

Durch geeignete Wahl der Parameter kann die Matrix praktisch beliebig formatiert ausgegeben werden.

<script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2,3, 4,5,6, 7,8,9); window.document.writeln(A.toFormatedString()); </script> </body> </html>

JavaScript Square Matrix Library

36

5 Ergänzungen

5.1 eigene Methoden Das Matrix-Objekt kann nach Bedarf um eigene Methoden erweitert werden. Hierzu wird zuerst mit dem Schlüsselwort prototype die neue Methode mit ihren Methodennamen deklariert. Anschließend muss diese Methode definiert werden. Innerhalb der Methodendefinition kann mittels des Schlüsselwortes this auf die Eigenschaften und Methoden des aktuellen Matrix-Objektes zugegriffen werden.

Syntax:

returnType Matrix.prototype.methodName(parameterType_1 parameter_1, ..., parameterType_N parameter_N) = methodName;

Beispiel:

<html> <head> <title>Square Matrix Beispiel 29</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> Matrix.prototype.sum = sum; function sum() { var sum = 0; var myArray = this.toArray(); for(var i=0; i<myArray.length; i++) sum += myArray[i]; return sum; } var A = new Matrix(1,2, 3,4); window.alert( "Die Summe der Elemente der Matrix \n\n" + A + "\nist " + A.sum() + "." ); </script> </body> </html>

JavaScript Square Matrix Library

37

Erläuterung:

Im Beispiel wird zuerst die neue Matrix-Methode Matrix.sum() mittels Matrix.prototype.sum = sum; deklariert und mit der Angabe function sum() definiert. Die neue Methode soll die Summe aller Elemente der Matrix berechnen. Hierzu werden alle Elemente der Matrix durch den Aufruf this.toArray() in das Array myArray geschrieben und anschließend in einer for-Schleife in der Variablen sum aufsummiert. Die return sum Anweisung liefert somit als Ergebnis die Summe aller Elemente zurück. Das Ergebnis für die Matrix A wird durch den Aufruf A.sum() in einem Meldungsfenster ausgegeben.

Beachten Sie:

Sie können die neue Methode erst verwenden, nachdem diese deklariert und definiert wurde.

5.2 Objekt Handling Auf das Matrix-Objekt können mehrere Methoden hintereinander direkt angewendet werden. Es ist somit nicht nötig, für jeden Rechenschritt eine eigene Matrix zu definieren. Die Abarbeitung der Methoden erfolgt von links nach rechts.

Syntax:

returnType Matrix.method_1().method_2() ... .method_N();

Beispiel:

<html> <head> <title>Square Matrix Beispiel 30</title> <script type="text/javascript" src="SquareMatrix.js"></script> </head> <body> <script type="text/javascript"> var A = new Matrix(1,2, 3,4); var det = A.inverse().times(2).getDeterminant(); window.alert( "Die Inverse von \n\n" + A + "\n skalar multipliziert mit 2 " + "hat die Determinante " + det + "." );

JavaScript Square Matrix Library

38

Erläuterung:

Im Beispiel wird zuerst die Matrix A generiert. Anschließend wird die Determinante der Inversen von A skalar multipliziert mit 2 berechnet. Dies erfolgt in einer einzigen Zeile, indem hintereinander die Methoden inverse(), times(2) und .getDeterminant() auf den jeweiligen Rückgabewert der vorigen Methode angewendet werden.

Das Ergebnis wird in einem Meldungsfenster ausgegeben.

</script> </body> </html>

[ [email protected] ] © 2004 Adrian Zentner [ www.adrian.zentner.name ]

JavaScript Square Matrix Library

39