nfTlWNl rn Ѻq$³*AӪ}# j_)6 "|PhxNK;?!NUoVe܌GJn WQ^ͭJȰN;\XFQJLںxz,e;G> M'(x@@#W,4zUʊYP3JrqI4Tl@r6Ó/bRcBOtS7~:vI)o-yֹ*2!eh}|Q3o CZNUWD!h&AWGMYj M=&9,og{"nך>ƒWYbr50'*[ӓ27R7~<1mf٭#b8;Yȟ0p>iYy)FA%WEJq49V)G7RA/oՈ^u YWQoT=<$^ZnDO -d]=5\q\qLӅt,X0ڣl$^)M5Ɛ&Mb>ϣGVPޯ̾7}M>XѸg\ 9  dp( xRpS]`ɻJrqI4Tl@r6?ڳdbj,z #35yqrހ$1u?l@xz[p3oh.o]\ lI Ƒ ^{ΚFXXlRa]|WXYESjWt儩\!!wސX"U<p,[}%M {)x$)Z\jO TNwR5Lstz]6\t{il̬Tda^1B[3xy̸3 a]4fYX'Lfo@ &;BW+F}v.(W5X$[-8iz #1@{l2FJ=5]C8)7Ө w/%vsƞi;HeYV7FK4\2_5&nWTUf͵qA|Vrg~q2!qDV[|f.H 0fokE :0BcXϻM.nu򽔬ąKy|/9E9=P'9sC_/Z*63rD)8X~czI=rخ{ob$xdy:\r7R4M=,*c{?d6] owu0%="Ӥ*H%smr#A`Kq,33Y+=B$v |=h4oe`w]Y1 bKΕ]%]|-f W*N^8vҭ>S;!IEQ-1 qE\`Lٔ*ܝIc Tx ;65>*uH|J9-6? ĢQ$3ADKG?.% .kQ럚=4)F<)o Q,<߁H)DmPQ38v0 z c6fRK*ǛtQxa R(II|Y _?a>q: 1= >{G[p3oh.Ʃ# W/\ pg^YE/V{%'tS7~:vI)oNh]reYCTԺd+ۦD([ ~ccEͭ+g`5/Ӈ]/pQ޸1 ut}*,AF8u?4&CJrqI4Tl@r6ǛᜱO2BQ3yPv#55Ug%IpO>18)b!3/0 Z!HYQp~Ib@8eTu{̧ piZg'4|MZ+ƱL_MZs 쑭t W|ôt1RIzE;x D|>BA -änHy{ѐ$ajN5YN*'T3}Z! /]҃ ʃrmlVk_\OC~⸇[C0u%7 ݋7Ȥ;e/̤oE90)\ӁFsab.Щ $8b:.QQ;p@j Q҆\΁d67tIR$+uLzsG>`BƷӭv$_~# ec$X}%=l"k:wqD]ZSȳo*l0&*M±-g Eh?jj^PkUL*"Z@cno1q RD C\%3{O<.&*5涟kL-4 }GGpK8F[u^{m2_ﺴqm\hz*g,m`+n6٣oE{Y!gHE5&In6$Mýy#|VxQ1C%JvRx{R/]d(*tg\X!4*- ĢQ$3Sp]~㖷ҕlc5`ޠo@ ĢQ$3Ggضo9-olP05l4)F<)o Q,<߁H)DmPQ38߈&/cG8ߣ\pmc<8C| I I#o'='?: 1V%˝$ڇLp&*]M YYsct \Ǚ')! Eϥl_ S يrLasKNO_POLY) { foreach (self::$trendTypePolynomialOrders as $trendMethod) { $order = (int) substr($trendMethod, -1); $bestFit[$trendMethod] = new PolynomialBestFit($order, $yValues, $xValues); if ($bestFit[$trendMethod]->getError()) { unset($bestFit[$trendMethod]); } else { $bestFitValue[$trendMethod] = $bestFit[$trendMethod]->getGoodnessOfFit(); } } } // Determine which of our Trend lines is the best fit, and then we return the instance of that Trend class arsort($bestFitValue); $bestFitType = key($bestFitValue); return $bestFit[$bestFitType]; default: return false; } } }