UNPKG

lalg

Version:

Linear algebra library - backed by C++.

198 lines (159 loc) 5.79 kB
var lalg = require('lalg'); var fs = require('fs'); var csv = require("fast-csv"); A = lalg.rand( 30 ) ; A.name = "MAT A" ; console.log( "name ", (A.name=='MAT A')?"PASS":" *** FAIL ***" ) ; A = new lalg.Array( 3,3, [ 1,6,3,4,45,6,17,8,9.4,10,11,12 ] ) ; tot = Math.abs( A.inv().inv().sub( A) .sum().sum() ) ; console.log( "inv ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; A = new lalg.Array( 3,3, [ 1,6,3,4,45,6,17,8,9.4,10,11,12 ] ) ; var PI = A.pinv() ; tot = Math.abs( PI.sub( A.inv() ).sum().sum() ) ; console.log( "pinv (square) ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; A = new lalg.Array( 4,3, [ 1,6,3,4,45,6,17,8,9.4,10,11,12 ] ) ; var PI = A.pinv() ; console.log( "pinv (tall) ", (PI.m==A.n && PI.n==A.m)?"PASS":" *** FAIL ***" ) ; A = new lalg.Array( 3,4, [ 1,6,3,4,45,6,17,8,9.4,10,11,12 ] ) ; var PI = A.pinv() ; console.log( "pinv (short) ", (PI.m==A.n && PI.n==A.m)?"PASS":" *** FAIL ***" ) ; var R = A.mul( PI ) ; tot = Math.abs( R.sub( lalg.eye(3) ).sum().sum() ) ; console.log( "pinv values ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; A = lalg.rand(10) ; var arr = Array.from(A) ; var sum = arr.reduce(function(a, b) { return a + b; }, 0); var sum2 = A.sum().sum() ; tot = Math.abs( sum-sum2 ) ; console.log( "iterator ", (arr.length == 100 && tot<0.0001)?"PASS":" *** FAIL ***" ) ; var CO = A.getColumns() ; console.log( "getColumns ", (CO.m==A.m && CO.n==1)?"PASS":" *** FAIL ***" ) ; CO = A.getColumns([0,1,2,3,4,5,6,7,8,9]) ; tot = Math.abs( CO.sub(A).sum().sum() ) ; console.log( "getColumns all ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; var RO = A.getRows() ; console.log( "getRows ", (RO.n==A.n && RO.m==1)?"PASS":" *** FAIL ***" ) ; RO = A.getRows([0,1,2,3,4,5,6,7,8,9]) ; tot = Math.abs( RO.sub(A).sum().sum() ) ; console.log( "getRows all ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; A.removeRow() ; console.log( "removeRow ", (A.m==9)?"PASS":" *** FAIL ***" ) ; A.removeColumn() ; console.log( "removeColumn ", (A.n==9 && A.m==9)?"PASS":" *** FAIL ***" ) ; const rr = fs.createReadStream('node_modules/lalg/data/foo.csv'); var csvStream = csv() ; rr.pipe(csvStream); var P = lalg.read( csvStream ) ; if( P ) { P .then( function(val) { if( val.m == 4 ) { console.log( "Read Promise ", "PASS" ) ; } else { console.log( "Read Promise ", " *** FAIL ***" ) ; } }) .catch( function(err) { console.log( "Read Promise ", " *** FAIL ***" ) ; }); } var A = new lalg.Array( 3, 3, [] ) ; console.log( "new Array empty", (A.m==A.n && A.n==3)?"PASS":" *** FAIL ***" ) ; var A = new lalg.Array( 3, 3, [1,2,3,4,5,6,7,8,9] ) ; A.mulp(A, function(err,x) { if( err ) { console.log( "MULP Callback ", " *** FAIL ***" ) ; } else { if( x.m == 3 ) { console.log( "MULP Callback ", "PASS" ) ; } else { console.log( "MULP Callback ", " *** FAIL ***" ) ; } } }) ; var P = A.mulp(A) ; if( P ) { P .then( function(val) { if( val.m == 3 ) { console.log( "MULP Promise ", "PASS" ) ; } else { console.log( "MULP Promise ", " *** FAIL ***" ) ; } }) .catch( function(err) { console.log( "MULP Promise ", " *** FAIL ***" ) ; }); } B = lalg.rand(7) ; A.mulp(B, function(err,x) { if( err ) { console.log( "MULP err ", "PASS" ) ; } else { console.log( "MULP err ", " *** FAIL ***" ) ; } }) ; var A = new lalg.Array( 3, 3, [1,2,3,4,5,6,7,8,9] ) ; var B = new lalg.Array( 3, 3, [10,11,12,13,14,15,16,17,18] ) ; A = lalg.rand( 30 ) ; B = lalg.rand( 30 ) ; var tot = Math.abs( A.sub(A).sum().sum() ) ; console.log( "A-A ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; console.time("mul"); for( var i=0 ; i<100 ; i++ ) { A.mul( B ) ; } //console.timeEnd("mul"); A = lalg.rand(50) ; console.time("inv"); for( var i=0 ; i<100 ; i++ ) { A.inv() ; } //console.timeEnd("inv"); A = lalg.rand(50) ; var tot = Math.abs( 50 - A.mul( A.inv() ).sum().sum() ) ; console.log( "A * inv(A) ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; tot = A.length ; console.log( "A.m ", (50==A.m)?"PASS":" *** FAIL ***" ) ; console.log( "A.n ", (50==A.n)?"PASS":" *** FAIL ***" ) ; console.log( "A.length ", (tot==(A.m * A.n))?"PASS":" *** FAIL ***" ) ; A = lalg.rand(50) ; var S = A.sum() ; S = S.sub( A.transpose().sum(1).transpose() ) ; tot = Math.abs( S.sum() ) ; console.log( "A transpose ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; A = lalg.rand( 10, 7 ) ; var svd = A.dup().svd() ; var SS = lalg.diag( svd.S, 10 ) ; var R = svd.U.mul(SS).mul(svd.VT) ; var tot = Math.abs( R.sub(A).sum().sum() ) ; console.log( "A.svd() ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; A = new lalg.Array( 3,4, [1,3,5,2,6,10,3,9,15,1,3,5] ) ; P = A.dup().pca(.99) ; console.log( "pca(A) - linear", (P.length==4)?"PASS":" *** FAIL ***" ) ; A = lalg.rand( 3,4 ) ; P = A.dup().pca(1.0) ; console.log( "pca(A) - rand ", (P.length==12)?"PASS":" *** FAIL ***" ) ; A = new lalg.rand( 25 ) ; B = A.add(A) ; var tot = Math.abs( B.sub( A.mul(2) ).sum().sum() ) ; console.log( "mul ", (tot<0.001)?"PASS":" *** FAIL ***" ) ; var BIG1 = lalg.rand(3000) ; var BIG2 = lalg.rand(3000) ; console.log( "rand big ", (BIG1.m==BIG1.n&&BIG2.m==BIG2.n)?"PASS":" *** FAIL ***" ) ; console.time("mulp 3k"); BIG1.mulp( BIG2 ) .then( function( res ) { console.log( "mulp big ", "PASS" ) ; console.timeEnd("mulp 3k"); }) .catch( function( err ) { console.log( "mulp big ", " *** FAIL ***" ) ; }); A = lalg.rand(10) ; var NR = A.norm(1) ; var NC = A.norm(0) ; console.log( "norm ", (Math.abs(NR.norm()-NC.norm())<0.0001)?"PASS":" *** FAIL ***" ) ; B = A.findGreater().add( A.findLessEqual() ) ; tot = Math.abs( B.sub(A).sum().sum() ) ; console.log( "find ", (tot<0.001)?"PASS":" *** FAIL ***" ) ;