package cc.gullinbursti.math.algebra { //] includes [!]> //]=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~. import cc.gullinbursti.lang.Arrays; import cc.gullinbursti.lang.Numbers; import flash.geom.Matrix; import flash.geom.Point; //]~=~=~=~=~=~=~=~=~=~=~=~=~=~[]~=~=~=~=~=~=~=~=~=~=~=~=~=~[ // <[!] class delaration [!]> public class Matrices extends BasicAlgebra { //~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~~*~._ //TODO: define & implement some matrix operations [http://mathworld.wolfram.com/topics/MatrixTypes.html] // orthogonal matrix // hat matrix // random matrix [http://en.wikipedia.org/wiki/Random_matrix] // permutation matrix [http://en.wikipedia.org/wiki/Permutation_matrix] // triangular matrix [http://en.wikipedia.org/wiki/Triangular_matrix] // derterminant [http://planetmath.org/encyclopedia/Determinant2.html] // trace [http://planetmath.org/encyclopedia/Trace.html] // eigenvalue [http://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors] [http://planetmath.org/encyclopedia/SpectralValue.html] // matrix exponential [http://planetmath.org/encyclopedia/MatrixExponential.html] public function Matrices() {/* …\(^_^)/… */} //]~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~._ //]~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=[> //]~=~=~=~=~=~=~=~=~=[> // http://en.wikipedia.org/wiki/Dual_number public static function dualNumber(val:int):Matrix { //~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~~*~._ //TODO: implement the matrix dual # operation return (new Matrix()); }//]~*~~*~~*~~*~~*~~*~~*~~*~~·¯ /* public static function cofactors(mtx:Array):Array { //~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~~*~._ var i:int; var j:int; var mult:int; var size:int = mtx.length; var factor_arr:Array = new Array(); var col_arr:Array = new Array(); var coeff_arr:Array = new Array(); var minor_arr:Array = new Array(); for (i=0; iArray representation of a matrix, all filled w/ zeroes. * @param dim The w/h of the matrix. * @return A list w × h elements consisting of zero values. * */ public static function genZeroMatrix(dim:Point):Array { //]~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~._ /** * ⎡0 0 0⎤ * ⎢0 0 0⎢ * ⎣0 0 0⎦ **/ // array rep of the matrix var zero_arr:Array = new Array(); var factor_arr:Array = new Array(); // loop thru rows x cols, and push zero into each element for (var j:int=0; jArray. * @param dim The w/h of the matrix. * @return A list w × h elements as the identity. * */ public static function additiveIdent(dim:Point):Array { //]~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~._ /** * Additive identity of a matrix states: * * ⎡1 2 1⎤ ⎡0 0 0⎤ ⎡0 0 0⎤ * ⎢1 1 4⎢ + ⎢0 0 0⎢ = ⎢0 0 0⎢ * ⎣2 0 3⎦ ⎣0 0 0⎦ ⎣0 0 0⎦ * **/ // use the zero matrix generator return (genZeroMatrix(dim)); }//]~*~~*~~*~~*~~*~~*~~*~~*~~·¯ public function isBinary(mtx:Array):Boolean { //]~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~._ for (var j:int=0; jArray for a given dimension. * @param mtx The square matrix as 2 dimensional list to create identity for. * @return A list of * */ public static function invert(mtx:Array):Array { //]~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~~*~._ // return empty array if it's not square if (mtx.length != (mtx[0] as Array).length) return ([]); // loop iterators var i:int; var j:int; //var cnt:int = 0; var piv:int = 0; // dimension var size:int = mtx.length; var row_arr:Array = new Array(); // identity var ident_arr:Array = genIdenty(new Point(size, size)); // return array var invert_arr:Array = genZeroMatrix(new Point(size * 2, size)); // build augmented matrix for (j=0; j