Zamieszczam stworzoną przez siebie prostą klasę do działań na macierzach, nie wszystko na nich można wykonać ale coś jest.
http://student.agh.edu.pl/~shinuexx/matrix.class.txt /* offline - nowa wersja - patrz niżej */
sposób użycia
<?php include "priarr.php"; // nieistotne w dzialaniu klasy include "matrix.class.php"; $test=new Matrix(3,3,1); $test->printMatrix(); print_var($test->detMatrix()); $test->exampleMatrix(true); $test->printMatrix(); print_var($test->detMatrix()); ?>
wygląd
?Matrix was created [ 1 1 1] [ 1 1 1] [ 1 1 1] integer (0) [ 9 -7 -3] [ -7 0 -10] [ 7 -9 -4] integer (-313) Matrix was destroyed
Jeśli są jakieś błędy to pisać. Jeszcze postaram się trochę usprawnić klasę, ale na razie się sesja zbliża;P
Kolejna wersja klasy:
Matrix.class.php
Zmiany:
Kod
#2.000
- usunięto zmienne publiczne $error oraz $errstr
+ dodano zmienną prywatną $scale odpowiedzialną za precyzję wyświetlania liczb przez sprintf
+ dodano metodę prywatną Matrix::_checkDimension odpowiedzialną za sprawdzenie wymiarów tablicy wejściowej do klasy
+ dodano obsługę wyjatków
+ dodano metodę publiczną Matrix::getScale() zwracającą aktualną precyzję wyświetlania liczb
+ dodano skalowanie do wyświetlania macierzy - metoda Matrix::scale();
- wyłączono metody Matrix::eigenvalues() oraz Matrix::eigenvectors()
* zoptymalizowano część operacji na macierzy diagonalnej
+ dodano klasę MatrixException obsługującą wyjątki klasy Matrix
+ dodano metody Matrix::max() oraz Matrix::min() zwracające największą/najmniejszą wartość w macierzy/wierszu/kolumnie
- usunięto zmienne publiczne $error oraz $errstr
+ dodano zmienną prywatną $scale odpowiedzialną za precyzję wyświetlania liczb przez sprintf
+ dodano metodę prywatną Matrix::_checkDimension odpowiedzialną za sprawdzenie wymiarów tablicy wejściowej do klasy
+ dodano obsługę wyjatków
+ dodano metodę publiczną Matrix::getScale() zwracającą aktualną precyzję wyświetlania liczb
+ dodano skalowanie do wyświetlania macierzy - metoda Matrix::scale();
- wyłączono metody Matrix::eigenvalues() oraz Matrix::eigenvectors()
* zoptymalizowano część operacji na macierzy diagonalnej
+ dodano klasę MatrixException obsługującą wyjątki klasy Matrix
+ dodano metody Matrix::max() oraz Matrix::min() zwracające największą/najmniejszą wartość w macierzy/wierszu/kolumnie
Krótki opis:
<?php /* Przykład zastosowania klasy wszelkie działania jak również definiowanie obiektu należy robić w bloku try{}catch(){} */ include("Matrix.class.php"); /* definiowanie obiektu */ try{ $m3 = new Matrix("[[457,21,4],[54,1,4],[14,2,2]]"); /* string jako json array */ $m4 = Matrix::fromString("[[12,24],[2,47]]")->scale(0); $m5 = new Matrix; $m5 -> fromString("[[12,24],[2,47]]")->scale(0); $m6 = new Matrix; $m7 = new Matrix; /*Generowanie wyjątku: MatrixException(4): 'Cannot initial Matrix from this data' in line: 118 in file: D:\Program Files (x86)\Zend\Apache2\htdocs\homepage\inc\resp\matrix\2.000\Matrix.class.php #0 D:\Program Files (x86)\Zend\Apache2\htdocs\homepage\inc\resp\matrix\2.000\Matrix.class.php(90): Matrix::_checkDimensions(Array) #1 D:\Program Files (x86)\Zend\Apache2\htdocs\homepage\eval.php(47) : eval()'d code(5): Matrix->__construct(Array) #2 D:\Program Files (x86)\Zend\Apache2\htdocs\homepage\eval.php(47): eval() #3 {main} */ echo $m1->scale(0); // ustawanie skali. Jest ona przekazywana do obiektów pochodnych dzięki czemu podczas method chaining nie wraca na wartość domyślną /* [ 1 2 3 4 5 4 42 ] */ /* [ 4 78 87 ] [ 5 15 1 ] [ 6 12 54 ] */ /* [ -6.0000 -34.0000 80.0000 ] [ -52.0000 858.0000 -1612.0000 ] [ 94.0000 -620.0000 -677.0000 ] */ /* 516 */ /* 59 */ /* 1e-3 * [ -0.32 1.27 0.49 ] [ 0.11 0.12 -0.17 ] [ 0.01 -0.17 0.13 ] # tutaj widać skalowanie wyników # */ }catch(MatrixException $e){ } ?>
#ADD
To moja pierwsza klasa obsługująca wyjątki więc prosiłbym o ocenę i ewentualne konstruktywne uwagi:)