From 93fa2bb0b4360ca43e9a451d2f806bad18365a9d Mon Sep 17 00:00:00 2001 From: Jean-Philippe ARGAUD Date: Tue, 15 Dec 2020 21:57:50 +0100 Subject: [PATCH] Documentation example extension --- doc/en/ref_algorithm_KalmanFilter.rst | 17 +++++ doc/en/scripts/simple_KalmanFilter2.py | 33 ++++++++++ doc/en/scripts/simple_KalmanFilter2.res | 58 ++++++++++++++++++ doc/en/scripts/simple_KalmanFilter2.rst | 4 ++ doc/en/scripts/simple_KalmanFilter2_state.png | Bin 0 -> 31855 bytes .../scripts/simple_KalmanFilter2_variance.png | Bin 0 -> 25847 bytes doc/fr/ref_algorithm_KalmanFilter.rst | 17 +++++ doc/fr/scripts/simple_KalmanFilter1_state.png | Bin 29307 -> 30299 bytes .../scripts/simple_KalmanFilter1_variance.png | Bin 24959 -> 25981 bytes doc/fr/scripts/simple_KalmanFilter2.py | 33 ++++++++++ doc/fr/scripts/simple_KalmanFilter2.res | 58 ++++++++++++++++++ doc/fr/scripts/simple_KalmanFilter2.rst | 4 ++ doc/fr/scripts/simple_KalmanFilter2_state.png | Bin 0 -> 30299 bytes .../scripts/simple_KalmanFilter2_variance.png | Bin 0 -> 25981 bytes .../daAlgorithms/ExtendedKalmanFilter.py | 10 ++- src/daComposant/daAlgorithms/KalmanFilter.py | 10 ++- 16 files changed, 232 insertions(+), 12 deletions(-) create mode 100644 doc/en/scripts/simple_KalmanFilter2.res create mode 100644 doc/en/scripts/simple_KalmanFilter2_state.png create mode 100644 doc/en/scripts/simple_KalmanFilter2_variance.png create mode 100644 doc/fr/scripts/simple_KalmanFilter2.res create mode 100644 doc/fr/scripts/simple_KalmanFilter2_state.png create mode 100644 doc/fr/scripts/simple_KalmanFilter2_variance.png diff --git a/doc/en/ref_algorithm_KalmanFilter.rst b/doc/en/ref_algorithm_KalmanFilter.rst index eb958fb..0535b08 100644 --- a/doc/en/ref_algorithm_KalmanFilter.rst +++ b/doc/en/ref_algorithm_KalmanFilter.rst @@ -200,6 +200,22 @@ StoreSupplementaryCalculations .. literalinclude:: scripts/simple_KalmanFilter2.py +.. include:: snippets/Header2Algo10.rst + +.. literalinclude:: scripts/simple_KalmanFilter2.res + +.. include:: snippets/Header2Algo11.rst + +.. _simple_KalmanFilter2_state: +.. image:: scripts/simple_KalmanFilter2_state.png + :align: center + :width: 90% + +.. _simple_KalmanFilter2_variance: +.. image:: scripts/simple_KalmanFilter2_variance.png + :align: center + :width: 90% + .. ------------------------------------ .. .. include:: snippets/Header2Algo06.rst @@ -210,4 +226,5 @@ StoreSupplementaryCalculations .. ------------------------------------ .. .. include:: snippets/Header2Algo07.rst +- [Welch06]_ - [WikipediaKF]_ diff --git a/doc/en/scripts/simple_KalmanFilter2.py b/doc/en/scripts/simple_KalmanFilter2.py index d0acc80..dbd532e 100644 --- a/doc/en/scripts/simple_KalmanFilter2.py +++ b/doc/en/scripts/simple_KalmanFilter2.py @@ -29,6 +29,11 @@ case.setAlgorithmParameters( ], }, ) +case.setObserver( + Info=" Analyzed state at current observation:", + Template='ValuePrinter', + Variable='Analysis', + ) # XaStep, VaStep = 0., 1. for i in range(1,len(Yobs)): @@ -45,3 +50,31 @@ Pa = case.get("APosterioriCovariance") print("") print(" Final a posteriori variance:",Pa[-1]) print("") +# +#------------------------------------------------------------------------------- +# +Observations = array([yo[0] for yo in Yobs]) +Estimates = array([xa[0] for xa in case.get("Analysis")]) +Variances = array([pa[0,0] for pa in case.get("APosterioriCovariance")]) +# +import matplotlib.pyplot as plt +plt.rcParams['figure.figsize'] = (10, 4) +# +plt.figure() +plt.plot(Observations,'kx',label='Noisy measurements') +plt.plot(Estimates,'r-',label='Estimated state') +plt.axhline(Xtrue,color='b',label='Truth value') +plt.legend() +plt.title('Estimate of the state', fontweight='bold') +plt.xlabel('Observation step') +plt.ylabel('Voltage') +plt.savefig("simple_KalmanFilter2_state.png") +# +plt.figure() +iobs = range(1,len(Observations)) +plt.plot(iobs,Variances[iobs],label='A posteriori error variance') +plt.title('Estimate of the a posteriori error variance', fontweight='bold') +plt.xlabel('Observation step') +plt.ylabel('$(Voltage)^2$') +plt.setp(plt.gca(),'ylim',[0,.01]) +plt.savefig("simple_KalmanFilter2_variance.png") diff --git a/doc/en/scripts/simple_KalmanFilter2.res b/doc/en/scripts/simple_KalmanFilter2.res new file mode 100644 index 0000000..b9aaf66 --- /dev/null +++ b/doc/en/scripts/simple_KalmanFilter2.res @@ -0,0 +1,58 @@ +Estimation of a constant variable by filtering +---------------------------------------------- + Noisy measurements acquired on 50 time steps + + Analyzed state at current observation: [0.] + Analyzed state at current observation: [-0.41804504] + Analyzed state at current observation: [-0.3114053] + Analyzed state at current observation: [-0.31191336] + Analyzed state at current observation: [-0.32761493] + Analyzed state at current observation: [-0.33597167] + Analyzed state at current observation: [-0.35629573] + Analyzed state at current observation: [-0.36840289] + Analyzed state at current observation: [-0.37392713] + Analyzed state at current observation: [-0.36331937] + Analyzed state at current observation: [-0.35750362] + Analyzed state at current observation: [-0.37963052] + Analyzed state at current observation: [-0.37117993] + Analyzed state at current observation: [-0.36732985] + Analyzed state at current observation: [-0.37148382] + Analyzed state at current observation: [-0.36798059] + Analyzed state at current observation: [-0.37371077] + Analyzed state at current observation: [-0.3661228] + Analyzed state at current observation: [-0.36777529] + Analyzed state at current observation: [-0.37681677] + Analyzed state at current observation: [-0.37007654] + Analyzed state at current observation: [-0.37974517] + Analyzed state at current observation: [-0.37964703] + Analyzed state at current observation: [-0.37514278] + Analyzed state at current observation: [-0.38143128] + Analyzed state at current observation: [-0.38790654] + Analyzed state at current observation: [-0.38880008] + Analyzed state at current observation: [-0.38393577] + Analyzed state at current observation: [-0.3831028] + Analyzed state at current observation: [-0.37680097] + Analyzed state at current observation: [-0.37891813] + Analyzed state at current observation: [-0.38147782] + Analyzed state at current observation: [-0.37981569] + Analyzed state at current observation: [-0.38274266] + Analyzed state at current observation: [-0.38418507] + Analyzed state at current observation: [-0.38923054] + Analyzed state at current observation: [-0.38400006] + Analyzed state at current observation: [-0.38562502] + Analyzed state at current observation: [-0.3840503] + Analyzed state at current observation: [-0.38775222] + Analyzed state at current observation: [-0.37700787] + Analyzed state at current observation: [-0.37328191] + Analyzed state at current observation: [-0.38024181] + Analyzed state at current observation: [-0.3815806] + Analyzed state at current observation: [-0.38392063] + Analyzed state at current observation: [-0.38539266] + Analyzed state at current observation: [-0.37856929] + Analyzed state at current observation: [-0.37744505] + Analyzed state at current observation: [-0.37154554] + Analyzed state at current observation: [-0.37405773] + Analyzed state at current observation: [-0.37725236] + + Final a posteriori variance: [[0.00033921]] + diff --git a/doc/en/scripts/simple_KalmanFilter2.rst b/doc/en/scripts/simple_KalmanFilter2.rst index bdd55ae..117508f 100644 --- a/doc/en/scripts/simple_KalmanFilter2.rst +++ b/doc/en/scripts/simple_KalmanFilter2.rst @@ -8,3 +8,7 @@ execution of a Kalman step at the arrival of each observation provided iteratively. The keyword "*nextStep*", included in the execution order, allows to not store the background in duplicate of the previous analysis. +In a completely similar way to the reanalysis, the estimate is made in +displaying intermediate results during iterative filtering. Thanks to these +intermediate information, one can also obtain the graphs illustrating the +estimation of the state and the associated *a posteriori* error covariance. diff --git a/doc/en/scripts/simple_KalmanFilter2_state.png b/doc/en/scripts/simple_KalmanFilter2_state.png new file mode 100644 index 0000000000000000000000000000000000000000..fce0c7cf39a3e8c75413b35669f500e57de93a01 GIT binary patch literal 31855 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 z zo=S>n7*uA3BL)d?+B;FSQW_c>>E$$pIG(`r5Kx=ya~cNN)p)YbO}pBGx#8^81CSmT zT=d0WD!&a)0;gUu;P{!wvlDI>5VdQaIgyJ1Dz7`)8$Hv}-EEhHwnfKCvd2@^4+q=7;{IGCQY1#`XYqjeL zc(k6Zy9Dfin;HQ zNaOXFJXS(b8&e<&&~OsBGm+Jy!qmm_>e9ht+lIq;P=;gaL6Xo1dEx=kVc3x}ASB3W zX(jY5JFkuo{yq!eoNbTTgQBXv0A%?ZDiqkG;uus+HdH7KoWhvgb805(+qZ*Aq+xsL zL8T833_O?bc!5q>qi(C~I<|q;&SL+}e4-&GFu>W*7ceAOChNz3HMmVlL<|}F=$Bay zsko1S)c*@z^1a}y%ur{63kMJGy}4x-4sa5<{VQ>=8aqcvvZbY^f$jA4bm_t&g3=KV zn|z>;P}F{zB<};?BL}2X^!{*n$gooQj;m`GwWw=R&;Cy-=H1tfXm@g`#8(4J{5cnS z-w4{H8xCd&IP`1C0eAvEA+uW=V17<3bP;vKZdy_~Sy*%Q3_hnF9-YVP2S<{)7Y#73 z7JyjYYjb=nGb%FC*Mx;>V8}zm!u+6@85~VZCb8I*{+F1$!E}IVZiJIRUehvE`?XN5K5?|&ggz_vcCx=r~ zT3T$}cAoGO?_ByVev3ZI8pAwwX6Vbv4{444rKGH?DWF^6AhpQF#bs%4@PXma@oL8b zo(M|LmeO8v0z*T?s@htU&RFJwfwalV$Jq0Y|K~Kf&I8ku zgX(s}ZEH@N)sY!0Qa50v6&+wCPsgkLhKIG04bdyQO;}+);twnj3x%}q-3VEEc|5H` zgGj&yOfZmu3R_{i`!Zw+stsCZ0jOlOBW35(O*6*p*9mAM-+gZpLLmYe%)To?i0x;$ zsQ7>3kOqCQ&@Irt1@zk(fbDR#Bdc6AeI$q!B(OdG;^N5QNq?@aJO>S@X=LQm>({Sc zp*S$;X2!+EIT>cF>xflYcXxJTpq6^q8_(!f#dco~dP5sR`2tBbhL!Q^ra2LiT5K2x z&x4;Kg035BW$Pu6yKg)l7i?{BHvugC3JRF>%CH|4v6kj$rm3SB$;ruuYv(E0wZ*=6 zc1nS!R19e8MJ>t(BhTXaZNAfI?8me43(SOU~cr_WoLs0~iM~nZ-?VAOl z2MwLyeaGTCz1Zk4#|rN!ixag1?)z&ef%)vrv;nXPn=SYhe~Q8g$z>L6-2Q{h;OPsC zBOSV~)>weQ{{|puJsTx?c}dvU=V=+%fBy~#IF|``Lw(bX5auHUx*39qka7tkX_55^ zub_y?6(~Qg=Dx)L;53-AK-icgB4V<{{=r0B~l1Kq0^;VB1oiwTb=Qw&bIED|Q9gAt?n#5Wt(VC*N?O zBC%izlah*&V+nVLa4yR1gmRFz=+u0si;XI*-=q0GR7i{(hC&eMTIEEV@(La7f>0DwY4>BJ_{1)IzfdEf6fB|xou>`n80lq1uc#V zkOS()%a?&LSF|9FA0*aT$Rujq*h>0BFdq(7}R$ZvBKl@)=fE6kr-ET|KBa zeeX4|@2rfFK|PV4sCi~T-$em>9=4dr-j^ZfhFrzpb)fD7hHZs@IK8$;WNT{+sEQ9j zkgCK9ALwSq(0`WJqeDY;Z@?PZLiWm?4I@F^5A9i0W#`7?-p@Bb9lQI6uNfL+vHPy2 z==PVJ>IK+6H6KCvFzvip_H=^g0u5i&NB!EOC*N2!%651$5s^ADFfi@uM2)JocHF#I zGC)Nbt?0hKd)A|63g@Q*e77ob*9XFYms#{<3OpSzvb^i!==cc~y3MU_?o3#72o(Ap zMHfMOMGl36u0RSqxHFD5Q>WCd>e+Gv`6NN6dS21vZc1b$-wq~}f>lX!=~5U06&HC; zxWbcUmw_w=z%mFwC@kcLb$2dOE�hExEK#aIRBcgtH)G)_9oFOtTb+zV^L`K(qQ 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 L%U#bq2k-n(Uz73j literal 0 HcmV?d00001 diff --git a/doc/fr/ref_algorithm_KalmanFilter.rst b/doc/fr/ref_algorithm_KalmanFilter.rst index c84f906..9692a5f 100644 --- a/doc/fr/ref_algorithm_KalmanFilter.rst +++ b/doc/fr/ref_algorithm_KalmanFilter.rst @@ -201,6 +201,22 @@ StoreSupplementaryCalculations .. literalinclude:: scripts/simple_KalmanFilter2.py +.. include:: snippets/Header2Algo10.rst + +.. literalinclude:: scripts/simple_KalmanFilter2.res + +.. include:: snippets/Header2Algo11.rst + +.. _simple_KalmanFilter2_state: +.. image:: scripts/simple_KalmanFilter2_state.png + :align: center + :width: 90% + +.. _simple_KalmanFilter2_variance: +.. image:: scripts/simple_KalmanFilter2_variance.png + :align: center + :width: 90% + .. ------------------------------------ .. .. include:: snippets/Header2Algo06.rst @@ -211,4 +227,5 @@ StoreSupplementaryCalculations .. ------------------------------------ .. .. include:: snippets/Header2Algo07.rst +- [Welch06]_ - [WikipediaKF]_ diff --git a/doc/fr/scripts/simple_KalmanFilter1_state.png b/doc/fr/scripts/simple_KalmanFilter1_state.png index 101a565ae2eea36168f92db0b9ec7e37687f2b75..5379aff4b252458102ec26f0718862507e8b20b5 100644 GIT binary patch delta 11719 zcmZvC2{=`K_x4tq$3y0!@PuSmNai6zLP9bVLS~X_n}>u{ic02?dCWWu4W=Sf<_wWJ zWc=3ddB5-a|KIC7*W$ldu?)zSAZw7B<39smnD(V-m?2(BgM--ew?n?N4 zJO+&qg2=Tj^_R}@lF&UhNIPL)!j4M{h>YxINWb|lft(?|SlKVF*!yXsnV3DK^wG4D9Ue7K26R3PkL? zn+u$mW7+aIjP|yE(I86R-qpIEKfj*Elgr4+AYu=Rh>4*?5hV+Yw1Ij70RfBOKl=@D zYinyafBU9S#NJAH%J;OS$IpMxGhHn%9BFEjm-62?;JsDto>Np&L1$NPNW`uL7gjE{ z{#>@De&q@dY0bHwl~J;}>5eD2H1h7+oX2Gq71B$WF6B=f)%)J;uo7`u9N^Di?@GE9 zwYuue9zw-=8GT4K{XY83TUqz{M?%8FxQiDrPQ4rVr>Ur@;1CrpHTY&^==U@tB3rI$ z`&rP+xo#(#y3d(APDxLAFs;cIP z%X9Ur)G{Blg`!6X+iS};D^oL_Pv!^mnRmBWC}m|EsM{>8tqHDOyLM-9`Fl;}{S7V! z1qC6`C4-#(&L`Y`3Jy(8O>mWSQc_YAD=V>Mbw260-Z^@Ae<{0j-N4XLZKS@w9!{+J z^Gk8_$bTy^*3Q-A|5{+oe0X@cy1m^VfOovCATlCi-ea;RC$eKu2%^*2D7SyGJw8}$ zNr;$@R=O|P;A-GAtItPTv1endgZ&+lPSt@iCKSQ2nh>2hSVP&?kW7n zk19V{Yd@83Qdg~)R8@5mNl}SqtMosRJlvV4TpFumPP%mOea4k1Lg=AyLV}cWg}l^8 zwwJ%Zf9i&Tfq^Z5k)HF|kB`sOJr)NH?~=~W`uO;8o;ia*^3JIpf+lR$LFK;Cr)=+! z`npK_IG#IqF28!pq$SGsJX6OH*MI)`=cJ)&$^_0U`f~8vbUP;>UtZ7Q1^a=J#6(8T z*HV!Od)t-}goF$BbWhdJOifK~9vUbsDd{rpINEWDh-vhYpFVq*_>$*RBiw3+)!jeq zKURPLZflF8pPZc3o~eKK?3uHtr$DZjI=b}7G>x<(u;dT^@c6i?;XnC4+smOpN$Kv^ zxJ(lazjHF3ae1qo6Erblc7l*F-MGecXSIb=817m(M+YBy^y0;X2ejvo1q@i&E4#S5 zDnJdn{Qi04PE4%;q%aW?k(`_yLO{-R0!2|NuT_MCfh>^6LFz)F1JYU>@$wW(wUvBt$dx4tvN&Qj2 z^USLVvOwZ$JQiv1lb)WQhA3x_jEqcCX=zIwr^+VRJS1APV8i|~Zf@?)`QGEDHr-*- z(O2VsZLF_9dj6dIu8p((voE8M?-KO#0(#oJr*&DED-p``R_cKvT{2l5y-G&G9*54ZDDN)qrVAlhSNNQ?oA5WD49Ua~3+FH|dQ-5N8ef`mzdz7L!U0<1N za&ym>l#~>qHr;Fs#oqVs-8+GgZ$8rzXHaB@S6f@_yfP-e^u31u>WlO8-LIwB3ef{n z2voxPJCDmwo9O6JTUc5ad#zbuH=|!@(spU3HW(7YVx;0O6sh--xSZ}7ZLRR}p2L^B zOXFr7930-F!t&w)Wo73jBqiy1@434x85$bKp?moF_)VWblXrD>N!(jzX>Mt8+1+uD##a=hB8paoxSU2WW}aL_ zq*(bWC@I^^?Z26sn+JOS8osizfA#9swZ+1QDZl}hFK@2)mfTi{5D^9wQu>=4t<-I^ zp?v)OYrnslPN&Dp1jWbGzBqp;=3!@zxB`CeVq^eCZ}t{xEsx=q@=XD+Y#awxh)WVt-$j9RlgO0GG;7@fq#M5vc9iOi48oln%A3=IpjnD0sT9;vLZ zo`T@+%q62F{om_+=ruJp+hmg8y%X2CdNuCVDyHniCX1O-g@uA5A|lRHt;A(^{UnI<{*DU}hNtr$CUf1%D*pa5Z}swb`-Ew5 zy)Qc-Ieki54LmAalh-c|B@nqd}nXZa%r$w!gGlshV@byz+c+Em9f4lgLjVK z6%KZPyTGN9#`tskRE&&~J3C&eQH>`#9Bs=)Q}E=EAE9D*hZ)vgq2WH1zBDH#C`buh z1cTYMw6x9TEM49x2O3)1Hmj(zlYFW>zR73j(P}!&GaPC9Ejah%H_Pp4o12?6LaTPS zenp*8f2R8T&!0b)UTYjBrKNaM#+43m)&^y^IH_xc zLKE#o&Oeo>*>T!KmO+lE0WEiaJU4xichAG4t#om_s`ahFWzI82rz*0i>9_tVEWD=bc$}2#XUwjp;=@flVzrYNRfkDh6 zAyrY>@TIuZWlc?r6hQK-^52($$U3i1H0fMq)4mC<{?TJMnV18+1ZV9lwg0)q4vSFT zT2OE>`;$%*zx{)QOfiu}GWcwPwPIsq+{Ze ztxn(pi7C3jVGUXQ?1OOR2NJk1>0RoAjt*5WqYUL7UAjNPSCy1b(BJuo!<$?pNYe=) zTAGrIihX?I%a_bNFZ#4I)#7z7Jqr##4g^o%uAP(joG(j_`+|D5mn?i=vRKafO+DbT z;iaXe16dYr50KN*3@9ao5F(POF6C=5%myFtfLhn*IEeQ$~hu zZ+oSEzBe5*m^~?df^>5ueH-HO@fpA3%2=KGojZ}xm(dA$MWyc_5lQ!X1Zc?4?(Wow z_;ZHEcZW*wfuV&fq{{soF2`Va64+g#Yfa<_CGA*Cw>Vx5({BmOb035tY_bA-u~eC! z#4au_NWlEOZN{57Y9lvq-kcvQ<@Q_|i@u(vnF_>W{!136<7g!wGFa)t2|Yis1MN_S z*K%CAP#$sXpPpQO!HmpIbErpERn-7M4#|7V4+$yR5F{ulNGts^d23r6@O!*d=)N$3 z%H-T!xKqOc9Waf)i_n3!XUdh7m9Z|Ss-d9-)sACeh`{)hloZR_+8Pqj)1#Gh0H-7D zyW@;8=jKq9)S$wF(Za%F_0L>#!*28$@6S6DV!)Q;F9m&whiK!;0RWwR`?0eVM=xMR z1+?YJG$H;>>lgPb2ico9+v?w78l=idATKYkOa@}D!;Dx!s}YpaYY8K7n`(>7{AE~f z7YU8~=XV>Z|K@=Ky_wlryZCQ8*H!q?TNN50MWUmlBS2zRq3-Tw0IuhB5BIC^A`(Sy z)JA}J(ju+s(Vl6}(l=9-7KF~Q?HJX~UUtc%R*M zJuX7lC7<<9p*@DR*nL4KUxbj5ux<|o3`4Tt7Gs6u_Xog4r{O?R5MObZd!o)kRN=g` zb#or;-3MW|S^1~z&X?6OpA~aZ2lIWIqy&^~4?zw+otHu;78cGPjC6JqBRv^cX!1)& zM~$qkt>MP#h>3|KqN2Vq3G3(fcYOY=?CB{64OX4yI7AeOt7FsXxgx8se)`-;p*em$ zNVl(O{;hXPd%io9;e%Cf+_T-uvDF@nQ0d2l3CM%gGI@Jl&NGn%=sy6;OaJzqL6UKf zE{Bj16}rDhSm87tGgNA0`T4~K1|c)K$gbOVcDx5QW}3AHBGH#Q59Vx={lWr|6VgdO zQ%L3Mt%4#1h49-VNOQN-Dj+^SHQnnr`sU4>(AiuzNp~WUEjo{1#m9%*e=E3CE-WhQ zGbyDHoD(uKRUwqb+thq^d6@#3l17pwEu5{QyZd@BU;M*Iyc7DSZ zchB_;8WbVL#l_ApE`iUV(<5e3QP~E?9Q*tGJz3XIxvz||0y{HokAC>D6?mBz;1$QX zy1==g6{gv7>D*8iDh{tDmmYnS|H zMbB>%apOX7xB(7tV=INHQ+s(G^S2>eySgYC85vQ4(f+p|Ayw7XNJd9TC1evHQt$D^ zhX!Sge)>el8~>p5A{<`%e>68YTm|S0^v9QpiNY7*&oq&i6G@O(jBwaGt_3;RYkT&t08a|J%pceje;6^w0$mp_ zqh!@O<671ATZrV%EYQ~D%9oWgqdDiXe^I)u@y(l|df@ZvH1Sh3?rBGiGQJY7Zm3(a zc?*GJxXxQRPtsGTPJK$29q&n{!r^+=y~VC117FqUrG4U-_Kxb5OP07HNH`*?&jsK2NxFs)NGIj*Ks7zw1JH`o&LK&o$psDuq z62_$MKb9 z2}!fhN?mxS`g0V!5ou{w%$R|5hfBy32%dr_2uj)Zo1PeTL%jPh0=81`k0H8Pazdr2?+^uM5#Bj>?g&HH@cFuw0MM^C*<->>X@)EjY6ql;16h3*A98Z zR=>A=$#?J9JKL|>IG|KiOiYF|7VaQEpixTz{W#B>5>U?WAIT2s!@)sJ)c`bY?u`oL14!Eu6J^S z%$9R@F4FUZUJup;+JH4Kh^vBz2AO7(WT^M=p9@m2lag59XeK=Xbmf$lJ#}}uO#bp^ zg2VldYl9;rmaP#uuyg_yQX9FGeS;!txTnD5G^ld@p>C=O9TrQ1$(C?TODW6vA5Eto zUqukwr&pBZb@x3mT8}|Dd;mtae9-M>+M#;+U;@mlgPX?68}MWjZU*BEaDU+89`&s; zGiT}m%PrXGZOG2%$?mtSizTCmgu%sMsJD(DV*+Sby>?9n967C0>#OBgmJW`MEk>|@=NNck0S#z_Y{lIX0svd&no18)7MuOUy_MC? z%~lXSnen=&VUdx<7^Hs5x~87n-O#Z#R64n^5DCmD4Mauu&C)mLlk0e7kM>1DA_(0b zKJVq_W!4yg2Ye_zD(a(pyW>NwC4TEZnHRFRzlrxZZ4{qG&T;ql-QpKTMQOkWghL6) z&(GI027f|FM`vPomP@+is+ES?uu3w@A6@Y6D>Ou0y#8Ne9h1VW3O(WSLk2wX_6LWC z%;7-1c2*}zw=a2b@&HFZ0oV=)l@4_c^!jXYMC6zhygve15cu(Cj*eYmL&D=B6AkKq zoS2LZW)K`0v0}aCc^ZZQoR=T=)N})wO@e>!_`Q0vHIfEswW6&pkA}vMDW^8Z^P#g6 z#H-k47C2TO4V0*;7FPS>BsyJ!*`D4h(W#YMPENZm$fNn2+aJb)6cItM5LrG z0NQ-*d*X-^AqgX64=nKs)weJkB*w z06dpKMWtQg2gp~91y^!`cr1(m@^Wsr2w9uosYLc(p9>=1;af(MvNp--MX={kVcMuON57NzRl2Rw5IXyNF# zadf0`bK9T~r9gx(T);=HY;0PZo6`*TsNyr1mK>0yasA)gyz$BdE)=Nb-{^4u#{|nZ zs#+%<`LnwV6SCvnny=)*k4BL8*i$M{|3Hr1m#2UJd;kXUBnV5xA5d-zv24;N(q4#b z6$^Oam|2cA_Vtx?;QZ1`{t1x-0R~5Q985$&SjBKGQIvFlCZsUS!MBCdMq?rD7DFYs zkpP$J_oOuCn) zrJ{)H70Ec^;&<JxPT-bq1#xQZ0w|`TUK<7cX4@EuAqt zktW)v5AiTBgbHMbXn_e3MiGvcRRmc`Rp8nr@ABWf1?C$-{5Q%tTpZ3U=x_Ewxtyp} zHM)2mEt-*oqz&Z!x1T8Tb`V$cC9atTnRH2cZxSJ3(^*WY{=I4k1NID50+8Is8>1gt zfmdQ|0QjIt;-{2iOaiyH;fp(s&Ag4%So6j$dbMAep>=O)z;K7K;^)IQ1o0BU5 zN)Sd7^g*!7C0U8y>T-_Wx`UJa|TS7ZTBSsN@WoR1@>_5r+qR(^G9|l;Pd=_4U;z!c!?= z0vDB(D2&(ptpQ!)Z`6>{h7wCMw!+*<`1XgBzPk%qz#UG)pW$rM-V^VmnZqceA2tGz zp}jDb4lD!^D2n-d%tEdrPhskV@h~M{U#Y3->E4{{ z+?$KvuI;*hI#k$gZA058!%z7KWMyUPUECv=E(9}4_3G7l8E}f?f9@EEJ@_YrECp)N z0_cn3ZJ>qp;C&Sba&TDU%fV+}86L1b-#j#Q)A!Gh=Q=lmzkqv0bM&VhCBtzrCSJO? zOoU8DZqfJI_hnp}@6V;Lc3()l(dDmL{SP;HIv8orZf-3-sfyT;5!n||+`S>> zj_4j@b1l1aCa@0-f588sxrl1%Zoc7}=d9lChNzL_s2OqWC$I?`(2X>JI^^{hBlJ#G zH_t#jm;Y$?sS|`8%P?0rH*=tCpaW6?-oQw-LfMmGf)@-&&LJRBpv8LB)w2Q3H98qR zWL#ce#s(fjHeD<`fBsBDs>7G^23IsVuG7kJL?J@qwvw{>5xX(4XqVYfj4U#~JE3=n zY(9unQc{A?gHA!l?0_>ZWcQVaMZ!6yV{1w9#|V^|@cnhGrQvc?lF+olz2fnwrf@Eg z4!?uph8aLW6%C3l@PS()t2JZ`?^Q-~KHVrVVsx#l?GgL{Q>wF@>KwfrBzkhUk5cFS zpuTp1!xuY^%Y4n&R^+`0D5jRF;O&i8>-lUYu73uv1GKF&OyY&^EgNAl55HQ#ox`-q zd9I7~ywey9HgXLmp~ZF!e7C>f%hpOg_UhHEK_^u~;5+B<^quJJ?ELrcvqWG{8iv`> zVq$u^QowKl!3iEb7&{3QAecN4{FDW{K}f-3h8~^G3ZWt*CvStIECyLxSygqXA25^! z_`abZ*M$qT(1|RQ*(0frfp}gL%(xDJyKF7pgy5+qgE~6R!=t(@zDK_BtJc>E!4#NfPm*4tMVYWCnuJ0F^!wC0O5B@3%+A%1RDRQ4tMSA$SG_OG+GsiJWV{VQI+zMU*Ocz5MnCwA@Cdl|n0v!uI<-damgR(G+kES7ysg1Ql~e89rWS}p_A&dcD$3%ky!9wwzKfZdG; zGaVv!=Y_sAu(&YQm#L0f*$p2bnSdEYfCG~Z1^}EQBGfrKIkuyf!jSl3P(X~5=S7YI zVFLA;UM7tKV@4XYwbQ9+Xo6#9c8S2?PLOcn==<`ex7x!VOF%I(u`rTEGTVi|Oe6sC z+%{fCMTJvBf&nRVo>b7y*1`kbB@f;sX4WSpFm(J_7m0cHun9PMFi_dkaD>n_F-i{; zxt?-+ePl^+(-p&PSTI4wLAHj0FOaGh&x;MJv4w?|YDgpHIN0n-4L<#EYvNtmsU`p0 z`~G(m|7)`ScT4>L_xt~T>1Ax02nBKjHSW7$iH$EuoErGsvdQehZ-D24)2G5z47|Kw zf8UEoL_raz!4(Yu<>Z_N6XUN62A)X}m2=u$P!L8a0WdqZjfbHh`@eS$IS;eMC0zh1 zAS3Ua$Hz~>6u6_i8*8ALyN*u6`wd{HC{D1e5)SXO>_hGBU^f z^%7$t7hWYLO~U99mRqoa{l@HPg5|YefU5E zywLW`8*-ny=(KCQ$3>*T}nftJdB3SzlLL2rTV=mc5;P63o2@%ZR$ksj% z-=_s?TgZNZ4-?;D6R{!_(9q_`8)RX*B~}!*>B1&p4C0PPak1I5Fd(V(*$xX2Cj{I} z(d8Akd{0)l2BUJbjz{bu19-Y#OOrwrA|i-jjA&cF2gU#y;HEC zw}Y!??&K6Z?!R}{E?qCT*zvn0oH!l={i(P1z8mKH01~!Tx=agMv=Xt%`m-R|$wPCn zfXOS62xXXt7#SIv?6UD06v^%OT28e_dSNSFK-?GV8X#x{+!4V4R39>3P{TOMu#EqH zB{l(K5V2B?+tYX@pN0qEc(F0fOVvR+wN)u!3~~jN`F&g9YK6k$0Ss#86pE}J(jHEj-v=7At7-ZvhjP(Jr!`ivG~HYlJ0&1^ck#2 z!XA}QVqsz7*v{j}k9*!+WzH{w1%lHTFEZMdS9eUqS#ZEy1rhREHJh24NdX&*;gTmG zyd(tNIRt@KE|i%41k68xaq#hz2u1 zSKXBkK%9kVWpRV+djh^O0JVBG+IC~qXVt+MKm^ulKnrR{c42E_1OJX9u7NQSmyi$v z;)?^;DVfC`L(;~CGFKE&VteujSloS#Nw^F-7vA(g9+G`8FFz(T# z065NtCr_VdTo@k%DXhf;xuK9G>46qme`bQ%n8C=DLB_XIx52FG7@tuk)hWMC+}85< zD0m-?k&G7)<7cHoO!K=RFh##nnu8PNwKrIB{ImWa3FSig(l>uP9-b+0z`^{4G<3Sujx=aIz-D#T+iTNVu@I|ah#ZP|MU z29qGz6{49gm|0k0>m66H@1)S+e~^)3oZgEi2Do02hN0o#i4JP`AblEz?n2}87rPjK z4&+C{O3Kn`6%8irVTJ~LCLtpW0e1{0AI_7_ z_zoi#HP+Mhbu?KI6NoW9w1{9hn9?MhmE_RbYdbFd;`1r0$CZ zWaSneZ8sdXfz9j;#2Pco0Z6lNdq=3LFC_qI{~B?e~VkK?7LDJ#ppA6$V*Auwkm%n{eC59z(;Y(HvjFbHKwy?YK zD9Apng@%_3OB&z^JuLI~3514#c~{tuLr>~)Xwtn6D4H)OYW*p|NI(VJ0c?lRCT)C) z@}UHEJ*FhGCh}wgev^iuh-}@z8G!xzU%LCRMhA)Bc!a0H$6Qf-TRaJY#}#Ewr2+-B Gp#K92BbNjK delta 10719 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 XMgu&ybw}(7aNWA0saB|B7WBUWtJFVP delta 8526 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 diff --git a/doc/fr/scripts/simple_KalmanFilter2.py b/doc/fr/scripts/simple_KalmanFilter2.py index 3b2135c..749f22e 100644 --- a/doc/fr/scripts/simple_KalmanFilter2.py +++ b/doc/fr/scripts/simple_KalmanFilter2.py @@ -29,6 +29,11 @@ case.setAlgorithmParameters( ], }, ) +case.setObserver( + Info=" État analysé à l'observation courante :", + Template='ValuePrinter', + Variable='Analysis', + ) # XaStep, VaStep = 0., 1. for i in range(1,len(Yobs)): @@ -45,3 +50,31 @@ Pa = case.get("APosterioriCovariance") print("") print(" Variance a posteriori finale :",Pa[-1]) print("") +# +#------------------------------------------------------------------------------- +# +Observations = array([yo[0] for yo in Yobs]) +Estimates = array([xa[0] for xa in case.get("Analysis")]) +Variances = array([pa[0,0] for pa in case.get("APosterioriCovariance")]) +# +import matplotlib.pyplot as plt +plt.rcParams['figure.figsize'] = (10, 4) +# +plt.figure() +plt.plot(Observations,'kx',label='Mesures bruitées') +plt.plot(Estimates,'r-',label='État estimé') +plt.axhline(Xtrue,color='b',label='Valeur vraie') +plt.legend() +plt.title('Estimation de l\'état', fontweight='bold') +plt.xlabel('Pas d\'observation') +plt.ylabel('Tension') +plt.savefig("simple_KalmanFilter2_state.png") +# +plt.figure() +iobs = range(1,len(Observations)) +plt.plot(iobs,Variances[iobs],label='Variance d\'erreur a posteriori') +plt.title('Estimation de la variance d\'erreur a posteriori', fontweight='bold') +plt.xlabel('Pas d\'observation') +plt.ylabel('$(Tension)^2$') +plt.setp(plt.gca(),'ylim',[0,.01]) +plt.savefig("simple_KalmanFilter2_variance.png") diff --git a/doc/fr/scripts/simple_KalmanFilter2.res b/doc/fr/scripts/simple_KalmanFilter2.res new file mode 100644 index 0000000..ab3621b --- /dev/null +++ b/doc/fr/scripts/simple_KalmanFilter2.res @@ -0,0 +1,58 @@ +Estimation par filtrage d'une variable constante +------------------------------------------------ + Observations bruitées acquises sur 50 pas de temps + + État analysé à l'observation courante : [0.] + État analysé à l'observation courante : [-0.41804504] + État analysé à l'observation courante : [-0.3114053] + État analysé à l'observation courante : [-0.31191336] + État analysé à l'observation courante : [-0.32761493] + État analysé à l'observation courante : [-0.33597167] + État analysé à l'observation courante : [-0.35629573] + État analysé à l'observation courante : [-0.36840289] + État analysé à l'observation courante : [-0.37392713] + État analysé à l'observation courante : [-0.36331937] + État analysé à l'observation courante : [-0.35750362] + État analysé à l'observation courante : [-0.37963052] + État analysé à l'observation courante : [-0.37117993] + État analysé à l'observation courante : [-0.36732985] + État analysé à l'observation courante : [-0.37148382] + État analysé à l'observation courante : [-0.36798059] + État analysé à l'observation courante : [-0.37371077] + État analysé à l'observation courante : [-0.3661228] + État analysé à l'observation courante : [-0.36777529] + État analysé à l'observation courante : [-0.37681677] + État analysé à l'observation courante : [-0.37007654] + État analysé à l'observation courante : [-0.37974517] + État analysé à l'observation courante : [-0.37964703] + État analysé à l'observation courante : [-0.37514278] + État analysé à l'observation courante : [-0.38143128] + État analysé à l'observation courante : [-0.38790654] + État analysé à l'observation courante : [-0.38880008] + État analysé à l'observation courante : [-0.38393577] + État analysé à l'observation courante : [-0.3831028] + État analysé à l'observation courante : [-0.37680097] + État analysé à l'observation courante : [-0.37891813] + État analysé à l'observation courante : [-0.38147782] + État analysé à l'observation courante : [-0.37981569] + État analysé à l'observation courante : [-0.38274266] + État analysé à l'observation courante : [-0.38418507] + État analysé à l'observation courante : [-0.38923054] + État analysé à l'observation courante : [-0.38400006] + État analysé à l'observation courante : [-0.38562502] + État analysé à l'observation courante : [-0.3840503] + État analysé à l'observation courante : [-0.38775222] + État analysé à l'observation courante : [-0.37700787] + État analysé à l'observation courante : [-0.37328191] + État analysé à l'observation courante : [-0.38024181] + État analysé à l'observation courante : [-0.3815806] + État analysé à l'observation courante : [-0.38392063] + État analysé à l'observation courante : [-0.38539266] + État analysé à l'observation courante : [-0.37856929] + État analysé à l'observation courante : [-0.37744505] + État analysé à l'observation courante : [-0.37154554] + État analysé à l'observation courante : [-0.37405773] + État analysé à l'observation courante : [-0.37725236] + + Variance a posteriori finale : [[0.00033921]] + diff --git a/doc/fr/scripts/simple_KalmanFilter2.rst b/doc/fr/scripts/simple_KalmanFilter2.rst index 21cc5a6..29cf97d 100644 --- a/doc/fr/scripts/simple_KalmanFilter2.rst +++ b/doc/fr/scripts/simple_KalmanFilter2.rst @@ -8,3 +8,7 @@ l'exécution d'une étape de Kalman à l'arrivée de chaque observation fournie itérativement. Le mot-clé "*nextStep*", inclut dans l'ordre d'exécution, permet de ne pas stocker l'ébauche en double de l'analyse précédente. +De manière entièrement similaire à la réanalyse, l'estimation s'effectue en +affichant des résultats intermédiaires lors du filtrage itératif. Grâce à ces +informations intermédiaires, on peut aussi obtenir les graphiques illustrant +l'estimation de l'état et de la covariance d'erreur *a posteriori* associée. diff --git a/doc/fr/scripts/simple_KalmanFilter2_state.png b/doc/fr/scripts/simple_KalmanFilter2_state.png new file mode 100644 index 0000000000000000000000000000000000000000..5379aff4b252458102ec26f0718862507e8b20b5 GIT binary patch literal 30299 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 XeaDuS-kfPgBCfJDw>B# avec analysis self.StoredVariables["Analysis"].store( Xa ) if self._toStore("SimulatedObservationAtCurrentAnalysis"): - self.StoredVariables["SimulatedObservationAtCurrentAnalysis"].store( _HXa ) + self.StoredVariables["SimulatedObservationAtCurrentAnalysis"].store( Hm((Xn, None)) ) if self._toStore("InnovationAtCurrentAnalysis"): self.StoredVariables["InnovationAtCurrentAnalysis"].store( _Innovation ) # ---> avec current state diff --git a/src/daComposant/daAlgorithms/KalmanFilter.py b/src/daComposant/daAlgorithms/KalmanFilter.py index 2465136..eadb068 100644 --- a/src/daComposant/daAlgorithms/KalmanFilter.py +++ b/src/daComposant/daAlgorithms/KalmanFilter.py @@ -171,18 +171,16 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): if Cm is not None and Un is not None: # Attention : si Cm est aussi dans H, doublon ! _Innovation = _Innovation - Cm * Un # - _A = R + numpy.dot(Ht, Pn_predicted * Ha) - _u = numpy.linalg.solve( _A , _Innovation ) - Xn = Xn_predicted + Pn_predicted * Ha * _u - Kn = Pn_predicted * Ha * (R + numpy.dot(Ht, Pn_predicted * Ha)).I + Kn = Pn_predicted * Ha * numpy.linalg.inv(R + numpy.dot(Ht, Pn_predicted * Ha)) + Xn = Xn_predicted + Kn * _Innovation Pn = Pn_predicted - Kn * Ht * Pn_predicted - Xa, _HXa = Xn, _HX # Pointeurs + Xa = Xn # Pointeurs # self.StoredVariables["CurrentIterationNumber"].store( len(self.StoredVariables["Analysis"]) ) # ---> avec analysis self.StoredVariables["Analysis"].store( Xa ) if self._toStore("SimulatedObservationAtCurrentAnalysis"): - self.StoredVariables["SimulatedObservationAtCurrentAnalysis"].store( _HXa ) + self.StoredVariables["SimulatedObservationAtCurrentAnalysis"].store( Ht * Xn ) if self._toStore("InnovationAtCurrentAnalysis"): self.StoredVariables["InnovationAtCurrentAnalysis"].store( _Innovation ) # ---> avec current state -- 2.39.2