/ *   
 
   *   P R O J E C T :   N y A R T o o l k i t C S 
 
   *   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
   *   T h i s   w o r k   i s   b a s e d   o n   t h e   o r i g i n a l   A R T o o l K i t   d e v e l o p e d   b y 
 
   *       H i r o k a z u   K a t o 
 
   *       M a r k   B i l l i n g h u r s t 
 
   *       H I T L a b ,   U n i v e r s i t y   o f   W a s h i n g t o n ,   S e a t t l e 
 
   *   h t t p : / / w w w . h i t l . w a s h i n g t o n . e d u / a r t o o l k i t / 
 
   * 
 
   *   T h e   N y A R T o o l k i t C S   i s   J a v a   e d i t i o n   A R T o o l K i t   c l a s s   l i b r a r y . 
 
   *   C o p y r i g h t   ( C ) 2 0 0 8 - 2 0 0 9   R y o   I i z u k a 
 
   * 
 
   *   T h i s   p r o g r a m   i s   f r e e   s o f t w a r e :   y o u   c a n   r e d i s t r i b u t e   i t   a n d / o r   m o d i f y 
 
   *   i t   u n d e r   t h e   t e r m s   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e   a s   p u b l i s h e d   b y 
 
   *   t h e   F r e e   S o f t w a r e   F o u n d a t i o n ,   e i t h e r   v e r s i o n   3   o f   t h e   L i c e n s e ,   o r 
 
   *   ( a t   y o u r   o p t i o n )   a n y   l a t e r   v e r s i o n . 
 
   *   
 
   *   T h i s   p r o g r a m   i s   d i s t r i b u t e d   i n   t h e   h o p e   t h a t   i t   w i l l   b e   u s e f u l , 
 
   *   b u t   W I T H O U T   A N Y   W A R R A N T Y ;   w i t h o u t   e v e n   t h e   i m p l i e d   w a r r a n t y   o f 
 
   *   M E R C H A N T A B I L I T Y   o r   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E .     S e e   t h e 
 
   *   G N U   G e n e r a l   P u b l i c   L i c e n s e   f o r   m o r e   d e t a i l s . 
 
   * 
 
   *   Y o u   s h o u l d   h a v e   r e c e i v e d   a   c o p y   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e 
 
   *   a l o n g   w i t h   t h i s   p r o g r a m .     I f   n o t ,   s e e   < h t t p : / / w w w . g n u . o r g / l i c e n s e s / > . 
 
   *   
 
   *   F o r   f u r t h e r   i n f o r m a t i o n   p l e a s e   c o n t a c t . 
 
   * 	 h t t p : / / n y a t l a . j p / n y a t o o l k i t / 
 
   * 	 < a i r m a i l ( a t ) e b o n y . p l a l a . o r . j p >   o r   < n y a t l a ( a t ) n y a t l a . j p > 
 
   *   
 
   * / 
 
 u s i n g   S y s t e m ; 
 
 u s i n g   S y s t e m . D i a g n o s t i c s ; 
 
 n a m e s p a c e   j p . n y a t l a . n y a r t o o l k i t . c s . c o r e 
 
 { 
 
 
 
 
 
 
 
 
 
         / * * 
 
           *   S0n0000o00{ @ l i n k   N y A R P c a 2 d _ M a t r i x P C A } 0U\W0f0ؚSW0_00n0g0Y00
 
           *   o{n0Q[o00{ @ l i n k   N y A R P c a 2 d _ M a t r i x P C A } h0T Ng0Y00
 
           * / 
 
         p u b l i c   c l a s s   N y A R P c a 2 d _ M a t r i x P C A _ O 2   :   I N y A R P c a 2 d 
 
         { 
 
                 p r i v a t e   c o n s t   d o u b l e   P C A _ E P S   =   1 e - 6 ;   / /   # d e f i n e   E P S   1 e - 6 
 
 
 
                 p r i v a t e   c o n s t   i n t   P C A _ M A X _ I T E R   =   1 0 0 ;   / /   # d e f i n e   M A X _ I T E R   1 0 0 
 
 
 
                 p r i v a t e   c o n s t   d o u b l e   P C A _ V Z E R O   =   1 e - 1 6 ;   / /   # d e f i n e   V Z E R O   1 e - 1 6 
 
 
 
                 / * * 
 
                   *   s t a t i c   i n t   Q R M (   A R M a t   * a ,   A R V e c   * d v   ) n0Nfpe
 
                   *   
 
                   *   @ p a r a m   a 
 
                   *   @ p a r a m   d v 
 
                   *   @ 
 
                   * / 
 
                 p r i v a t e   s t a t i c   v o i d   P C A _ Q R M ( N y A R D o u b l e M a t r i x 2 2   o _ m a t r i x ,   d o u b l e [ ]   d v ) 
 
                 { 
 
                         d o u b l e   w ,   t ,   s ,   x ,   y ,   c ; 
 
                         d o u b l e   e v 1 ; 
 
                         d o u b l e   d v _ x ,   d v _ y ; 
 
                         d o u b l e   m a t 0 0 ,   m a t 0 1 ,   m a t 1 0 ,   m a t 1 1 ; 
 
                         / /   < t h i s . v e c T r i d i a g o n a l i z e 2 d ( i _ m a t ,   d v ,   e v ) ; > 
 
                         d v _ x   =   o _ m a t r i x . m 0 0 ; / /   t h i s . m [ d i m   -   2 ] [ d i m   -   2 ] ; / /   d . v [ d i m - 2 ] = a . m [ d i m - 2 ] [ d i m - 2 ] ; / / d - > v [ d i m - 2 ] = a - > m [ ( d i m - 2 ) * d i m + ( d i m - 2 ) ] ; 
 
                         e v 1   =   o _ m a t r i x . m 0 1 ; / /   t h i s . m [ d i m   -   2 ] [ d i m   -   1 ] ; / /   e . v [ d i m - 2 + i _ e _ s t a r t ] = a . m [ d i m - 2 ] [ d i m - 1 ] ; / / e - > v [ d i m - 2 ]   =   a - > m [ ( d i m - 2 ) * d i m + ( d i m - 1 ) ] ; 
 
                         d v _ y   =   o _ m a t r i x . m 1 1 ; / /   t h i s . m [ d i m   -   1 ] [ d i m   -   1 ] ; / /   d . v [ d i m - 1 ] = a _ a r r a y [ d i m - 1 ] [ d i m - 1 ] ; / / d - > v [ d i m - 1 ]   = a - > m [ ( d i m - 1 ) * d i m + ( d i m - 1 ) ] ; 
 
                         / /   XSMOLRk0Y000
 
                         m a t 0 0   =   m a t 1 1   =   1 ; 
 
                         m a t 0 1   =   m a t 1 0   =   0 ; 
 
                         / /   < / t h i s . v e c T r i d i a g o n a l i z e 2 d ( i _ m a t ,   d v ,   e v ) ; > 
 
 
 
                         / /   i n t   j   =   1 ; 
 
                         / /   / /   w h i l e ( j > 0   & &   f a b s ( e v - > v [ j ] ) > E P S * ( f a b s ( d v - > v [ j - 1 ] ) + f a b s ( d v - > v [ j ] ) ) ) 
 
                         / /   w h i l e   ( j   >   0   & &   M a t h . a b s ( e v 1 )   >   P C A _ E P S   *   ( M a t h . a b s ( d v . x )   +   M a t h . a b s ( d v . y ) ) )   { 
 
                         / /   j - - ; 
 
                         / /   } 
 
                         / /   i f   ( j   = =   0 )   { 
 
                         i n t   i t e r   =   0 ; 
 
                         d o 
 
                         { 
 
                                 i t e r + + ; 
 
                                 i f   ( i t e r   >   P C A _ M A X _ I T E R ) 
 
                                 { 
 
                                         b r e a k ; 
 
                                 } 
 
                                 w   =   ( d v _ x   -   d v _ y )   /   2 ; / /   w   =   ( d v - > v [ h - 1 ]   - d v - > v [ h ] )   /   2 ; / / S0S0
 
                                 t   =   e v 1   *   e v 1 ; / /   t   =   e v - > v [ h ]   *   e v - > v [ h ] ; 
 
                                 s   =   M a t h . S q r t ( w   *   w   +   t ) ; 
 
                                 i f   ( w   <   0 ) 
 
                                 { 
 
                                         s   =   - s ; 
 
                                 } 
 
                                 x   =   d v _ x   -   d v _ y   +   t   /   ( w   +   s ) ; / /   x   =   d v - > v [ j ]   - d v - > v [ h ]   + t / ( w + s ) ; 
 
                                 y   =   e v 1 ; / /   y   =   e v - > v [ j + 1 ] ; 
 
 
 
                                 i f   ( M a t h . A b s ( x )   > =   M a t h . A b s ( y ) ) 
 
                                 { 
 
                                         i f   ( M a t h . A b s ( x )   >   P C A _ V Z E R O ) 
 
                                         { 
 
                                                 t   =   - y   /   x ; 
 
                                                 c   =   1   /   M a t h . S q r t ( t   *   t   +   1 ) ; 
 
                                                 s   =   t   *   c ; 
 
                                         } 
 
                                         e l s e 
 
                                         { 
 
                                                 c   =   1 . 0 ; 
 
                                                 s   =   0 . 0 ; 
 
                                         } 
 
                                 } 
 
                                 e l s e 
 
                                 { 
 
                                         t   =   - x   /   y ; 
 
                                         s   =   1 . 0   /   M a t h . S q r t ( t   *   t   +   1 ) ; 
 
                                         c   =   t   *   s ; 
 
                                 } 
 
                                 w   =   d v _ x   -   d v _ y ; / /   w   =   d v - > v [ k ]   - d v - > v [ k + 1 ] ; 
 
                                 t   =   ( w   *   s   +   2   *   c   *   e v 1 )   *   s ; / /   t   =   ( w   *   s   + 2   *   c   * e v - > v [ k + 1 ] )   * s ; 
 
                                 d v _ x   - =   t ; / /   d v - > v [ k ]   - =   t ; 
 
                                 d v _ y   + =   t ; / /   d v - > v [ k + 1 ]   + =   t ; 
 
                                 e v 1   + =   s   *   ( c   *   w   -   2   *   s   *   e v 1 ) ; / /   e v - > v [ k + 1 ] + =   s   *   ( c *   w -   2 *   s   * e v - > v [ k + 1 ] ) ; 
 
 
 
                                 x   =   m a t 0 0 ; / /   x   =   a - > m [ k * d i m + i ] ; 
 
                                 y   =   m a t 1 0 ; / /   y   =   a - > m [ ( k + 1 ) * d i m + i ] ; 
 
                                 m a t 0 0   =   c   *   x   -   s   *   y ; / /   a - > m [ k * d i m + i ]   =   c   *   x   -   s *   y ; 
 
                                 m a t 1 0   =   s   *   x   +   c   *   y ; / /   a - > m [ ( k + 1 ) * d i m + i ]   =   s *   x   +   c   *   y ; 
 
 
 
                                 x   =   m a t 0 1 ; / /   x   =   a - > m [ k * d i m + i ] ; 
 
                                 y   =   m a t 1 1 ; / /   y   =   a - > m [ ( k + 1 ) * d i m + i ] ; 
 
                                 m a t 0 1   =   c   *   x   -   s   *   y ; / /   a - > m [ k * d i m + i ]   =   c   *   x   -   s *   y ; 
 
                                 m a t 1 1   =   s   *   x   +   c   *   y ; / /   a - > m [ ( k + 1 ) * d i m + i ]   =   s *   x   +   c   *   y ; 
 
                         }   w h i l e   ( M a t h . A b s ( e v 1 )   >   P C A _ E P S   *   ( M a t h . A b s ( d v _ x )   +   M a t h . A b s ( d v _ y ) ) ) ; 
 
                         / /   } 
 
 
 
                         t   =   d v _ x ; / /   t   =   d v - > v [ h ] ; 
 
                         i f   ( d v _ y   >   t ) 
 
                         { / /   i f (   d v - > v [ i ]   >   t   )   { 
 
                                 t   =   d v _ y ; / /   t   =   d v - > v [ h ] ; 
 
                                 d v _ y   =   d v _ x ; / /   d v - > v [ h ]   =   d v - > v [ k ] ; 
 
                                 d v _ x   =   t ; / /   d v - > v [ k ]   =   t ; 
 
                                 / /   Ln0eQ0fH0
 
                                 o _ m a t r i x . m 0 0   =   m a t 1 0 ; 
 
                                 o _ m a t r i x . m 0 1   =   m a t 1 1 ; 
 
                                 o _ m a t r i x . m 1 0   =   m a t 0 0 ; 
 
                                 o _ m a t r i x . m 1 1   =   m a t 0 1 ; 
 
 
 
                         } 
 
                         e l s e 
 
                         { 
 
                                 / /   Ln0eQ0fH0o0j0W0
 
                                 o _ m a t r i x . m 0 0   =   m a t 0 0 ; 
 
                                 o _ m a t r i x . m 0 1   =   m a t 0 1 ; 
 
                                 o _ m a t r i x . m 1 0   =   m a t 1 0 ; 
 
                                 o _ m a t r i x . m 1 1   =   m a t 1 1 ; 
 
                         } 
 
                         d v [ 0 ]   =   d v _ x ; 
 
                         d v [ 1 ]   =   d v _ y ; 
 
                         r e t u r n ; 
 
                 } 
 
 
 
                 / * * 
 
                   *   s t a t i c   i n t   P C A (   A R M a t   * i n p u t ,   A R M a t   * o u t p u t ,   A R V e c   * e v   ) 
 
                   *   
 
                   *   @ p a r a m   o u t p u t 
 
                   *   @ p a r a m   o _ e v 
 
                   *   @ 
 
                   * / 
 
                 p r i v a t e   v o i d   P C A _ P C A ( d o u b l e [ ]   i _ v 1 ,   d o u b l e [ ]   i _ v 2 ,   i n t   i _ n u m b e r _ o f _ d a t a ,   N y A R D o u b l e M a t r i x 2 2   o _ m a t r i x ,   d o u b l e [ ]   o _ e v ,   d o u b l e [ ]   o _ m e a n ) 
 
                 { 
 
                         / /   d o u b l e [ ]   m e a n _ a r r a y = m e a n . g e t A r r a y ( ) ; 
 
                         / /   m e a n . z e r o C l e a r ( ) ; 
 
 
 
                         / / P C A _ E X n0Qt
 
                         d o u b l e   s x   =   0 ; 
 
                         d o u b l e   s y   =   0 ; 
 
                         f o r   ( i n t   i   =   0 ;   i   <   i _ n u m b e r _ o f _ d a t a ;   i + + ) 
 
                         { 
 
                                 s x   + =   i _ v 1 [ i ] ; 
 
                                 s y   + =   i _ v 2 [ i ] ; 
 
                         } 
 
                         s x   =   s x   /   i _ n u m b e r _ o f _ d a t a ; 
 
                         s y   =   s y   /   i _ n u m b e r _ o f _ d a t a ; 
 
 
 
                         / / P C A _ C E N T E R h0P C A _ x t _ b y _ x 0 N}k0Qt
 
                         d o u b l e   s r o w   =   M a t h . S q r t ( ( d o u b l e ) i _ n u m b e r _ o f _ d a t a ) ; 
 
                         d o u b l e   w 0 0 ,   w 1 1 ,   w 1 0 ; 
 
                         w 0 0   =   w 1 1   =   w 1 0   =   0 . 0 ; / /   * o u t   =   0 . 0 ; 
 
                         f o r   ( i n t   i   =   0 ;   i   <   i _ n u m b e r _ o f _ d a t a ;   i + + ) 
 
                         { 
 
                                 d o u b l e   x   =   ( i _ v 1 [ i ]   -   s x )   /   s r o w ; 
 
                                 d o u b l e   y   =   ( i _ v 2 [ i ]   -   s y )   /   s r o w ; 
 
                                 w 0 0   + =   ( x   *   x ) ; / /   * o u t   + =   * i n 1   *   * i n 2 ; 
 
                                 w 1 0   + =   ( x   *   y ) ; / /   * o u t   + =   * i n 1   *   * i n 2 ; 
 
                                 w 1 1   + =   ( y   *   y ) ; / /   * o u t   + =   * i n 1   *   * i n 2 ; 
 
                         } 
 
                         o _ m a t r i x . m 0 0   =   w 0 0 ; 
 
                         o _ m a t r i x . m 0 1   =   o _ m a t r i x . m 1 0   =   w 1 0 ; 
 
                         o _ m a t r i x . m 1 1   =   w 1 1 ; 
 
 
 
                         / / P C A _ P C A n0Qt
 
                         P C A _ Q R M ( o _ m a t r i x ,   o _ e v ) ; 
 
                         / /   m 2   =   o _ o u t p u t . m ; / /   m 2   =   o u t p u t - > m ; 
 
                         i f   ( o _ e v [ 0 ]   <   P C A _ V Z E R O ) 
 
                         { / /   i f (   e v - > v [ i ]   <   V Z E R O   ) { 
 
                                 o _ e v [ 0 ]   =   0 . 0 ; / /   e v - > v [ i ]   =   0 . 0 ; 
 
                                 o _ m a t r i x . m 0 0   =   0 . 0 ; / /   * ( m 2 + + )   =   0 . 0 ; 
 
                                 o _ m a t r i x . m 0 1   =   0 . 0 ; / /   * ( m 2 + + )   =   0 . 0 ; 
 
                         } 
 
 
 
                         i f   ( o _ e v [ 1 ]   <   P C A _ V Z E R O ) 
 
                         { / /   i f (   e v - > v [ i ]   <   V Z E R O   ) { 
 
                                 o _ e v [ 1 ]   =   0 . 0 ; / /   e v - > v [ i ]   =   0 . 0 ; 
 
                                 o _ m a t r i x . m 1 0   =   0 . 0 ; / /   * ( m 2 + + )   =   0 . 0 ; 
 
                                 o _ m a t r i x . m 1 1   =   0 . 0 ; / /   * ( m 2 + + )   =   0 . 0 ; 
 
                         } 
 
                         o _ m e a n [ 0 ]   =   s x ; 
 
                         o _ m e a n [ 1 ]   =   s y ; 
 
                         / /   } 
 
                         r e t u r n ; 
 
                 } 
 
                 / / o v e r r i d e 
 
                 p u b l i c   v o i d   p c a ( d o u b l e [ ]   i _ v 1 ,   d o u b l e [ ]   i _ v 2 ,   i n t   i _ n u m b e r _ o f _ p o i n t ,   N y A R D o u b l e M a t r i x 2 2   o _ e v e c ,   d o u b l e [ ]   o _ e v ,   d o u b l e [ ]   o _ m e a n ) 
 
                 { 
 
                         P C A _ P C A ( i _ v 1 ,   i _ v 2 ,   i _ n u m b e r _ o f _ p o i n t ,   o _ e v e c ,   o _ e v ,   o _ m e a n ) ; 
 
 
 
                         d o u b l e   s u m   =   o _ e v [ 0 ]   +   o _ e v [ 1 ] ; 
 
                         / /   F o r 	Yfybk
 
                         o _ e v [ 0 ]   / =   s u m ; / /   e v - > v [ i ]   / =   s u m ; 
 
                         o _ e v [ 1 ]   / =   s u m ; / /   e v - > v [ i ]   / =   s u m ; 
 
                         r e t u r n ; 
 
                 } 
 
 
 
         } 
 
 } 
 
 