/* ĠĊ Ġ* ĠCopyright Ġ 2 0 1 5 ĠAlex ander ĠNo z ik . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġru . in r . mass . min uit Ċ Ċ import Ġorg . apache . commons . math 3 . linear . Array Real Vector Ċ Ċ /** Ċ Ġ* ĠUtilities Ġfor Ġoperating Ġon Ġvectors Ġand Ġmatrices Ċ Ġ* Ċ Ġ* Ġ@ version Ġ$ Id $ Ċ Ġ*/ Ċ internal Ġobject ĠM n Utils Ġ{ ĊĠĠĠ Ġfun Ġabsolute Sum Of Elements ( m : ĠM n Algebra ic Sym Matrix ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠDouble Array Ġ= Ġm . data () ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġabs ( data [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( v 1 : ĠReal Vector , Ġv 2 : ĠReal Vector ?): ĠReal Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġv 1 . add ( v 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( m 1 : ĠM n Algebra ic Sym Matrix , Ġm 2 : ĠM n Algebra ic Sym Matrix ): ĠM n Algebra ic Sym Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (!( m 1 . size () Ġ!== Ġm 2 . size ())) Ġ{ Ġ" In compatible Ġmatrices " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠM n Algebra ic Sym Matrix Ġ= Ġm 1 . copy () ĊĠĠĠĠĠĠĠ Ġval Ġa : ĠDouble Array Ġ= Ġresult . data () ĊĠĠĠĠĠĠĠ Ġval Ġb : ĠDouble Array Ġ= Ġm 2 . data () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġa . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ] Ġ+= Ġb [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdiv ( m : ĠM n Algebra ic Sym Matrix ?, Ġscale : ĠDouble ): ĠM n Algebra ic Sym Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmul ( m , Ġ 1 Ġ/ Ġscale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdiv ( m : ĠReal Vector ?, Ġscale : ĠDouble ): ĠReal Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmul ( m , Ġ 1 Ġ/ Ġscale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinner Product ( v 1 : ĠReal Vector , Ġv 2 : ĠReal Vector ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (!( v 1 . get Dimension () Ġ!== Ġv 2 . get Dimension ())) Ġ{ Ġ" In compatible Ġvectors " Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġv 1 . get Dimension ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġv 1 . getEntry ( i ) Ġ* Ġv 2 . getEntry ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtotal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmul ( v 1 : ĠReal Vector , Ġscale : ĠDouble ): ĠReal Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġv 1 . map Multiply ( scale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmul ( m 1 : ĠM n Algebra ic Sym Matrix , Ġscale : ĠDouble ): ĠM n Algebra ic Sym Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠM n Algebra ic Sym Matrix Ġ= Ġm 1 . copy () ĊĠĠĠĠĠĠĠ Ġval Ġa : ĠDouble Array Ġ= Ġresult . data () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġa . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ] Ġ*= Ġscale ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmul ( m 1 : ĠM n Algebra ic Sym Matrix , Ġv 1 : ĠReal Vector ): ĠArray Real Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (!( m 1 . n row () Ġ!== Ġv 1 . get Dimension ())) Ġ{ Ġ" In compatible Ġarguments " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArray Real Vector ( m 1 . n row ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġresult . get Dimension ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġresult . get Dimension ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġm 1 [ i , Ġk ] Ġ* Ġv 1 . getEntry ( k ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . set Entry ( i , Ġtotal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmul ( m 1 : ĠM n Algebra ic Sym Matrix , Ġm 2 : ĠM n Algebra ic Sym Matrix ): ĠM n Algebra ic Sym Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (!( m 1 . size () Ġ!== Ġm 2 . size ())) Ġ{ Ġ" In compatible Ġmatrices " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= Ġm 1 . n row () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠM n Algebra ic Sym Matrix ( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġm 1 [ i , Ġk ] Ġ* Ġm 2 [ k , Ġj ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i , Ġj ] Ġ= Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġouter Product ( v 2 : ĠReal Vector ): ĠM n Algebra ic Sym Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFix me : Ġcheck Ġthis . ĠI Ġam Ġassuming Ġthis Ġis Ġjust Ġan Ġouter - product Ġof Ġvector ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġwith Ġitself . ĊĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= Ġv 2 . get Dimension () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠM n Algebra ic Sym Matrix ( n ) ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠDouble Array Ġ= Ġv 2 . toArray () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i , Ġj ] Ġ= Ġdata [ i ] Ġ* Ġdata [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsimilarity ( av ec : ĠReal Vector , Ġmat : ĠM n Algebra ic Sym Matrix ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn : ĠInt Ġ= Ġavec . get Dimension () ĊĠĠĠĠĠĠĠ Ġval Ġtmp : ĠReal Vector Ġ= Ġmul ( mat , Ġavec ) ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġtmp . getEntry ( i ) Ġ* Ġavec . getEntry ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsub ( v 1 : ĠReal Vector , Ġv 2 : ĠReal Vector ?): ĠReal Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġv 1 . subtract ( v 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsub ( m 1 : ĠM n Algebra ic Sym Matrix , Ġm 2 : ĠM n Algebra ic Sym Matrix ): ĠM n Algebra ic Sym Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire (!( m 1 . size () Ġ!== Ġm 2 . size ())) Ġ{ Ġ" In compatible Ġmatrices " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠM n Algebra ic Sym Matrix Ġ= Ġm 1 . copy () ĊĠĠĠĠĠĠĠ Ġval Ġa : ĠDouble Array Ġ= Ġresult . data () ĊĠĠĠĠĠĠĠ Ġval Ġb : ĠDouble Array Ġ= Ġm 2 . data () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġa . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ] Ġ-= Ġb [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ }