package Ġpro . pri er an . mis is . mm . mn k Ċ Ċ import Ġjava . lang . Math .* Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ class ĠAppro x imator ( func : Ġ( Double ) Ġ-> ĠDouble , Ġval Ġfrom : ĠDouble , Ġval Ġto : ĠDouble , Ġmax Pow : ĠInt , Ġapp r Func : Ġ( Int ) Ġ-> Ġ( Double ) Ġ-> Ġ( Double )) Ġ{ ĊĠĠĠ Ġval Ġfunctions Ġ= ĠArray ( max Pow Ġ+ Ġ 1 , Ġ{ Ġi Ġ-> Ġapp r Func ( i ) Ġ}) ĊĠĠĠ Ġval Ġgram Matrix Ġ= Ġgram Matrix ( max Pow Ġ+ Ġ 1 , Ġfunc , Ġfrom , Ġto ) ĊĊĠĠĠ Ġfun Ġget Function ( pow : ĠInt ): Ġ( Double ) Ġ-> ĠDouble Ġ= Ġfunctions [ pow ] ĊĊĠĠĠ Ġfun Ġget Coef s ( pow : ĠInt ): ĠArray < Double > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠArray ( pow Ġ+ Ġ 1 , Ġ{ Ġi Ġ-> ĠArray < Double >( pow Ġ+ Ġ 2 , Ġ{ Ġj Ġ-> Ġgram Matrix [ i ][ j ] Ġ}) Ġ}) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. a . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ][ a [ i ]. size Ġ- Ġ 1 ] Ġ= Ġgram Matrix [ i ][ gram Matrix [ i ]. size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġga uss ( a ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgram Matrix ( m : ĠInt , Ġfunc : Ġ( Double ) Ġ-> ĠDouble , Ġfrom : ĠDouble , Ġto : ĠDouble ): ĠArray < Array < Double >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠArray ( m , Ġ{ Ġi Ġ-> ĠArray < Double >( m Ġ+ Ġ 1 , Ġ{ Ġj Ġ-> Ġ 0 . 0 Ġ}) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġprintln (" Let 's Ġgo ") ĊĠĠĠĠĠĠĠ Ġval ĠexecutorService Ġ= ĠExec utors . new Fixed ThreadPool ( Runtime . get Runtime (). available Processors ()) ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= ĠAtomicInteger ( a . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. a . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠexecutorService . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġi .. a [ i ]. size Ġ- Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ][ j ] Ġ= Ġscalar Product ( from , Ġto , Ġfunctions [ i ], Ġfunctions [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" It Ġremains Ġto Ġfill Ġ${ left . and De crement } Ġrows Ġfrom Ġ${ a . size Ġ- Ġ 1 }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠÐļ Ð°Ð¶ Ð´Ð° Ñı ĠÑģÑĤÑĢÐ¾Ðº Ð° ĠÐ¾ÑĤ Ð´ ÐµÐ»ÑĮ Ð½Ð¾ , ĠÐ¼ Ð½ Ð¾Ð³ Ð¾Ð¿ Ð¾ÑĤ Ð¾Ñĩ Ð½Ð¾ÑģÑĤÑĮ ĊĠĠĠĠĠĠĠ ĠexecutorService . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. a . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ][ a [ i ]. size Ġ- Ġ 1 ] Ġ= Ġscalar Product ( from , Ġto , Ġfunctions [ i ], Ġ{ Ġx Ġ-> Ġfunc ( x ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠexecutorService . shutdown () ĊĠĠĠĠĠĠĠ ĠexecutorService . await Termination ( 1 4 , ĠTimeUnit . DAYS ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. a . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ][ j ] Ġ= Ġa [ j ][ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġa ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġscalar Product ( from : ĠDouble , Ġto : ĠDouble , Ġfunc 1 : Ġ( Double ) Ġ-> ĠDouble , Ġfunc 2 : Ġ( Double ) Ġ-> ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstep Ġ= Ġ 1 E - 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġfunc Ġ= Ġ{ Ġx : ĠDouble Ġ-> Ġfunc 1 ( x ) Ġ* Ġfunc 2 ( x ) Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġintegral Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġfrom ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ+= Ġstep ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġintegral Ġ+= Ġ 4 . 0 Ġ* Ġfunc ( current ) Ġ+ Ġ 2 Ġ* Ġfunc ( current Ġ+ Ġstep ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ> Ġto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcurrent Ġ*= Ġstep Ġ/ Ġ 3 . 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġintegral ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġga uss ( coefficient s : ĠArray < Array < Double >> ): ĠArray < Double > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠEPS Ġ= Ġ 1 E - 1 2 ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġcoefficients . size ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġcoefficients [ 0 ]. size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠArray ( n , Ġ{ Ġi Ġ-> ĠArray < Double >( coefficient s [ i ]. size , Ġ{ Ġj Ġ-> Ġcoefficients [ i ][ j ] Ġ}) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġans Ġ= ĠArray ( m , Ġ{ Ġi Ġ-> Ġ 0 . 0 Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġwhere Ġ= ĠArray ( m , Ġ{ Ġi Ġ-> Ġ- 1 Ġ}) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcol Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġrow Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( col Ġ< Ġm Ġ&& Ġrow Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsel Ġ= Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġrow .. n Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( a [ i ][ col ]) Ġ> Ġabs ( a [ sel ][ col ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsel Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( a [ sel ][ col ]) Ġ< ĠEPS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcol .. m ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġa [ sel ][ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ sel ][ i ] Ġ= Ġa [ row ][ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ row ][ i ] Ġ= Ġtemp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere [ col ] Ġ= Ġrow ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. n Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġrow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġa [ i ][ col ] Ġ/ Ġa [ row ][ col ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġcol .. m ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ i ][ j ] Ġ-= Ġa [ row ][ j ] Ġ* Ġc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. m Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( where [ i ] Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġans [ i ] Ġ= Ġa [ where [ i ]][ m ] Ġ/ Ġa [ where [ i ]][ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġans ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpower Polynomial ( pow : ĠInt ): Ġ( Double ) Ġ-> ĠDouble Ġ= Ġ{ Ġx Ġ-> Ġpow ( x , Ġpow . toDouble ()) Ġ} ĊĊĠĠĠ Ġfun Ġstrange Sin ( pow : ĠInt ): Ġ( Double ) Ġ-> ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= ĠMath . PI Ġ/ Ġ( to Ġ- Ġfrom ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġx Ġ-> Ġsin ( alpha Ġ* Ġpow Ġ* Ġx ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ ĠÐľ Ð½Ð¾Ð³Ð¾ Ñĩ Ð»ÐµÐ½ Ñĭ ĠÐ § ÐµÐ± Ñĭ ÑĪ ÐµÐ² Ð° ĠÐ¿ÐµÑĢ Ð² Ð¾Ð³Ð¾ ĠÑĢ Ð¾Ð´Ð° ĊĠĠĠ Ġfun Ġche by she v ( pow : ĠInt ): Ġ( Double ) Ġ-> ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzero Ġ= Ġ{ Ġx : ĠDouble Ġ-> Ġ 1 . 0 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġ{ Ġx : ĠDouble Ġ-> Ġx Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pow Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġzero ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pow Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfirst ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbefore Ġ= Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbefore 2 Ġ= Ġzero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 2 .. pow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Before Ġ= Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Before 2 Ġ= Ġbefore 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġ{ Ġx : ĠDouble Ġ-> Ġ 2 Ġ* Ġx Ġ* Ġcur Before ( x ) Ġ- Ġcur Before 2 ( x ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore 2 Ġ= Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠÐŀ ÑĢ ÑĤ Ð¾Ð³ Ð¾Ð½ Ð°Ð»Ð¸Ð· Ð°ÑĨÐ¸Ñı ĠÐ ĵ ÑĢÐ°Ð¼ Ð° ĠâĢ ķ ĠÐ ¨ Ð¼Ð¸ Ð´ ÑĤÐ° Ġ( Ð¸Ð»Ð¸ ĠÐ½ ÐµÑĤ ?) ĊĠĠĠ Ġfun Ġor thogonal ( pow : ĠInt ): Ġ( Double ) Ġ-> ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzero Ġ= Ġ{ Ġx : ĠDouble Ġ-> Ġ 1 . 0 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= Ġscalar Product ( from , Ġto , Ġ{ Ġx Ġ-> Ġx Ġ}, Ġzero ) Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscalar Product ( from , Ġto , Ġzero , Ġzero ) ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġ{ Ġx : ĠDouble Ġ-> Ġx Ġ- Ġb 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pow Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġzero ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pow Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfirst ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbefore Ġ= Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbefore 2 Ġ= Ġzero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 2 .. pow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Before Ġ= Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Before 2 Ġ= Ġbefore 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= Ġscalar Product ( from , Ġto , Ġ{ Ġx Ġ-> Ġx Ġ* Ġcur Before ( x ) Ġ}, Ġcur Before ) Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscalar Product ( from , Ġto , Ġcur Before , Ġcur Before ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb 3 Ġ= Ġscalar Product ( from , Ġto , Ġ{ Ġx Ġ-> Ġx Ġ* Ġcur Before ( x ) Ġ}, Ġcur Before 2 ) Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscalar Product ( from , Ġto , Ġcur Before 2 , Ġcur Before 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġ{ Ġx : ĠDouble Ġ-> Ġx Ġ* Ġcur Before ( x ) Ġ- Ġb 2 Ġ* Ġcur Before ( x ) Ġ- Ġb 3 Ġ* Ġcur Before 2 ( x ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore 2 Ġ= Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }