p3/0000755000076500007650000000000010233133462012615 5ustar knortonknorton00000000000000p3/.classpath0000644000076500007650000000043210232361151014574 0ustar knortonknorton00000000000000 p3/.project0000644000076500007650000000055110232360777014277 0ustar knortonknorton00000000000000 p3 org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature p3/build.xml0000644000076500007650000000206010233123502014426 0ustar knortonknorton00000000000000 p3/kalman.jnlp0000644000076500007650000000170210233126177014752 0ustar knortonknorton00000000000000 Kalman Filter Simulation kelly norton Kalman Filter Simulator N/A p3/lib/0000755000076500007650000000000010232361077013367 5ustar knortonknorton00000000000000p3/lib/Jama-1.0.1.jar0000644000076500007650000010106110232361077015367 0ustar knortonknorton00000000000000PKmG* META-INF/PKPKmG*META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMu )h)f&W+x%irrPKlDDPKVt+)Jama/util/Maths.classeON@=CK  .4Ę~W?/7n]W~eC $ܖI8ЀXzI '*v8`'vqׁZρ&s1\c~w#rA\x>ÝqF#4.vCuɉq:#|AGLro ?FOh.[:kN.+ ㄂xQ8| /+||)(r=<&N*>,aD8Ǜ[ ~)>K ~ɯq Ns2S[b`F7R&g!R!݈RGJP:DPVY,ۣ#- -krF*F1cȟ;V(d58 -ӣ=FR_I:ԯIfx$IHVY#F:9:G-"dҰI3VlגZu .юkk'm*t V ,F@hvUsP^sz8vHca67lx,3AyzsaxXϚ ܦ5ᇪj e LI#eH5-NHFLO=D'̤s?l::30K=87պQևzH; zvvkT#KU]KR hRPӿ-\ap !}lZ&T4o[acD3x(]i )1=[uHjyBD=6 ^xlm>zt-QDJZ^ts0r%1Vt;NWQ:|D?q{d.S*[`Z.b6}`7!-Ouz*Ɨ'3 僅?퀘6toY&L2|Hg%uJNo˦ ZM6:#YHn!{.dČ|l$iÉ˕cMI<(}=3 xnpH查t‚X܂u&}-Je%, E4NA_/NKX\†ȥ5鿻[S-$;Q]uB7cq,/)Z$6(u?Yk5 ǧRI у4 Ҷ"`rZUשygSUxČp|y-_]Isyl"z݂jWiߗwJͪ]>KF$dž1Y55vF[fY$2&)[B9\jQo|"LYm eg~T7*3URͬU[DGn679/l>S+|dyV#4VOoH=]"å2w>zct#8 ?xt&|Mh*\ъ?` 6qր̋U1tf<ڰ A:v]C 6QNRYCԬ*r6'%NLM立DžnM#leTI>*>1M: Spw%|م-%/(Ve BYkR瞝j 2W,t49TobL0L`QPq+%5k9[s׸kK5xVt%< cM-P{$n(9⬅\<3"_;gfϻNw#Ѐi[4gekpj"y:Ҩ<͵#,IXKu#v cDi^+8K|n.:]/sky3;\x-U֊X aap :K;CE1YiPKQe~c|ie k+9l+$Kr;&PK!PKVt+)Jama/test/TestMatrix.class\ xLLI kjJ+젬.6@$esQ'@Z* >qEq}nOܙI2i ?w=Y4/)"BG}mft->nF0/37F_a"ߌgFe7Fg@P@``b`f`a 2` l dvY :0Ġ3. 2Ơ; z1 i r1(fЏA38A) 1`a 3`, &08 &2`*i 3`ps|fP͠A D42X` 0Xb0e 1X`d d&[V0A1x cA = ` gpK ^f70;085o0x?!G}012 !Sn<"xE*ֈpkEX'5"\+u"\/ "EEX/M",-"*m".")vZ![ Α}tDJdghDInᬉ9{۞VP"Ћ8do r6jj8 q6G"wZrlWTY(g -,Yg-tDn%r g%-b.z)^&2Ζs .t%g8 .]j8[{y5gkyugpv-gqv>Kξ'O 2d(lggrl(geu[~a}JF'dC+8 xu }Zr 3frVI w!gCwGt a 8d>gu6mxub\soɰKwӽ2K_>OolϪlfq}g2 dx^_"=ξ^N_}VAΰ0a*go]]>pK1J%TT'&bu.&[Մ# ShM:TPV;ڟUǪcܪډEmD |nnMX_?: Ea_Ã#r 鍳7Up1ύ6gx>gua~$fqubgF"ф?17]xD"oz1!t'+ Ejs & X72C<0| Eu[-NmX:鵰}\MhN.oǣu C}DUe Q$'?'M|I=84o9'ŶzIbZ‹uuDlgc9“7R pG>սX{wJl5 a=Sޜn(6&Ujלu8Ynܼ&~9 Յ=ި4-C0a  / `u 8=R:sωEsu!M4Wx?,G9-\ՃQ>}܄{ǤXuhbI#*'[qY177좋 =31 ߌY?Ep]$ʾ`x&pU|!ÎrO{efLu8#S|hBp6n]`CC(ҩ'$FӪo |y'熪kۈNkj:fAc~2߾vњΥõsS)n:_okܡus2'sߩ}TeE>ɜ9cՆd~9NqPk6ԫqպh<īQ>7OwC I.4꾼PWj \]L 0f~6slnM({M"c7j*(%(5Gt Z$C RSz?aLIy@(Pۆw4'BgR_ms[7hkg!T J5M=j!lhVthۨ)TrN>P3Z+&L"yxvKNdԀSK..# ;_uA ;ԎTCN3%nݷ 4504(sEiբojZqRx[7gxn^򸦚nôM~Ÿ[jpPL꺌7jX-_kޮ3mr6gy~u0usG8ꃱц$*  "ޮ2=@0C1|S FZEV[ :O_Oj'5޻N#3ʸ>n̴s4 VQ>95I?~:Ӥc ߅Ψ1~ܨJz.M1 }KW2u18M+ mTߏ<&guB]]6X7"V߉ o$<G W܌ZG=WqvhVKP}F:ax'ėF)aM.fNIIVU6UN^E{j'v0EX0;/ۦ:N8YŒ+cӕ^Ah.¤շ]}+rn_nH?}׮ܙ{@~l>8,DqcHXA}O_ j_O9MjZ[ɮfZܟJv='#ޘ?ߣ/n>Dю=?ɬ^_p? b8zgןveh0u62Is!_ ]٥SM陉扨rCmiHjgkJ$ޠvHH:\)n%Ԫ-[rm[zMP+QOFÖ91eVSI5FA]~p_Vo78@/1tM8~^!;~#&Z^P{1TqpTݨowɊ:}z}QAz;v'6BO  k]̱4">wjc7"3gvBnn^:6Ȕ6" [ɔB{iQiwMFL!9'֦4]rC*+]LWr5zwNމ')"E2M%\^v};{;&,ק3!7m>0Vg!U59w>p+K}R]*.%J" HpV•Faڛoޜ},{*{HWaRߥ h=b_fnD(QA$ nX!$HPi㖽ZI\GarAa {ګq*\BRQX5}S(u nX)8+MD+^/xiJK{W2/)taS.ؖ6`aŇyi@Ǟ\c걛걷1OOZmkx*#jxFߤip\l%"'6RK,J9bi\4\o*-0(JU,SŖ N xi`P/8hf5K4P[(K!.obK餌mR5h&G[h'wY9Y5)[H7tMBb&:袌S7ڠ;Bwz< UP l(/d1@kH5܍+ez$)FVBI X|BNTQz~ʹbNX34js8^ʝP{8hЪr / |_&{{V! 8q2BAr=[*``_e2I|B:rL#d2Z>jFxߠTm՝f*>՗5ZJg6^PS- YYYY lǰ*+yĵ`Sj|6>C&nturhՒ| 5d1e_Lf1dtd*SLLej2_օ@T|EL7vA2rc*噩SH S s:OVkƟa_IF0FȌ^ҎfPsqj46ZcI $ BVx=C!>|.6Lcű4lL%^zyy^fX5ٌTm/ʹ)af2߲T:gԗA[foY$W <)rY)\tEMF c i,/7[9U2RYȴ:E+YjdƕKXLdqip51uZi+RDKVcS-}|CD)݇m&V|$;u׎`D9Q8S}#"LyJuFuwSzztғa5qB|>HamT*RsATʵ ~j~T>ᖠb3uî3®S$ 7of/o _ 3sǧ>pyc{ڟa?CO>6rgq˙3Ke~`dtv/:"ˀ{I}4N+r:!FCR6|"w1bb֍I]7W*Yߐ=dgN.L3!*+^ち!. m&!p xrB-1twD݄(zwrcڹԽ\ϣ$Ǜ)=v57/mhdj c2S(ۇRq_Fo őuw=Ȯ0L{ɭ|_G,#^9MٍQAԴў KgE'~yi}2~^Ӧg=`DC~q:V=8"fD,H!hR^kTUjjuM5zTc1J0}?.y1(hhFʅw3:j&t<6h\[\+>k-%.hI8|JSj}_j\Җ=+"0Box)rGÌ)piYU|A=}L>u{}wkoo|A6"tG$_CIIԩW>s#{ZF.>#/HPG2[/~!5odR%Lc#b w fvc%͝Ƀ>!s>aO6Ų*ko_Q>AްE$nF޶t [r;R,e {)+'X-0ee ȧkgH[#_XPAq YMQ~vnA_~ C|B-~A ğQ抿Ѿ>FL XGZTz~bZHƠ<&R6t Et0C:-By)-cl5k(v5ng#Md$;d4+(U:a:CaHz;NηzUUV^hыPѠmCk%44:Z\AZg0<<:ڈbZg]BQ^IUz!ŭh]hݍt)z.Cbazz2tdI"]!1z9JKWIQIzRʅ*ѵH1kJz4 jzTCoFR,&iVnz &z Ni7 GEzt-DuzOznD$}A4[6 lҭ6ne^t-6NHۆНq(EMEz66f\Mwjhm>{lKHOVѧn6|g>kێCtm}޶mKe{mG;HGlwmߠ=}l^,;ҏnܛ~*!s/QKy2Wr9\Ikr F| QW$?#錄[PF; y'yPyA_X# "1(XQ${On .n{xeρBAG{ dۇ@'Hl.*^ % }Fy د7A__7~DhٿBؿ` C0CCa'p`3F c(qg9Hc`c"S`c*LqT4G03Q^ 8VLZt!U9n.pl ;`Rб f;Cxj:@qc0)w| ?"N8.q2xX<;/r6\EX\W8/Ayv+r5pnX|95νpM1\˯/ ;\V%m. w * R5vM}pB56Qn-W%h 6Zxu=<6ҋ \{e P^u\_Ho~Nnv!Nʽሻ#}PGQ{.|ꎢq}|^_!}3|ހ=^ֽG~p?^ 78~ ~q_G7 (*oU (dVRATR&Hق IVj2PSY*U\-x/R$tPEyQigNEyO|,tCGyBC =݅>H9B4r=QBgPP(4 EHŞB?U(J<=w|paA"yJ/ B x^{|DyWLA(C^I(څQ^0z 9xo0,Plh ITo0;O(.#UxW3WV8ǻNE8{Pm!\@$_?M@k4 5Du7E.h?2":wi&+g4„D: 黺{Q_;+v>Vdg"VIzGs_zC 93/*&_HgU12z-DBp+:G{\c ozt?PK}B!D%MPKTt+) Jama/CholeskyDecomposition.classmT_L[e}?\,΂sе`-L6PS /b0Ƨ>&AM薌e1{ɗ`boi(#>w|}lŤ2H8)ᔄA $\xN>G8<Nnzڍ0qstypGY7t"nLgh L\TsjxR-kgM+& z\I0DOo <stSpVgSgL>CGՊ -e^ҍ|JFZc`Tz }}^:˹YpY%Aدy/.r9R~E͟Ei} ];䂱O9-_器RB"EN m~G+z^E^Kk||NR)o"^1=WB}>L7brց"{)2jϊ#CqR!Ҳ 'H(p#8Q]"eƫ8я%C }66}4<~_̎ւ(a23V_"MӼs{:ɹN8gw"}dW|}>%z5 ӇA(Ս[79ѸMC|*l1 ]HO-f;Q> )و\LbgZ"2ET 3_|c{E``?FHHIKq9TlVFC&ʈ%%2>fe|q" >ij=ąϠ:KR+o-56dhxk l?c `{m&`yhhhPK1~PKTt+)"Jama/EigenvalueDecomposition.class:i`U眹oo//%7佬l (jX塈CIT6UQjE*nTQZm?ťZw 陹-X}?>͙9ۜ9s<lI>,AzQ 8@0Z e`Y"Ce?ŏ%HaRl,8;B%ߑw,&DYL?ﻕMb>~y#)}U+Sd B LJMAse&R t85 C\+I3$JI]%5)gbD}BdD-KZFOk80?y"ڈ9QAC͖&GAnODG ۱wچ+6m銖&ѵE-+ZME ^`A<*Z۱X0fjҶ˗,h>eb;<똦<!0kywID6"PS Z-ڱ+A Y[r#[V"suBKNXҶG1rCkZҞNL,)r,\-\yzW/g%m<4B]guw,X P-K$3,jK" Yvm?X/ e>gjKzZ?حI ][.S{+تH)8Y2<J5pY*F;!vB4W+nvBq"ea5⍦X|"Ԥ /0;%zdQ!VozF2Q;C_u~oiy*Wq;xNr5TS@.!*ZF," 6#N#D;L }X W%Q, d 胗' g§lJO0,Vc8~b 21g-W+a -.[>.m<]ny,u`pKL[PPo;U#'}Qܒ^喒],A&^U ͸x9L+`^ s*hu,q~4A{N.=OU(kZ*#U2JzO4H1(' pj"Q %iF(RV-#ȍe @Lq C3b/YX0eMQ|2iGw'a%~JR##x<1*a2iJDJe5e%uP*͐ݺt9G%ػ*mwIF\K~8W.CvQwB%+tAv\R2d#o,KɹWSɧGL)rN&zȰk CU>c;Rz娱$ uh<=,bW5]طh|Ϫk\ȦIo < ;P#w巆7ܖ?MTYJu*vNڰVqBHPk1ʼ;],2;OWsN-rXIU5ȽS?%Rh8.9gsugkv$;BCƹԘ SS[.Bg6Nl㷻sMRW%o8;yBU^t*4ros8>.DF=!jd*^ELԱJ%GF{p4W t@ExTP; ;`&wB k^δk>؄|ÐGI|%|>ħc÷EwP#q$+8`]q- wp{8ç}>#t3T_A%AW4_4E.}IWPHSX&CL8JE+T&Σrq> kejT'64LA4J->`%bjt6~&[Cct6j):\KSiCGj+(BDm=Mn&&Fӵ4C3>Y?Hi=6񌧓<<9N\Jnϵ4ݳZ=۩ͳNQ+#I7gv"!濞nϴ'hEg~G?_cz׫ )}é>f9{}av^o=IF L a8 So@3}Xp5=8/җ蟁;m#J7XC N"t  p-ׯ6 !%"DI5Q0p;18!KBD<4GTzEU_T0 7#.zC }!k 14DCbdxH'!š`+0>GbG 2.-N1X&bJL3dxa0a:q6d[5ZIo-MEM|tZM/Z8߰}3+-+etz}sT}A>WIrRV82sߩgx2y1ǒ U3#Nt4!'] mFOeԳy%\,BS=on"aՏS+F)Hc~x2y܏#UDь~hM K1SxX^7էXCvGŹTV&yXE&J[֬XuYS%6=I_N7l?r=PVM̀Ko"n]J>L ό/^A4jf|hrig7n86j#g|PcQ a, GQ0 '\KއGj3Wٻ3l³i p \t=3w[ CxfSJq󙡂Y$Fh}{?CmMZZf;\u䵴 ү;nd S\}꽋+*ISۄ#`|N?8.|WIRi(vu$n~Os̨GM]7$ݤzGA `GT3Jî6u7@iY`UiW[_mqE8u٪KDʥJhUoVv,R˜A*,i"YԮs^%:RNU<}=YX)ө:4ٸv3`ցJϪwZ"veIWND9ĺs'cDeGزw޴]CÑZa)vY̢ckfԯ9UX[A-#jFRg+D*We~MLΥ-sQq\-x^(aX C<w010a<$)XJ/x rxW`'a £s_ x[*#=<>!x8>X)Ǫx?p|gx177|Oogo#gH :l&桏z1YA0BôKiXFOEӛ%V *jZ:q8T9r\Q#]b[2Xo/|%eL6lQIZp ScGmB(`T5CӐqXtO Ƙ먬hw(9?/Qil v'x˄&(d&ا<8V;>Mqd= Cm0[R-+_>Kug$,YF"FiNdQarrKȼD(R4#2xQlDaB<<*P;Z "[t]$,f"]b4=,BE(qNe%h$K3T,m4KX!r\r>ҬRe-E.-r Oj %z5G~n]vONYh\]MFȤBUܸY*moxWI5 4ըLGfK'yC`zQųW2ʊ|Fc 086(MZ@_^* 9@C0RxIaL`Gf!ؙ0' DXse/:\fۡc*~+8.'"B'`122n=#鰜qRXpn39 lg\|¹O>TP5\HG1ѩp1u0.U0΅+|h\M: ^@3OoFz apfQ [D=FVGbpHMna97M s䜯>_$,7PKB3)PKTt+)Jama/LUDecomposition.classmVkl\{Nnky]'!dc5I }dכ#hcU*m\*Z$BR*!~DUˣRU@U~]k3s̙󝙹{/_>$ƨM 1_3&ƒ:0]Xrc$%$fIxiUmvA)H+Iȏ=$*ɠw#AGqXqqv1) q;xHJc̏G0${F 4{d1~lSA=sba5Ȝt`cXH VmYV0~&y!9IΦ&M)}pڛM_nZďӹ\!]Lf|N 4ďrQӳx);eONevs;].0R&XSfKb]8_JmnlnsgY{@.Ҧq@G;+{2^VSjɩ]pH>&˝㲕}L);;Z'DhI_NE\CVA6SL..s Sc0'lҹI;Nfҏ; m[,SH>UǦs+4Սi@]11uƞf"uU4[d>,Ȧğv.}A$-S\\悍 lXl9_*giHRyF@ֻ_o2Z,5G[oKX+<ڵ j& " 7٫ϣCu-jTDF*tE}XF8Qv 晿iQ1iF-2`]4Ѣ>]|a:Nz>a,}Ay2Γz8(2u[hSA<+h!wKO`Z9EgpFz+\-J02$%^'Q#(jO8MH:D2TXZ^sgT}P`>Kmn)4Siܭ^ CSIw8;Qp'CD|EpAM~p~cH)Ngɟ%v_YVR7/i1@8SbgœȈ#+'F)Bf:.y+ygxֆ4*{bLmHgXYlͻ,aC#<GVWbL|SqY-'GKְӀsBן #:~0׮tayZT`g Έ;pvE7sURS e;Y>[Xn4oo ٯc79 "o)_)M sUh6:iA?2'1cAȴ} ;2[s_W n-˦>w{&xH$.qSP2,7h{9dHjRC{,D +.@zՔ*we)[^rZk/c%o hzUޡ\ 3z 9cjHpޮf9g#r&R0{6e7cq^2}FK)Kj~\rTEUdcң"MN,gŷʮEK}:6kصkٵmvl]%1,6aTlab+Γ?b;}BkNkb~/_\!;ԇpNPK1h^a PKUt+)Jama/Matrix.classY |[ř=Iϖqć\v$;8s'!`IKX/,IAHQ.=; Mkh9@Xr8%4(@7ff?y~ JUbc(~C̡?Л9VCjFF5zYW4zU5Q2M4$MLքGhb&jb&kb&5Qjg2:N궓vE>\;9)b"i%\P/Op^.X.MJ)36.o'?o }Nun~;Bȅ\\dBvE5_ť\\}oW$1_î;W.ea?`"׽z.n`M:C!^FB(+ީǒo,q.6ΗZl)#Ġ5aD IDeM`aMg&;{Q̣dTkۻ`j^Y]h,(qQBi< ߢHᛎgz 3ZK .i޲{uC2#4VN?^C9([BmKkq[z9/龁'NGXtZleNkЛi-;^\_nnuQQE{ uJ,3'DX\ud dQ]40YR^ٛfu~hݵN6״eۥ 7?F]1@}%P_E%t5~f54K{OPwMJ/̃Y OEݬ.2vObW.E0zޡ^߰ÛDQQŠ'qB Ni_&! glbp<8څ#LQP;HӘvFRys-_-I>Mǔ*izC7m bB#U'r+9ۨT y vZz5 i a/^Kp5d^UUd8qӬ?MĆ{ɮGa@= '͊s ] ~.?o+ϷjH,?I^|kF\~n?׃$>y~: ϹO79DP|Q~O@~ ~?;7z4Ë+OP>3DlٻX ie,y,n3;>&{;"/]5[ K!:St908weMNF0G،( \8U8<9^A0g("CW5@Z2J#n+DGnQFO u y'ԂgRM_fv4ͬR]PeXDy(ų4)Et ^r}TJC#FTcH7NhQ6~îF}}3 ^% SZWM5~>BU *OAtlJ4 ٢' Ė50 kz-mM/A,9ľAs Y;"(A|{~r :~2{i&Ȯ51\ 6X3#/4! Գ^HbKs;egeF UkXW,/^@vB*P/"z1h9h/V/%xSaBI@fFxz#6d+`'D 99DքL`g k/ulv6P#ۈlrڑOOڝf$:;"jb[C4" XXy*򻆓 TEQGU0ix0>+jɎocĜԈf!Oq|y*-9D+Ved&32T咢ISh2h*XqRLm8U#FGcP7P T}@ǴHOktkt9t=Fѕh4 y_T;NVE=4=F/S߆P 튼i\h UpR㎘ J'b4{6X-)KrEM^_e<@m _x#7Qz3MRw4uyսtz 5??a.>Ȝ\{A~[!OQH}ZןE5x^;Fz|}_GCZ ]=f-tMJ֧"[Ɉ+]"bCĊtԳОnũ>ڐճv = F#F%GTOKC|t]>Th݌~R!о{cXVeڋrR8D4WJ}{MBM|҉]~@רҍG[ݦ~BD)=ѫ:$l@c,1b"3F!Sgan$gfx;C!1+AsePNǗBnmqo@F#k΋BV{@jdէXY\ߥd!)e(Rŕ F ,#,Qmnkwrj+IX 1/J:yX`= XÀ`=XzRz&- ])X2w `8?; Ohס^ XA l,ˀe;uV1">nh J_/^@Ҕ+ojɤ`%3eX~*HY4MM~YST=Ԥ0%Oa(Yz=FН#})qS¥uetfmԼ핧 _%dCuUWBq!MQ:K^<%[@ o~L}G$L_fR)/ܛgmJѐ_ӄܒg^ Ftw;g+hj.uJw:4x4&#+e#REf>OQЮSV[*^m^gXsdԚ9DMs3l5@4POSu̽>H+ܟç rߒSJ#j^!)$_7O B"0L(PɆLCJȗ"/SQG{2 6$zޕPK'H,PKUt+)Jama/QRDecomposition.classuV[sSUvO m(=Xlz@@[ʥ)@!HrJ.(3ePDaTt'h9 ->kZJo(h&؉yNwbXDa\$a-}\6`Rl( E5LJ߷дo2{Mp[Znm㨹b:P;OmLjuR0 <~/mӚyTi.SMZ"ƷBR? Xz.mOc#qfI p!Tk+T k<]Z'Jq wș&6Viz^uE7ڄXgϡւ ǙP6"dk%yUmyL ~&&:cZJ907X彜BQÊgKTb")Vf)֝e{XK/6a?ڊY:R~غY31)0Yɶ~ $]:hvU:LL]ܨTK.댟+}PCFUJFXnIF.DƼShJqM9*9 'QO=!|}glq(C'~B&vg {3(/\QR`yYޫho  =qlAEmĆ$ږk]W}C,N#zMʁ,=wT0a` tN;ְoFHx'̆y:m %3V,BHVK8fzҼ)Rv˗t2*JN)$?1,ܞy:+f7b:^9(#:!&T(=稤-*;,ڤT>ST9RVLHD-jZPH."PlK-(UَA'LVkl.zDPmbZvUYyl?탑OxΌQ6ӛmcܘe9 6-r~y"l[ں>h뼶%)"bBX!wkFl]B:X! &Bv AڑV)`\D(A;zx |L<*o* 5~[ "B]TEW1JnmF;L)mI;?g?3Iہ_ͮ*PTSeKzؖۃ\hNJ0?ł@ĭ%O KT+?MUlkBT9Z6ց| 7R"r.c$9CTp ,lt^D.bO}.I<_ꓡq. g>(yP1QB IӉ2/FᔱC7( dyVG=V4xĎ\ȓMГ''x)[bVゔYst|&egNAr]ITSNs9N{&)^NXV2T/v M&KE+Ƌ&sDjwGyi4ߖSb^aq9yr)) "UBn`ݩ&ªKRNL'trOb-_}_w;3xi$ f܋T놤$RRb&/tF&tf:9*-q y迖֢`tvf 6MI7ۂv#E7\ӋqKH':)kMZzȮw_yGejfjNY9>SsbqFIqEӽkp9pP˃Go*]"w+_ƶDLNxY<9.% =p{qH|ąV!- T%(Y;]闹Ųq1EsE5+/ks c=%.t߂|ҕP 8G>ڠ>nϱK ~hQ W jxp: E ֠p| [a.Re،7@o#x7tC" K${ [aȧv_po CBo)%!wn]Aw½}a<;^&: <; C {(앪a Qi)$񮇃Rz;Weҷwt~(үi 8, GYc8.ml:8.7IxA~.U/}+ $#$3xM~ ~%EpJu%H ^Pj742BxSY'vw{v8| (YAxWGxO9+N%8>R5VçBL]WW^u՝R&Ub(o$^CXj odCQ$M40N*q6TLm6j 8[[sxv6c\ۊqn\ExiGb8^ ^Gb3qވخ/+*jZ߀4&^Ї=k{q~?^ux~?9^6w<ol%oǛ߅A~CVxy𿊃_6x4;e8wTQY"6Ҹ˸1vN17>_𛦌{j|\K[م{>g|c݌Zqk7&>g$OZg@9 Kix8Ј/s\`FO;:x-U'q7za%}~pN/^}|V#lr(ezknizh'bհGE3X_`P@-7$8 m[tn@59!-h|crƋ2(MI㚢f| k ?|BSs ?ʜ& NU./~:-[%{kgfJ)HqŠVc |ԬYmyύ`+/z0EEW|@<$X@_%LPKR( NPKmG* META-INF/PKmG*lDD=META-INF/MANIFEST.MFPKVt+)H<#AJama/util/Maths.classPKUt+)!&GJama/examples/MagicSquareExample.classPKVt+)}B!D%M Jama/test/TestMatrix.classPKTt+)1~ A1Jama/CholeskyDecomposition.classPKTt+)B3)"6Jama/EigenvalueDecomposition.classPKTt+)1h^a NNJama/LUDecomposition.classPKUt+)'H,WUJama/Matrix.classPKUt+)ҧmA jJama/QRDecomposition.classPKUt+)R( N%-qJama/SingularValueDecomposition.classPK ~p3/src/0000755000076500007650000000000010233123537013406 5ustar knortonknorton00000000000000p3/src/Kalman.java0000644000076500007650000001250610233101552015451 0ustar knortonknorton00000000000000import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.font.TextLayout; import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; import java.text.DecimalFormat; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import Jama.Matrix; /** * @author knorton */ public class Kalman extends JPanel implements ComponentListener, Runnable, ChangeListener { private boolean _active = true; private Random _random; private int _xscale = 1000; private float _t = 0f; private float _dt = 1f; private float[] _ymeas = new float[_xscale]; private GeneralPath _pmeas = new GeneralPath(); private float[] _ypred = new float[_xscale]; private GeneralPath _ppred = new GeneralPath(); private int _yix = 0; private int _yln = 0; private Matrix _E; private Matrix _I; private Matrix _A; private Matrix _X; private float _dx; private AffineTransform _tx; private double _stdy = 0.1; private double _stdx = 1e-3; public Kalman() { this._random = new Random(); this.setBackground(Color.WHITE); this.addComponentListener(this); _E = new Matrix(new double[][] {{1., 0.},{0., 1.}}); _I = Matrix.identity(2,2); _A = new Matrix(new double[][] {{2.,-1.},{1., 0.}}); _X = new Matrix(new double[][] {{.1}, {0.}}); new Thread(this).start(); } private float yn(float t) { return (float)(Math.sin(0.1*t + 4*Math.sin(0.01*t)) + _stdy*_random.nextGaussian()); } private void printMatrix(Matrix m) { System.out.print("["); for (int i=0;i 0) { p.moveTo(0f,_ymeas[_yix]); for (int i=1;i 0) { p.moveTo(0f,_ypred[_yix]); for (int i=1;i>1); _tx.scale(1,(float)this.getHeight()/4f); } public void stateChanged(ChangeEvent e) { JSlider s = (JSlider)e.getSource(); _stdx = (float)Math.pow(10f,-(float)s.getValue()/10f); } public void componentHidden(ComponentEvent arg0) { } public void componentMoved(ComponentEvent arg0) { } public void componentShown(ComponentEvent arg0) { } static class KalmanNoiseSlider extends JSlider { public KalmanNoiseSlider() { super(JSlider.VERTICAL,10,50,30); this.setBackground(Color.WHITE); this.setMajorTickSpacing(10); this.setMinorTickSpacing(5); this.setPaintTicks(true); } public void paintComponent(Graphics g) { g.setColor(Color.WHITE); g.fillRect(0,0,this.getWidth(),this.getHeight()); super.paintComponent(g); } } public static void main(String[] args) { JFrame fr = new JFrame(); Kalman kp = new Kalman(); KalmanNoiseSlider js = new KalmanNoiseSlider(); js.addChangeListener(kp); kp.setPreferredSize(new Dimension(800,300)); fr.getContentPane().setLayout(new BorderLayout()); fr.getContentPane().add(kp,BorderLayout.CENTER); fr.getContentPane().add(js,BorderLayout.WEST); fr.pack(); fr.show(); } }