package Ġvector . column Ċ Ċ import Ġmatrix . Complex Matrix Ċ import Ġutils . Complex Double Ċ import Ġutils . R Ċ import Ġvector . row . Complex Row Vector Ċ Ċ class ĠComplex Column Vector ( val Ġlength : ĠInt , Ġdata : ĠArray < Complex Double > Ġ= ĠArray ( length ){ 0 . 0 . R }) Ġ: ĠComplex Matrix ( length , Ġ 1 , Ġdata ) Ġ{ ĊĊĠĠĠ Ġconstructor Ġ( length : ĠInt , Ġlambda : Ġ( i : ĠInt ) Ġ-> ĠComplex Double ) Ġ: Ġthis ( length , ĠArray ( length ) Ġ{ Ġlambda ( it ) Ġ}) ĊĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠComplex Double Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ|| Ġindex Ġ>= Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . get : ĠIndex Ġout Ġof Ġbound ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠComplex Double ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ|| Ġindex Ġ>= Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Column Vector . get : ĠIndex Ġout Ġof Ġbound ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ index ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġunary Plus () Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġunary Minus (): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠArray ( length ) Ġ{- Ġdata [ it ]}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠComplex Column Vector ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( length Ġ!= Ġother . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . plus : ĠTwo Ġvectors Ġshould Ġhave Ġthe Ġsame Ġsize .") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ it ] Ġ+ Ġother . data [ it ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplex Column Vector ( length , ĠnewData ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠComplex Column Vector ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( length Ġ!= Ġother . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . minus : ĠTwo Ġvectors Ġshould Ġhave Ġthe Ġsame Ġsize .") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ it ] Ġ- Ġother . data [ it ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplex Column Vector ( length , ĠnewData ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġtimes ( other : ĠComplex Double ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ it ] Ġ* Ġother ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠnewData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġtimes ( other : ĠNumber ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ it ] Ġ* Ġother ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠnewData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġdiv ( other : ĠComplex Double ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ it ] Ġ/ Ġother ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠnewData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġdiv ( other : ĠNumber ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ it ] Ġ/ Ġother . toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠnewData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtranspose (): ĠComplex Row Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Row Vector ( length , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Sub vector ( index Start : ĠInt , Ġindex End : ĠInt ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( index Start Ġ< Ġ 0 Ġ|| Ġindex Start Ġ>= Ġindex End Ġ|| Ġindex End Ġ> Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . Sub vector : ĠIndex Ġout Ġof Ġbound ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= Ġindex End Ġ- Ġindex Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray ( new Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ index Start Ġ+ Ġit ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplex Column Vector ( new Size , ĠnewData ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Sub vector ( index Start : ĠInt , Ġindex End : ĠInt , Ġother : ĠComplex Column Vector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= Ġindex End Ġ- Ġindex Start ĊĠĠĠĠĠĠĠ Ġif Ġ( index Start Ġ< Ġ 0 Ġ|| Ġindex Start Ġ>= Ġindex End Ġ|| Ġindex End Ġ> Ġlength Ġ|| Ġnew Size Ġ!= Ġother . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . Sub vector : ĠIndex Ġout Ġof Ġbound ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . data . forEach Indexed Ġ{ Ġindex , Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ index Start Ġ+ Ġindex ] Ġ= Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġelt wise Mul ( other : ĠComplex Column Vector ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ!= Ġother . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . elt wise Mul : ĠBoth Ġoperands Ġmust Ġhave Ġthe Ġsame Ġsize ") ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠArray ( length ) Ġ{ Ġthis [ it ] Ġ* Ġother [ it ] Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdot Product ( other : ĠComplex Column Vector ): ĠComplex Double Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ!= Ġother . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . dot Product : ĠBoth Ġoperands Ġmust Ġhave Ġthe Ġsame Ġsize ") ĊĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 . R ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġthis [ i ] Ġ* Ġother [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsum ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdot Product ( other : ĠComplex Row Vector ): ĠComplex Double Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ!= Ġother . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . dot Product : ĠBoth Ġoperands Ġmust Ġhave Ġthe Ġsame Ġsize ") ĊĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 . R ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġthis [ i ] Ġ* Ġother [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsum ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcross Product ( other : ĠComplex Column Vector ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ!= Ġ 3 Ġ|| Ġother . length Ġ!= Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Complex Column Vector . dot Product : ĠBoth Ġoperands Ġmust Ġbe Ġ 3 Ġdimensional Ġvectors ") ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ* Ġother [ 2 ] Ġ- Ġthis [ 2 ] Ġ* Ġother [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 2 ] Ġ* Ġother [ 0 ] Ġ- Ġthis [ 0 ] Ġ* Ġother [ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 ] Ġ* Ġother [ 1 ] Ġ- Ġthis [ 1 ] Ġ* Ġother [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreplicate ( length : ĠInt ): ĠComplex Matrix Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ< Ġ 1 ) Ġthrow ĠIllegalArgumentException (" Complex Row Vector . replic ate : Ġlength Ġmust Ġbe Ġgreater Ġthan Ġ 0 .") ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Matrix ( this . length , Ġlength , ĠArray ( this . length Ġ* Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠrowIndex Ġ= Ġit Ġ/ Ġlength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ rowIndex ] ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmap ( lambda : Ġ( e : ĠComplex Double ) Ġ-> ĠComplex Double ): ĠComplex Column Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComplex Column Vector ( length , ĠArray ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlambda ( this [ it ]) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ