From af58380a86e2b35b1ae2c7943c0cf47972fe5331 Mon Sep 17 00:00:00 2001 From: Johnnysoooo <15392046023@163.com> Date: Thu, 5 Jun 2025 16:10:00 +0800 Subject: [PATCH 1/2] [kalman.md] translation update --- lectures/kalman.md | 77 +++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/lectures/kalman.md b/lectures/kalman.md index b540f4c..6cbbd93 100644 --- a/lectures/kalman.md +++ b/lectures/kalman.md @@ -18,7 +18,7 @@ kernelspec: ``` -# 卡尔曼滤波初探 +# 卡尔曼滤波器的初步介绍 ```{index} single: 卡尔曼滤波 ``` @@ -38,17 +38,17 @@ tags: [hide-output] ## 概述 -本讲座为卡尔曼滤波提供了一个简单直观的介绍,适合以下读者: +本讲座为卡尔曼滤波器提供了一个简单直观的介绍,适合以下读者: -* 听说过卡尔曼滤波但不知道它如何工作的人,或者 -* 知道卡尔曼滤波方程但不知道这些方程从何而来的人 +* 听说过卡尔曼滤波器但不知道它如何工作的人,或者 +* 知道卡尔曼滤波的方程但不知道这些方程从何而来的人 关于卡尔曼滤波的更多(进阶)阅读材料,请参见: * {cite}`Ljungqvist2012`,第2.7节 * {cite}`AndersonMoore2005` -第二个参考文献对卡尔曼滤波进行了全面的阐述。 +第二个参考文献对卡尔曼滤波器进行了全面的阐述。 所需知识:熟悉矩阵运算、多元正态分布、协方差矩阵等。 @@ -73,7 +73,7 @@ from scipy.linalg import eigvals ## 基本概念 -卡尔曼滤波在经济学中有许多应用,但现在让我们假装我们是火箭科学家。 +卡尔曼滤波器在经济学中有许多应用,但现在让我们假装我们是火箭科学家。 一枚导弹从Y国发射,我们的任务是追踪它。 @@ -89,7 +89,7 @@ from scipy.linalg import eigvals 密度 $p$ 被称为随机变量 $x$ 的*先验*。 -为了使我们的例子便于处理,我们假设我们的先验是高斯分布。 +为了使我们的例子便于处理,我们假设我们的先验分布是高斯分布。 特别地,我们采用 @@ -127,7 +127,7 @@ p = N(\hat x, \Sigma) --- tags: [output_scroll] --- -# 设置高斯先验密度 p +# 设定高斯先验分布 p Σ = [[0.4, 0.3], [0.3, 0.45]] Σ = np.matrix(Σ) x_hat = np.matrix([0.2, -0.2]).T @@ -142,7 +142,7 @@ Q = 0.3 * Σ # y 的观测值 y = np.matrix([2.3, -1.9]).T -# 设置绘图网格 +# 设定绘图网格 x_grid = np.linspace(-1.5, 2.9, 100) y_grid = np.linspace(-3.1, 1.7, 100) X, Y = np.meshgrid(x_grid, y_grid) @@ -227,8 +227,7 @@ plt.show() 坏消息是我们的传感器并不精确。 -具体来说,我们应该将传感器的输出理解为不是 -$y=x$,而是 +具体来说,我们不应该将传感器的输出理解为$y=x$,而是 ```{math} :label: kl_measurement_model @@ -238,9 +237,9 @@ y = G x + v, \quad \text{where} \quad v \sim N(0, R) 这里 $G$ 和 $R$ 是 $2 \times 2$ 矩阵,其中 $R$ 是正定矩阵。两者都被假定为已知,且噪声项 $v$ 被假定与 $x$ 独立。 -那么,我们应该如何将我们的先验 $p(x) = N(\hat x, \Sigma)$ 和这个新信息 $y$ 结合起来,以改进我们对导弹位置的理解呢? +那么,我们应该如何将我们的先验分布 $p(x) = N(\hat x, \Sigma)$ 和这个新信息 $y$ 结合起来,以提高我们对导弹位置的了解呢? -正如你可能已经猜到的,答案是使用贝叶斯定理,它告诉我们通过以下方式将先验 $p(x)$ 更新为 $p(x \,|\, y)$: +你可能已经猜到了,答案是使用贝叶斯定理,它告诉我们通过以下方式将先验分布 $p(x)$ 更新为 $p(x \,|\, y)$: $$ p(x \,|\, y) = \frac{p(y \,|\, x) \, p(x)} {p(y)} @@ -257,7 +256,7 @@ $$ 由于我们处在线性和高斯框架中,可以通过计算总体线性回归来得到更新后的密度。 -具体来说,已知解[^f1]为 +具体来说,我们可以得出解[^f1]为 $$ p(x \,|\, y) = N(\hat x^F, \Sigma^F) @@ -307,13 +306,13 @@ plt.show() 到目前为止我们取得了什么成果? -我们已经获得了基于先验和当前信息的状态(导弹)当前位置的概率。 +我们在给定先验分布和当前信息的情况下,已经获得了状态(导弹)当前位置的概率。 这被称为"滤波"而不是预测,因为我们是在过滤噪声而不是展望未来。 * $p(x \,|\, y) = N(\hat x^F, \Sigma^F)$ 被称为*滤波分布* -但现在假设我们有另一个任务:预测导弹在一个时间单位(无论是什么单位)后的位置。 +但现在假设我们有另一个任务:预测导弹在一个时间单位后(无论是什么单位)的位置。 为此我们需要一个状态演化的模型。 @@ -422,9 +421,9 @@ plt.show() 然后我们使用当前测量值$y$更新为$p(x \,|\, y)$。 -最后,我们使用$\{x_t\}$的运动方程{eq}`kl_xdynam`更新为$p_{new}(x)$。 +最后,我们使用$\{x_t\}$的运动方程{eq}`kl_xdynam`将其更新为$p_{new}(x)$。 -如果我们现在进入下一个周期,我们就可以再次循环,将$p_{new}(x)$作为当前先验。 +如果我们现在进入下一个周期,我们就可以再次循环,将$p_{new}(x)$作为当前的先验分布。 将符号$p_t(x)$替换为$p(x)$,将$p_{t+1}(x)$替换为$p_{new}(x)$,完整的递归程序为: @@ -473,7 +472,7 @@ plt.show() 这是一个关于 $\Sigma_t$ 的非线性差分方程。 -{eq}`kalman_sdy` 的不动点是满足以下条件的常数矩阵 $\Sigma$: +{eq}`kalman_sdy` 的固定点是满足以下条件的常数矩阵 $\Sigma$: ```{math} :label: kalman_dare @@ -481,7 +480,7 @@ plt.show() \Sigma = A \Sigma A' - A \Sigma G' (G \Sigma G' + R)^{-1} G \Sigma A' + Q ``` -方程 {eq}`kalman_sdy` 被称为离散时间里卡提差分方程。 +方程 {eq}`kalman_sdy` 被称为离散时间黎卡提差分方程。 方程 {eq}`kalman_dare` 被称为[离散时间代数黎卡提方程](https://en.wikipedia.org/wiki/Algebraic_Riccati_equation)。 @@ -498,10 +497,10 @@ plt.show() ```{index} single: Kalman Filter; Programming Implementation ``` -来自 [QuantEcon.py](http://quantecon.org/quantecon-py) 包的 `Kalman` 类实现了卡尔曼滤波器 +[QuantEcon.py](http://quantecon.org/quantecon-py) 包的 `Kalman` 类实现了卡尔曼滤波器 * 实例数据包括: - * 当前先验的矩 $(\hat x_t, \Sigma_t)$ + * 当前先验分布的矩 $(\hat x_t, \Sigma_t)$ * 来自 [QuantEcon.py](http://quantecon.org/quantecon-py) 的 [LinearStateSpace](https://github.com/QuantEcon/QuantEcon.py/blob/master/quantecon/lss.py) 类的一个实例 后者表示形式如下的线性状态空间模型 @@ -516,16 +515,16 @@ $$ 其中冲击项 $w_t$ 和 $v_t$ 是独立同分布的标准正态分布。 -为了与本讲座的符号保持一致,我们设定 +为了与本章节的符号保持一致,我们设定 $$ Q := CC' \quad \text{和} \quad R := HH' $$ -* 来自 [QuantEcon.py](http://quantecon.org/quantecon-py) 包的 `Kalman` 类有许多方法,其中一些我们会等到后续讲座中学习更高级的应用时再使用。 +* [QuantEcon.py](http://quantecon.org/quantecon-py) 包的 `Kalman` 类有许多方法,其中一些我们会等到后续章节中学习更高级的应用时再使用。 * 与本讲座相关的方法有: -* `prior_to_filtered`,将 $(\hat x_t, \Sigma_t)$ 更新为 $(\hat x_t^F, \Sigma_t^F)$ + * `prior_to_filtered`,将 $(\hat x_t, \Sigma_t)$ 更新为 $(\hat x_t^F, \Sigma_t^F)$ * `filtered_to_forecast`,将滤波分布更新为预测分布 -- 成为新的先验分布 $(\hat x_{t+1}, \Sigma_{t+1})$ * `update`,结合上述两种方法 * `stationary_values`,计算{eq}`kalman_dare`的解和相应的(稳态)卡尔曼增益 @@ -574,7 +573,7 @@ $$ A, C, G, H = 1, 0, 1, 1 ss = LinearStateSpace(A, C, G, H, mu_0=θ) -# 设置先验,初始化卡尔曼滤波器 +# 设定先验分布,初始化卡尔曼滤波器 x_hat_0, Σ_0 = 8, 1 kalman = Kalman(ss, x_hat_0, Σ_0) @@ -583,7 +582,7 @@ N = 5 x, y = ss.simulate(N) y = y.flatten() -# 设置图形 +# 设定图形 fig, ax = plt.subplots(figsize=(10,8)) xgrid = np.linspace(θ - 5, θ + 2, 200) @@ -614,9 +613,9 @@ $$ z_t := 1 - \int_{\theta - \epsilon}^{\theta + \epsilon} p_t(x) dx $$ -对于 $t = 0, 1, 2, \ldots, T$。 +其中 $t = 0, 1, 2, \ldots, T$。 -绘制 $z_t$ 与 $T$ 的关系图,设置 $\epsilon = 0.1$ 和 $T = 600$。 +绘制 $z_t$ 与 $T$ 的关系图,设定 $\epsilon = 0.1$ 和 $T = 600$。 你的图应该显示误差不规则地下降,类似这样 @@ -670,21 +669,21 @@ plt.show() :label: kalman_ex3 ``` -如{ref}`上文所述 `,如果冲击序列 $\{w_t\}$ 不是退化的,那么在 $t-1$ 时刻通常无法无误地预测 $x_t$(即使我们能观察到 $x_{t-1}$ 也是如此)。 +如{ref}`上文所述 `,如果冲击序列 $\{w_t\}$ 不是退化的,那么在 $t-1$ 时刻通常无法无误地预测 $x_t$(即使我们能观察到 $x_{t-1}$ ,情况也是如此)。 -让我们现在将卡尔曼滤波得到的预测值 $\hat x_t$ 与一个**被允许**观察 $x_{t-1}$ 的竞争者进行比较。 +让我们现在将在卡尔曼滤波器得到的预测值 $\hat x_t$ 与一个**被允许**观察 $x_{t-1}$ 的竞争者进行比较。 这个竞争者将使用条件期望 $\mathbb E[ x_t \,|\, x_{t-1}]$,在这种情况下等于 $A x_{t-1}$。 条件期望被认为是在最小化均方误差方面的最优预测方法。 -(更准确地说,关于 $g$ 的 $\mathbb E \, \| x_t - g(x_{t-1}) \|^2$ 的最小化器是 $g^*(x_{t-1}) := \mathbb E[ x_t \,|\, x_{t-1}]$) +(更准确地说, $\mathbb E \, \| x_t - g(x_{t-1}) \|^2$ 关于 $g$ 的最小值是 $g^*(x_{t-1}) := \mathbb E[ x_t \,|\, x_{t-1}]$) -因此,我们是在将卡尔曼滤波与一个拥有更多信息(在能够观察潜在状态的意义上)的竞争者进行比较,并且 +因此,我们是在将卡尔曼滤波器与一个拥有更多信息(能够观察潜在状态)的竞争者进行比较,并且 在最小化平方误差方面表现最优。 -我们的对比竞赛将以平方误差来评估。 +我们的赛马式竞争将以平方误差来评估。 具体来说,你的任务是生成一个图表,绘制 $\| x_t - A x_{t-1} \|^2$ 和 $\| x_t - \hat x_t \|^2$ 对 $t$ 的观测值,其中 $t = 1, \ldots, 50$。 @@ -702,7 +701,7 @@ A \right) $$ -要初始化先验密度,设定 +要初始化先验分布,设定 $$ \Sigma_0 @@ -741,10 +740,10 @@ A = [[0.5, 0.4], [0.6, 0.3]] C = np.sqrt(0.3) * np.identity(2) -# 设置状态空间模型,初始值 x_0 设为零 +# 设定状态空间模型,初始值 x_0 设为零 ss = LinearStateSpace(A, C, G, H, mu_0 = np.zeros(2)) -# 定义先验密度 +# 定义先验分布 Σ = [[0.9, 0.3], [0.3, 0.9]] Σ = np.array(Σ) @@ -759,7 +758,7 @@ print(eigvals(A)) # 打印平稳 Σ S, K = kn.stationary_values() -print("平稳预测误差方差:") +print("平稳的预测误差方差:") print(S) # 生成图表 @@ -789,7 +788,7 @@ plt.show() ```{exercise} :label: kalman_ex4 -尝试上下调整系数 $0.3$ (在 $Q = 0.3 I$ 中)。 +尝试上下调整$Q = 0.3 I$ 中的系数 $0.3$。 观察平稳解 $\Sigma$ (参见 {eq}`kalman_dare`) 中的对角线值如何随这个系数增减而变化。 From c8f569d2c9feafe168bdbbb269b23eb4f0bb48f2 Mon Sep 17 00:00:00 2001 From: Humphrey Yang Date: Fri, 6 Jun 2025 13:08:49 +1000 Subject: [PATCH 2/2] updates --- .../lecture_specific/kalman/kalman_ex3.png | Bin 27250 -> 40336 bytes lectures/kalman.md | 28 ++++++++++-------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lectures/_static/lecture_specific/kalman/kalman_ex3.png b/lectures/_static/lecture_specific/kalman/kalman_ex3.png index cad236be5915f96a99515bfc0a14bb5c5b704ab5..a1b2a8cf183fd342d6ce6debe207ee3d5c0b7a6b 100644 GIT binary patch literal 40336 zcmafb2Rv5q`~M*%GZC`Kr%0LEGcuAW%E;bD_MTBPGAp47C6v9g_llCp$lfX2BYXd^ zgTCwad%gZ%pYiaVbDneV`?}xP`+8sR`+0IxMS+-rh5$hjV#TYnY6yZof*@Gi_;~Oa zijie^_@9WAoR-rqTXQE@BL_1?*~rPx%GSxs!kEd$%)!yZ*5(qI2p8W)rh86Kc8;Rl z+}8g(fXmk5E;qBvu|BxS3A?Lz91(=n2>lo9gVcKq1bMxyC@X#2?e*M{tJ`g}ElJGw z*XthK|0J_rmSI{MK6|^Cy|-Qcwr;spPxk#jy=s@d3xalJa%R#v(jJTSGJ#K@4$mg5 zq$Z9qPSBZOWi~U%{<){C$@Tp6i^!*@3+~^RC3Bd9lki#4pM0@93XBLD{HWfo#VE_d z&rc?z5%mAEBz6DaKP1`x^g9zKPeDOZ)6zoth)MX*+b2QrGbckK*VWa<#LrK`cW1fK zIxt}I(IafQrtlx;g9GSTgoLQZ#>QIpo8FEMz`4HDH5HYW^qcJmAMK*5rxz9!gnxck z5Pg5pa(sTi_3&lJJy~>@A;V@j~6-mLIl5F=ZmoWy|!kCnud+FzT z^XAFHp`lVEMv+kWcg=NmGP3gWMYDG!#?Y&0d*Jy=6AWWvVbOaFcb#ya?!bkg_SscC z2M5dLUAu$3(_8&2F}$#_K=1WW*PT}b%0zfq$`=9;&p%@&@HX5yBT?eu16f#(8*Q9} zPfk)%eBUXZ(<8RRd!`B@wb>svhRK`7=jciGG=rF&p) zeqgCv(?B|-TYJd7H`j<-(o6Wk?y6=+3;aBbjPy%UiW#q5AHHH`bx|czlDLL{T~ttz za(8RBez?+8Rae)_xmsOaeX1vi5gF~xGtpSz{;t5t%*>4Swf+Z-Ijw+ zoyyew_fDQ7C+EHUjc(9mHcRd4!f>USMz-#g>CX4{hCJx$)O@D+a7aq=(nQk)yT#$h<4wT_|7VF{;C9XlxYN7#wd5$#a?4&S-%N z4N1H8Ua*%v)n|WiW7Ln7De|-3c*6-IYM#qmy0>prn16eH0x6j<8fY)PuQ}})c}}@* zu+&lY=1t$-?RArd!P2RL;+&6UYH(Ab@~kkdfo)RzbT=ecUpNgMXY@L0Td{&H1nz<0lAVJfas$4%>>z73-TD3mx859x{$uX&~udks#J2z(~tDs;qSYqE{ z#`s`^SE! za1TN~i3C$e$X(OcMv9Ei%mgR;?48M}+Dc#9bYK2e3osBTXkC}897j_bA>p~kBq_IW^T7<_I1BXl{dW#mIAGo4*sAb~cv*dLF_g&JC854-{F~Co4wgnlzClCnt|a z>)6!h8r5s>O7Ib*3T5c6m!*FqN$y->QfByVA6TXa}VDR4V zHY;H2@3usR9Q{fJ+1%WGDR7^%$aW+=Kc5f(k#8V_2mb!fZ>gnkVvCp0MUEBr=-2lZ z++70H7=_ylWWxWDlcS)kOXo7zixscZ^OLwcDklGVQ-V_y4!s_aa#w9&hfs228xs74btw$+;juFHeQsaJ(>WGn%|rd>`@J`v z)1wm;o!dK!(`ypJ3~&Xp-H>nAf`N5y{OjwhtBQ)X*2O~sB96b9L`7+A zD_1G6DJhYiKJBl-;En^qbdw`$sw0IkfP_9c>VoF@uQ=Q2ss~Zm{2`zfC5DjE@p0qs zScl*7t}<_Lj>3~_a8s|%_4$#rsqlCWe5u}B<-UFUc1=^$aagxT3XCLxO?{Wu)uXx$ zyaZw;JO$zAt({+$a&Jz*Py95pzqgK8e5crk9$j)o4C2&@54O&yXJn-4TS%W|3TDyw zoEJa=Q@O|?Q@@hNbA6$)piMG_Ud(0med2?<--$ke|1O4rK^qWqWaQ+mdOm&mW-l+@ zB?%y=#jDhh04VwS>sQ_9&nI|!dELhRsZdZbocI)WRY~beTY?00Ov@6S%6k6%3EQg8 zb1$x)-CCLU>oM@5KX#l%_VQ%}AT8tMmH0Zi)8H$CB()03R<2yxu?s{%nH6+Tn>FET4q>P{5Nc&~47z~)lpYw{l(R7bL zmPGOt%BG^iMdPePnk2lp_!&IscmdU!;Thm6I0%|?5F|?@q}1`Z@my~n=Fgw!Hf;FV z4BjiMDDW!9a22L|#kIcVJ!V-*gXf1PtPknwkJQp+0mB^}9GD{SkX9%uDfzvB&xRv? zSxycYkAyDh1o=58R@P%}66d-J+p`_W8Y9M#pUF}iT)(+lW{(Xf)uHn-sZS_j29n6)k z?rx*?g(0=m3_S5~sd)?$n7z)r{mP=*7h^gUayB=VWM!S`?k!(=)o=IM(Uk1yT*hE54`l9KYA^66(S zlf(>;Ezz9KU%y(l`$*Uhix1k>6C>9raF1bQztPCxwHv*hsatw#dwsFVXK$JD=kMQ2 z| z(1_Qu8j3HPIr?EJDdT%ZG(0@qv8v8-nuJj@^yN!xNK?9HJ3t2OAsh1E|8WtbJvf*^ zSVUxOeZ;59dwnPnG736CB|zPlAiIvG#OT)nHL(BlQ;|;0g$RfqmSK8ATdV+(cRAJS z2fHW9$R0vQ(DKMED-+#;6seVKi1p{spPTyn;qd(I6a+f}tLXK3ExXu(KwUW(S=-ju zmcBSN7cRC?6GX;(lAb;+Ud+|_&(F^#v)SdCo#nRro}S|Gi#-=|Djosa->@80ynbEQ z$?4#|(H}mrzZSN~R)}Db14sgH!x?tQ z$=Nw-D>d@@^W=3lmDlXJn*cd4qM{U=wqaSJ0Q>6ItCvEy2_OB-0|Sqv5ODn^4;H{j z4M3tDEYddy)ekT$D>w)mlfZg?3koh#a%!7)QyHkLKJ4nc{WVrVX^Tb@R+0E>*DW{n ziOjxGWYAx1{q-$Aq@+YRLu7*9|DcMP;>h>ee;~etsaLx%>*68^F!|z|nO{-g4av>q z?_aX6pQ{H-m}k|;x3W0G2*DkYlf(TZTkn2hd&hMOIUqZRn|~(Ve!aSj0T#;g&p$Z6 z7NRZt+dliG?{6f^dwEr;=Qt@V6RWAI(`tNfQMufZXJilrdPTHGnC>Q&acQ zRDCn;c87H_aFK=vSy&(qGg>y~^Me1JJ15xd-+7PUxI0}vC^WR8&Yy4$>JD^{@CgX& z6d1i9LqMWS2&L@|kfPGc_E&ohSh=_sf;q2^cr6n%`0Omn7pE4dsPwpCAJlxRO@Ee` z?>kV*Ewf8qD%1`OWPCuaQ*6_SCcBKb(y}sbGdiT>k<9YFx;q8t%-r0h7c??2+u89v z^7A93pm_ZFF%DXVU{+V@bF|#;%sbepp3S++%;!K z3wR^7s1rL3HE@Te?ZxVY5=={r8X0{X$WZr``3f4cCOaETYEp#|Y_CNeQJ_J`E}GIr zURKr+N)^n~lC+&&uDZWIFf>R+Pzhl3UAlx8K1PrkI`A$dm<}awCrP zkeivAX)M>Y=I7_r=srLz0XpH_rF~)Ald_&oo`g`op;v{Ru1@-#bqA7XZ@w8J(&-ag zc~=-}k!SNj^i9ppS9mPDf8qu+>>}D1d?Z2X^c;eBcN3lCzdV2KY;^J0YFI#tsiq1{A#C{PPP=T6t zO1rz<)pliJsJw5Mh=%_|-)5IXDcw7Th)=*wti9bxdUP>(hRdVYN^_fN(aYlSRE4~X z^9Je5V&}65zbC`*cMjf53jbkICv@RJkLda?s=Q%7iPqmiqBMW&{l5ah)%Pbx2FISG z@5SopG(90_({|p?c*447{&Dcpo=2BOU9s6@93dA})gM?d>XlIdlW3@LUrug$9vKPz zyLYr~a&i)%gya+a@hOzMpjRN5@7-gUgz8Iv(PymAzhr-JTh+iIA~W-1D5Dg^?{D!} z)YVTz!Fb+(6Uv^^udgn3%=6O_qs!i^H&?nWGdr6^XxNSQS6gBPaHtb#Bm>(Igt53* zya{updh6CP1cZnN;6;Y~G+E&mdpnzu^eyc&li0_BhzSYW4qw!Zj*iBYl9KWQR?_Oj znqw5t=T-0r)oQ|1)zUDZXl-kNNul8lL;)>mZ3czEz7{Evwzr$_F9hy*fZ%|(^L0=vsH&+w8nCUVPxM|pL&>EZbVF*F0th&t ztg0-`_=<-F9w|d8B(4c4R$q#{^L2D|AqN1V> zlV6$bA%!Xh9;yyV0E`RI^nF^X2jU6tzs?N$?C%nXtDnRPJ#z^U*j3|LeIOPhwYx&T zHv%w(62qslvBCShi#~#T22*bF=AQ2UGFYX$B!0CuUr@nEWDun@&!3-~8?K~fl@CRb zip^hfXa!?awfPJ0^h9@trpb82lc2D$Mvzc=pwx#&t*!SPPHTWqMUyaOENV!iK-qz4 zC3RJydcgUeVaGNJd_ux{wDzd=JAUOP4w~}CTo)Q3pFSM0DJKSYbwy3>`Ry>krlzs! z>GP9pwzjs@ON{P6$-K6v--CK_?A(n6qMF;@izC(5PVoS8kaSeG+?Ic}y6x|-V_n{g zP4xPs=;rRueCZN7aGaOI_AFewCB85(ILD8h)IB~izq4Q<0dbFaJ*WLP$LWKW@bf0H zB6?tiPoZ|Xo9Immg;fbu8pB@8%3hn3F&j-%dq&RQ0E(?~LK97lK94mr8eu`)gxIb0 zT(5(LjZy?ssU2TnrlWwIH6U*+0cDnX_uUX43xtp3=xuClxS5)oUe4*6C||6)ztYP9 zPln1K!0oj1jQyS5A&`(!;QNp(#PbUZ$mr>bYq~-b;^T?qRRYgkG9S$@UyuR56H-NW zEA@Kqi}SZKxd;geWYpA7q4g&MW!NXQ4r*qN_&6n*b2gsCtGuj?57qRZU9pCu6cv+Z zx-*#Zu_bp`ZZ$MDz01!(1)PL*Z*RR?sH7DbY%p*Ql#ZyVs89=7Qa~w8f`ANHhw_Ev z3~q0}H;LJgKUSX{=s;70n}-JrCnvGVr%;QPHAwjo^v^jU4!1|f&>~6%R$-p^woCH+ z_Y?0TB+(m9N=gE0R%(YwTtXscmh$xJ+RvXq&+ww!31mGG#q;RPy+w}UZ#-4f7Cvnvv1jRzP?x^qjF)772sC%9f$L2j_xRWZ))X^ zX(x1Xs>F->gEaQfKmUwk#_BgfxO^5D7xM8Vf2MXJ0h+}@%j3P*&h%Q!hXE}NWN#EUtI(v8@-hUPwYpE__oB78&;VMf^3vFehdWMEHSByzR5ZS>%p_MZ5AFU#* zGsq~sK!uX=iHSJfxl&LEF6viMqx2k2d!RMHy%LDcqn^K5Hp>MeGM*Y|lP_8XkW|~< zeHvJ2PWSHQ&!1?am5`8t4rumDR+YI^I>tI-l@lfDS=~4kkh{v(HcGa1yCZafoEy~# zD0bTxKt+SH4><27RN6lsL_TVB0^`HU(jbIN4M}~%v{<>Gpsppb?uDu^!caPLaBw_* z`qUTD@Yp@A&EZ@lzb+Yvl_}Md(o*TP+uHPP9VtptP&K0%K~02*)PQ)BJU}Pvgx~r8MiYDz)Y2F9 z5?;R!g+VcfQ#iLI4U|OHH>$h_nb2JOy)Y{!i;=z&>Sc6B;0P0E_iNV(_-VqrCaj7e zpsvS@cF*v&!YqZbAX1m~ftd1woy zoM$!vmA(nk8cJ(Zf(69kK*Rt+P&biO)%M|&J1*HFssg^>pShJ%Z% z7_+^(Y4j=d4CtG6uwpwF=6}X;>Yz2DG=&^c0z=GbZEuD9r5`y45rFI^p9kVa9Oe6| z*?4(X(;rK1&lP|?)c`GpV90r+AdnQ6#k*G+LL%$Z+yeso)^%|hRZlQqFSVgum6*YH zdu?8;`hmoQ%}J_e(|C?>muyVyVfKwxOKSkuW8XyYItrzvUql2cEQKzic!*xmWQ~En zYJI$?8po)RrGaYFTKT3Yw$>LTFc>>j7TCWq|p#?K!kUA)l@Da4G38xcbQ6I$WB#EZt(#DgGc@jGd zXu+uR52WjDw`CTCkf>;XI;lQa3@8|TPbnSrNkI#hQ;^Vdb{6pR^17+6-hHq7X{GgW z#hw1r>AWU}dJwYc9uPs?ba_}7YWI5#=7+6lLq+Q!$#%mSWSdrv2Ra$7P3$qz(JVYX zxu2VIGBWP-%x-IU4z?NI=d*dA?p1Kma1+%=OLFCMPUoL{XCZA{tS$F=V2aMJ9X05# zz9$&TJb10DFmrn>E($trN%!N9#iWzn$?I-oINAZbL6E7W9Q`bFE20Wm(R-rxH4}$z^WGUfquH0 zCv=L?+~ecRAL8CZ-$QGMss6M0*uZ{IQc&Q4{tcpYd??i5rul2GR+rHG`z|2I6;oWk z82#a$Q#x)8fxpa_nc2VzSc+sK+VBuHDKkd}$I|^W(rD4kM}KR6E2_64SR5ae#6Eu;MjN`U_;9l0AQO6B=NBqeRh+J+rU#J4 zqA=q$Hjw|PRW9b>z^n11M|58{yy1U4vK`ZP#gmVe4oCSJE8N22(mcH8-y#Z*`ddV) zQXe!HgXmVkpaV4m9auo|>RP@DP&a zID}R}tziuSrEP>s0pZ~%t14JHZ|DO^e2QS?_7(?q2ZY#xKQHHk(RpTJnPJZ&8G&}G zR)IOOtSSzoTj53qNd9s2VISdPCFlG?BXChu-yIk20L}FktOaO?rAd z)Ej5@%oDsEIC1YdZv3z;?5I;k$A`u9zWT;OUjdt!w|AcBy3KSxDCloMy_@RJh-oGL zrvKHNEs0$wquT}Z9aJ`G)_+egA_xAEsZ&gXw(>wefD+^hG;iTADzQusoF!g^qusqU zXir79CsD(eTMA|c8a<5+P2)TONP%}gsxVd+ zYIDk}&W*l9aXsnV8(4~t15en4+bs*}z4*~P?>ghuk7>2{J9vtF@q%8CA@1lrz}d7% z+5?M%$p+qGaEieH57$jIFLl+CPa^!gMZFM}F52jYwGUT2$cZRO5Fa7kfBhL0i@%o; zwcarQ7oz<8U|ui316?nO&TowNaP|G9hFiNpLC`$ufE=kMO;aDoXiGj$JwIGo4v$sn zt6HQ%zR(Xz7=Te*jD_X|+cg$9frpw6nx6q_ z`bD{XFed+vI=fVd5s@zxuvmR4xjd`n_1gEBIFM#cZ2_ZnxJpb9)tR|0_@JVAG*AJO zW-zU)hvWRe*F21t=3(?>A1NISe=z7}Lq)P#(vj%De2lE`7W{hjN$>tMbafv8eP#*tihavR0da7`A;n-(FxoIb1o`9B zD`Ro*4#!UQSXv8tMcJ>q;YUZ;4^I31Wz;L5CL3BJp#9j`sG_ zAnqLMY^Ivl>0Wou%#1+9oa%f}It(}(N+;6sqiOQyud1UZ-khLKU*#-H554+;^S4sb z-g0phugGf=ult4CK}o%}hse^C0jQ3)fEybd-R28>=Iq7k>jsw(N+#>$jKnD3=;gqr zez(R2=9x4B@vOQGMfXC<1PKVt0v>u{@_wMPXB20UH63^=p0R%9@X}OQXJ%tN4kf=E z2rWxM@v#w9YJr44y0uunF9~EPxfuLI19XL9cWiju4pXTqcNW1&T3Q<7OU5c+Gc-gG z>>C^r6d+wdy4l0)@mcNGR8?0$TRHjbSO2dM)}epbm_`^45k5YG+}6;z7ULfffQ?+c zc8x}N1Rjf{S3m1$VUuaAZ-xg2`6ebNszj<|)1+BS#D#t!Z9|R8|aPEOzC>vgjAwG%(6vvJL>;D8d zIC9|-^XkmzrJKgW2Z$nZ>++`sbEEOC7? zZi^mQp|DJ0ypFocQJ@ zJN$zj9XQYHW$;ON_XzHEOg5@QMUHBPAS=LRzQ5DT1IO`sh5Q>c$O9Hzv=$uFx-G>p zSJ5b#@~Fpnp9!ZuoC71c5=i+WsFWYn98F!tU4Jy05Nl>7jp8V%0Igg%yEve7H0Cj)qjd_-p&|Sh z3}>+MUyS6YuA((6ZAsC{n6F_yU^TNR>RnldZJwe71k0qH44g4sWd}o~W1+b*Tx`o| z%6A5!&DvR96ZdE$8T#o^ZUpVc`dJ6*B(uM1$10_DY#X{+O<=9N-(pf~sZ|tzbT366 zsTl9EI^2z|Ef!(n-XBel>PPIm?@9)`us5JpXAiAS-KBrg^d9UZx)2EPk9xdN$reYt zWcnzdzTNqscY@&m`b}bnF{DG z+c`S=#l_L0)-z-ZsB@}HeE;YccyuspYegRAlz;I^`g`mJskL5{lHIj|ln7F2f5U?^ z&i3ReSXpJZl4ifNi=;=FP=26>|Dvxif`fx|m67W7X)FYq`wv=I9E)*|P=Rz%zlu!v z5EbE0zN}B$l#B(;J_!7qUNy8fZEy}LW8X2D9tr|n3W83>BUsKq9k6)r-vDueXhfMO z(3a~ET6ByyY_N|$=RUlXOEl6mAxnkcn1eW+_dg4w7Bhr%v>;$<**yC9f}o_Xiu=2S zY3g0cFV-KGex`)zWv#@Hc###v%!#9mJaM>`Mhvj3nLq5+HMS}Nk-f!DkJgC;{K3G@`9esqbjz^bt#Snjsu`v^3Fcf$iyGM#cr?@Lbhx9tYYLSFCD!8JMJ(CST?*j(6KB6D8oKVi4cICHARPyf*Y_% zd6dV{NW?`)3?CagjIa;$)KxlQUql_D$l;>sa)FagZ6wmNvjhH3COBb+nH@I-X~I5a zWz8Sed-uuU#_h)sGAWF-E8!g#@gskA5!@N`;krp$L(gp~B0n4tOG3CI<3lt$I4SQi zkkN_uKTPl+D&el08yj%}V~}37og*u2U5^Umh)1cz(q@R*|!U?3XFI$GI%P~@Wu4;$w}M;x8BjomRZ?eZQw1-&dzoNaWcp6Hdk2=ux9fjXkTsY$^jBq-=!TfN?C;iUtL*q^R9wheiv2?U-cFjxp} zZT@G5@MKs>2TGL_cuf+`CL$`JXT02nj<>M=IF6uoKaPLWQn@_@dq{{<9O;6ksff+f z!+dQSCa7KoR;r~|p%K)82(G;RRbIXBgBhQ?2Hv@xkV|`}o-leK_DrBwd}vr^YV(K^ z9xNJF$C;TK%nu#gx6tbcC;J6((R~V+{HH7!$`o*Rp|%v%{sS(sEJ-0~<;lv)^{tF% z%MVVX1UEJk`rFWCKx&|u*Pf*#1dc&xjOzF9B=s>dsBl_hxSRe=w$OSlK(C?U7^%2n z!Lf4f!_bV4OibjiA7|hdHYe?OV60 zx8OI%MsDr9!iEI}1_nJ`>Z*ZJ?F2WpnT1@|*6tT@or56IEQkFSX_fy#)3efJweF)u zCxXboBLe}i@*{PmC>wlci3VE&^tzz^tG2cACxIU@*^;rPF&eysh%cD$&!9F>1mXzV zqtA9n;;HLhX>~KmZ*VcLwTj)Xl80X1Rsb31C8F< zgNK^mtP)4HU%E+Xi1b$bNP%mL$7gTnzRg=cGF2rIekF=MJUxY8&JMl5!3e#w(}*Dt zH3oKSTuD(A*%3}N0bs3N?Ql`MeH#^~r4_EkD}w8I<$;Y27nrsNP_53CQ9wWd7A3Bs z-f9uQ$tNPG*&oEnO%06zAX%^Av5C;f4k6@HhyGgUZW6n8JOgV!RSSj~p%t?ES;EOu zw!q)*V5|ro0&pt^l$VPkOd=v@pbPHMy!5>rfSCB=4OYDiQMN6Vo z_4Of4t!1a>$iUxutjp3F9-Qo%@*TrpkNU4vd81qUg2x0&S&Fo;-ERp>cKu8be@q#74l|KMJl>qkUI4NK^7q z(t1=ftgf!km*rS03k(mh3QG3vpIDn*C}QN0IL9`#Q=Q?y&Zw-`jgG+aTm&Y1ICck+TLBQpfZ@FX@Ec3Po#A?(VfYiYA=h`NE zJ0N-z5I@b)1a&8Z0Zh>6I!n!p>5FI2uxj`x z1Yy{Hr{|RR_ja*frXI5^lp@oc1zjSUH(k?GB#(lcItUC9m$%$tQxIK%T|CeqRvi^_ zky{S(9#R>6Ex(xm;pVEfrVg(K8ObG{8X4n@{5$Kj6L@(-`u`1 z;A|CBK-BXKW4)RFn*2tyK9{XX-p|QNe_-JTTW;V$gpQ7VZypo@YWFF11b=~7^J%^u zg#O2y@!3)kN~Re_kstr?-&>){Xvya&==bso%hR>8$aVu0RJdVjFQ1@bQSI+-Fjj$r zgpB|KL4Uo0jSe<)6`Fo>b$tE$^+_tK<25VmPqWy1xB*Qd&WhQ*bc$ZT?7QFv+tw;+ zNb&KXQo8YYMM}U*Rj<+;)Xgn*x+E!vIm0n?Av4<*^<+S^5qS#o3o)&r@QxOYLNHE{XBxm}4f(=q z?WL@*#gZz}Kct4*qTy}Dm8<8KYIEK{C@f0|2_Zz=z0=aqyt4YkG z++3cF-zz_$G8lwvtPujX=z~{G+LxQR@5jn?4CRP<>3L%zeNlaaI!<@AwAiz%imU`m zcTCp2BePy*2;x!SoKj`idyx8*=vz!eahXlA%@B|GmJ^bC;yk*lp>sPy5*_q`{;M3< z8*5HBbHGW+`*<}NZwWMXgoK2^!HZaf7|O}!{b-A+Ux)^I^CLr5S95T|1SfO5vNeRW zwRc^4&6H#WmkZbK&&LGU^6{NuJZ>J_vgvac1y8_Ylc|+g$9w#mY?sRX{JLOd%Vf}# zCs+t`+aUQ`d6GhiK6TaH4qRxOyEWwEHy!MTYS5_yZY*oZ9B%)MsD^*9n2ihx_ zxGk})w7;v#Li7{#K^~K4NF81nOxLCRB4z6AU8)-nJ7KQ&zcdDyp0MXyW_?6l(1$`R z0IQ+|Cp@B&d05Sbg@ruSL|J87-`+&Z6K$1jF%60ha*dUjesKlgpDABw1aMEyXzhex zDxvBiAM1T8%fdp~@TXabx_)6>P)!PwJ)8~p8EQ&FqV=_M&9ZOlFVx%5IB66Uf{_rI z6SMaYm=x?Ku*vjR`!7vwJ3v(@6|m@XuPt-2>(A};ZYw8djsYx9(w_AmrW_l%$A8V| zB=)gmV+#v5tM0J3!D+t#w6C+Ruz-!v!UO71JoeeB-ne>Vqu5CB1XjLLNKj&cZIjI8 zrdNZNWV{T;xA4|+5%i$gyuw;*+mbOnFxenHg-*L*#~$2$9+a(}#C|Qx7TV5WNB=mx z2R@KXJ2WxH^4zdriMsDH0LX9}J>V4(qnYm9Bv#$1U;jEF0Sd zxP8KRv4euNKY))5h~VYzjA3MSVIjP|{U-9G9H(>DZ>*fYzupCmTXTxO7rAbVA1al|l?#ZkuU{MLsXQly>*&;%ibY>>aNiyIXV0 z9lvENWO&Xw5Fwr8yh}%ff@g>K4`Bev%LW;>B5@)N({6Pp|km3&-41z z`Cf;-lsjM%NnY>saM*?7Kd|WAmQChl!`JAs^0Nog{_0cR`cl#avGzH9;a3i)Hov8^ zu}U#YU5|(#9u*zt8h+W~O@P#})8zfx`69n~AN+(~397xX5SRw{EQ&uv##0pYl!b73TUY@lM}>%}@YY`)r+k&XnAosuZ3yg@;y zB8Zx~W_5MIx5DyP`x@+5sS1buu*NG?%jZQ(cnMd=@4N3Y_v4~7PqVeF6F2DPsj-lW z@~{}eh_b<-Hj!f!mRo&ds!rGzlNQ9;m)tOh7A$R$_coRl;&|6|WElTZUk|$8vJ#zVcaB^llZEa_N~xjzhX0D? z;EsFLwZ?~gVLZX|rW}{BUhcKoEVvh}h;UVWOwH6Z_Nje<`0Box7&clLbl0QuCp2Gq z4Xb#&bcEK6yRxDJHHILmi5APBBxK{efnj7yN_wo^J5GNBE7b`17u97bWTFH|l(?=3 zsPdm?Ui&p?y}JAu0Bs=tTFQ7x<}6S&v6lu>*qo#zRA0ERzU>h=#yI@?K@Qs|b%u&0 z=RRqxba@DTi%K|#+`gZlLLjblBR0k$o;0iWW4F6&^#cAMd~~4$tA3y@S08MBxA0dT z&20@$Y{a8%MfP^j2lE^$KI7yS<4YNQgbIW-cqdwZkgG_%{dOHf7Ro1$7+d&MzDFIXL7`C9hQF>pvl!q|){tdA;tv3t({EUxqpC%6*FgMaSJ?^P;J3n~PqF z+!EZCr;hv9Z>BQU%f+-RY3gsi>uGK43cQ=}1M4Lv(Q^yzuc^y%;G%qc^7Ko(OPj&P z&ra|Se&6m$74=Ep`Tj=Ap~e>r%_<1^aYC1;(mF*Qe&VD4IWzEy>V^(Jq?ujMR?`%4 zTabL|n%lh&E(kPbyYLk!fLlQ?Zwoe{sl>d-Lz>MT(mXswJpC67Qhw+-Cvr&Q7V5WR zym6yobULz6oM`@HwAyD`VyDq#Yj)7Dk5wDJ0rOOd#`S9V^knjOy~ z6WHHiNb!3Dbkwb5S@E$Kro02Y9u-PjOU!)yq4T9+^|5F<;Ebtx?2iPnteJp&tz+>k z5Tag>4r!XWCF?U)t&RL)`hF8~O*+maAi$}rrv9h|%TsuCMK~ngTlXpTijpUBc+?wN zE0mdYK4yQEK3V!4Fl#!7A2wV)VtVtT2>*-6E%gqEt%k9kddPbn7uGsD)IN02Xh;mN zX3F34>nKx0F2As)py2agDb0IklCmzgUDpEeYjlzrEZ{OF=jbFCBs)f7N0(OEU54Q>H?9oF0(0^EeY{`C2EeTj z9>Vr10bv6d2H)w@wQrBbQf3*Nt#_R+wy?;{%hx|EcCv;DX7hY(TT{0BPdP`qdQ(^L zFVW}-iPCLTi_Xa9l;5gZX+@yNt!|%ciH=-&Fq9=pHFqYo*H;Tk%~PYgAo}~C@JF%O zbl;?iqORdevoYN!4+cLUf7#0tk>ZsKInjv%*89i5+&1g@4VF%@#1kQ4E&#dVacg+u zl;!)LS$oWz>A6^-{E+jokShU1&$8=(kT=~*yA6A25#(_|0PHP!%`HY6FMS-Dq8hxR zolJ^Qec`?;mm58v)G|vBGUA`~WlZfbY3|C`j&m8Y(X{jYuGg-<>$&O}dTj7mdw0QR zx}oP*RZiF95Zi|c{)~Qh8vD#qD1FIkbgV2s=Wh+&ajnpGGy=?-z>JS($|vSGy(#t#FbzvW{St95w?57e?0Nl z4Z55+Z!UX`3_2K#OeXvE>;dIsty4gFvbIHEjFh$3T@)G^`_MfLnjv{;5*cA670azx zPv~EX#S&?74o&idW9E|vo%Q{(dL7(`Gt2oDKk<_)91l&}e_-$}hR-3rfB8iWW z4^ji}=42ijQ&R9^YAQ!$P0F-DM^$mr6a3zi!yoOcD=O&v`m)57uFX4c8Y{iK_acBp zxF!DkrJ62EpsT)VtH}b~&nqe_PEwerzyAI6=jHdEedFzEexO|&0oS4E()Ca;M-y%F zDONqr_n2iCez!FG|X>*DO%k%H09|QpVj%Qqe7$FOwo}s_6s(cvom&b{5~{vbBeh{ z5ll{|KH-2$0nk8L$9TxW*!<3}c2V{I<7Tz-kO z;%oZX=PG$+b*B@|5hX$*iUhOgC7Lj;Qirp$ zs*gdD0rG$WzwQL=-jKDlOt1H;CZ#L6eV$&x@zVVSlj&Lr+5!9N8G7 zt+Iu?UQo6$*}eF~aAbWo5c*`Zoj;Tu z2$&E({FBP7rk8Z)7?E0pNKTZ3@}n%0XC=bBjKN%99InJd zuBALD=cSXSkUQ_Sy}e!E+Nw;$%Z`t|g|}K*wl~^dt9EwhYV9+;xF-Tlu)An+d+SZf zA9c}~=Vhm?+6GB#y437!t3Bqi>@d`?|zSe8qX?bvH9#6X@|Q1Y$m%NCzv%9q0kfHEwY_^)+EG9 zK0QS?sGa5`WDxjotNvoc6Y>xC+ZoPpT(O&!&*n^8W#h~)0IZ-$q9usA(3v-QgBz=r~r5HR7Ba(UgI$x}0RU)Ieu zUh6Qc_nmW%Bk~dQ2@RvWfI9|*W~Dg7qGxatCvD5R4KvhHwb;@`BnWz*d7p>cf;LxW z+Y`1Jju90Hw#S~RiYCqMm&~xsimULZBW>=1S2XPDVN!p1;lhPHuB?F{~Dk9`csZESR?3{CZOLX zU^QIP#|2+tQTT3h5^Uhym58v*9Q6Pm{pcU-Nlu|3(<6mG?}{z%&pu(o?;uP^zkDM) zx@gUAnxh_LJtotKn^xU5&`2w^Rzl`GecZ>Ty07CxtFy&yruoUZdRJ>}YdQ|7ocl6I=}+W1sq^+G(?9<-aBQ&Q2n;TG+D#cY<8($yM{_B8 z7*EfIaAkCpRv9^(8Q`s>-vn~378iQ_aB9bErzMI znI~-WlFWs1Cr&agN7o9s<8R7}=$4gV^?|v(fPU9S#h))1VDpHSl_0ZRmWEPD@X+8O zkDX!XT}gQH^r_+2w!XT0W0m3Y5^*n`Flr(jaj*564khgppR%7HyN3HuSxJ;u<<9@) zmj50!`8!&Paio7%BV%|DKN0_W&?{f-GXrlfO<}4#_v>%fCp?1LNm5$QGyxG|+U2)W zTRnR$w!4x%k@hJZEEqgtbuR*rc!HGl4)gkQD6KsT>+9+aACm#OL3nUCd2({`ikF<$ zWEZ(AQ9!w!MBrg7@j5*o{BBhpLA9SC+(UplATJ+{6RQdd|LlTo{Efh5pZ|sJ z_O}^rEH$9Ff^Kq9Y&cQ*UA?dA+mp*az&@^0eoaAq$2tIQaTX z`1m6xrj(1g_tkosDp}~Uaj1tv+gCbjQUVDF{|w%A&L%kdaBIuMYOsV1-JBq`w-n*B z&jl$LM>{J`P0DM-4h+l!p1aIf0!Du--a^DZRz9@)P<@Uy+gKy~Q{UK`TCGrZ z2DffGc7H9I$LG|uvN-=$>^i}Wd$)TQ16#KS+l>U-yejH5*=I1A^~u>XdbuOLZzc!_}a;$*TGou%`76^q8zgPV&NLK(H3jR ztBjGXJ60CcfAajobAQ(`B$vhYUuI!tA?pypu~@KR?~c*N4PMi>f8f88^bfErAI1$= z{6~h)1YHb3S&es$G5x(gC&x@;8EsAyHIud}Bsel~yg04FjZAHsWP8wt;>n&*vf4Aw z$jv?36v24hkRvse&O*!d@RLi zBkWAC^P4U)y|nCxSi<|UgZJ2~&l$wF4PAQkp5Od~fOf%Dep+KRpL77st$_0-AW_M< zEGjlCH#uGqFSMz?SiJ_xzxQp_^-9%`ZV8!>EVn}6`y1h*-d(}Wi3%-m|ilfomt zOA6mfV4+zF`P$9BaL2P-8`)mt%EkNa!qw26f9^;L9$qxCb)H zH1u7%n>PzPkzm)2)s~PkG|)S?VMmRni-)4_Wx52$O>up?)uir`Zc!8Z+j$(XrycML z|7gSZP!nKw)}je5RN6%!y;~jX<6%>G(RAMQm*C*wb!7m(}{SARrx=W|UH=64c4vUSpqNIaIH1#!(~}-?a(+GTmWH*n$}vjwY{J zX`!34q2Z3Y6~!9gZy8$phZ7%LcUM;x6#sR)2`biB4%^_;)rR`cV=3QKqq@Qq+|;tt zK9ze8H!5sPTIPO!#yY7nd5y4KTa2$=ZtT$*T8h$Cep(>pj#<DGaGD~BcNVb!?E<>c^86TkbwgJA1L%VV|89FH8 z3U6;3!sd0(Dr?wOm_qgrw%}T4SKL~@m`K}*kkM4)A?-pRa`< zSxMK)eRpbQ%o8}aT6^rtOIUj1Wx7j(@Lxl?ci49oEB3|Z>V*-`0TnBBMll&kgH&)YtbNTd-NUDSE-kw{|RQG3$&@N|w72=-d@E z;b&ZXqZ^~6Kgowj4UfbX^qgzzq6TFnQAL-aku=N;Ur(ZZJdZizt&gq``%i+d=KHzq z?$7uyloaxN5Lbz9#jpJ26ZaDSB&SEf7JUN=*B*skO28v(-d$mkyZOcf%ONd~f;;;` zUgLYa>3*YZBFdjsOj@oM%md(dwux-5DYEKgQRfBdAl20DxiDC#?Yh6<=CRS~X7=?$ z&{D|5nDlqfx5MQ6eA!GNnG3e#de?suY@0!Q5pSy>F?Q5x4NBE7SuE{`Bc-VQoWE zf!~wkXK`nuL7oo&m{fZ8)?=2tx1#!VH#Mejccfl`jK@i^s%-H&NvVZ%3=)<0;G%Wv z)AKySraU;(z9E5xU*f;O7y13a*4{Fzsy%G`U35rF3IYO3ryxiRNJt9OEhtF0l!Snw zv?8ITq_jwPgQzId-5}j1dG5KN_lz^fIp^E^?ynCvNLs?>~cHYOh!DsDuw)~U%Vgs_)F7mZ#BdaXA-|zuw|*{ z&u>OiCK}YkLbgtyAJeu6=b**7m7Ac*dkh7av*WZ+k=jeKjOjXdA0{%DSy zH}sxjvVYfi75@YJ(P0A>YG!>QLS8#&xtIvppXP*xCWPyT zvtlF~s)NExW6lULeTLel*3l{YVzm1TRvZGQVm?)}^waOWO0&aTu^vwmb_rAlHxx{> zhO3#ktq`J6uRb@o$ud;pcYHGWbnMaBG@Hd&pSlHWCbu_k2!CTV_o(VgQ z(T0)J;0V?{=;-Ro?VdbZx89BErnb0_p&rEg{l^cD+`Km3(5BX*h@#{G7dm8scjqGw zIXPvs>0e@a9Z-J2{6%#BZCu=7v0MlE9ux2h5U>8xM=aJFGJ1wx_=-fz!rBDHN^c0N z2(Et?4FKz_@s1U6Q8dT$`T#80;C-h-Czsv#WdE(@1_RLeynTOE@#n_BZLP}1jeBMz zwsCEw-v(!ebA@(5*9J$GMwlcN5W>)y{{h_*96I&DTCsrfj^M0e{;SJRZ+ z*tRd*WlVVh{{ZKJjgp-50m1qk(phGedH>`9xcGS+?K<47D3TR2cC3ONN@If%$3I(| z#0F5|8rJLOLf3m-^RK0?4MXYGRRig@7*hur#KQ9fM&_ZCd^2b(t}q;b$>BaP7CIL6 z)dcTpgY`@Ea!0rDlOq}dLA%f7TEvSCHaiSM@t+5W%y+swG&vs-s}ifwNaVE~gvb%K z8DpsQd)ECwB?XcKg{Im0`z>loxtu255pwS91FE7nIys#ygtrUy@u}CfOgy3ZO zFtn+Y;pyU2prQWw&C|ue?tk~p^IIiMM1otM-P6z@4XkJZaXW&f_-`Nm*S_cDoxY6e zq26bLBc*ME38pNuk3n4_Bx3pDMq7jLR!4-1KyRI{BP@v*Y8D=^yviP_uK7oWk3)1l z2L0r-MrPI@m!jE)h2V>G)eT~3d4Xc+cupm)3Zw1VPDPra2okdsk$UI=eu#9Z@ZB76 ziQgv&0w4iB-^cC(Rq0EJN9>R7cGo{;^`B)|Eh|KxO#V3~ zsurth8y&sY@vGxoaZe=;|1y_{e4+oT_haa~U{i#KTG0KgTvo@eAMzx-KYN9;2=5~B zhMC?7ANc-df?waxy&W37B_ZPTF!xTRDh-Vgc_x$mW3Av7H`|8dsa1kk4HZ?><3F`$ zIZ__L1VPg$miugL|1w7RBMw+qP{ydMJ~xH*OMR@Dlwa%I$3TUB58J*NI?8T5$r-R- zN=suBJn%LyB{e2C)1G}vpr`0#-dWSy4-X>!Tvr5d^wEgizu~E3w2esaX z4~&_83u8Xypl$pd^Xg!?8>j};o^Y;Xygcgg%I5GobtC7F%T8-igF~E7V%no*S)~VI zg0*~-e2uD5P+B=i@Q2ASXf5jb{(@CDV-0xU6$=EpE6Fj@8qf`oDhRL8vT$#+yK_{W zwv#nz@Tw-E1p)S+%L+oc6un>3qeL@p9$LP}O;pj#gw z?2Lmg2KRLd=ehd@ril;xVW-3V?BSN3P2KC=$iTED(}FF|PGR}6iW8ZCSXu+RP>g_r zt?$y_+q+hFY)!~$;s%9%NH9@L#PKzhiob=wX)?V?5n~A6=!SNSD|jp)owvAxE8e4TDK{d7*ctCiyNRT?CCiL#cKRTHFgLN zQ`6Xf7vp!QJ;2}m1Bo!s5!;xh29|5-mjUzCjTx#!I&2n|rM_lL&l)L*GO zm%_?wyf25$E<4gH38vplzST)$FZXzhH+;o}638N>6w8S!?mj&9Druf6w6^=;@7n&)Z9r zU=q*@sfhBVxiDDwfA+08&7u=o8FOLVA^|PtC(S&PEJ7Jz|AHtg>o*u9&wve-VCmvG zSxZ61Q*LL|4k(N4p_iZ^15WC|QkNsr%DoU;6Tm!88ms)i|J2j01%s{dYwAzee|B4k z@PO-^#sX3fP&z8sE|#ylO6O1H8F6S;WUmq?UOb1sZ^`RWmnpWJgp3TMxm-RyWA6LQ z1_@a3>G+6G46O+vqng>NS(Hk@dgW6G+x<$AX(ftz@PJ@40#JoWsbv(tmjDLuOT~Y( zHsgvB5A1ro#wg*Lqq%)E@2KE&t>Q_tMC;LFI1l$}!@)%Y$47fFyF4iB$xt!8OXC}Z z`5J;syum0lgLT1z-_ZmN?Dn2oIUH>#DFKy^35d1`q8d>m7r?e+*ZSC*5vui&}k#Yl$~u5+#b znu>(Fpr|-OGoI;S8xL@@I1&?2?&Ox2YZ*-U0y{|PAZP5|BG*EHmzss$`<23=U+K2n z?tO#ma3{Xny~4)E7LfFZ&;+|gp7kvt)@DE$8z*T}{)}{WEy)zq5)fCE*5EyitQ6a3 zX~*iEZ6dy)YUF7|1+=cpi0}3@_vx#EJw=tp+10hJ`6b5qc_I*L;-;YG-$>+~rck5M zJa({es>+^yoN)1+?weR|hSTb|p;#%+iU)z*bbVYw0m3+Lg>M&&ggp2D}k;ytV=KdZtJP@L#;QzjQIcqj0U0=FK2usC@eEjB?`XJ54`ur?> ziB+F_0f;5BeEAUmxN^T|QeQvn_ykQbpkI$S)*bJf+89J=L)Yyed&x=nNYhBOY(tNZ zf4WWthUd7%!rJDyZ{O~nu4^ifvhZ1Y9-4fIaa<(XpE}>00x4g!2m_na{9~;=S=5qW zr%I@fH*m%&aT!(?{#p9~`&P}5#Pn2Dp$?OFdv$)dBm#ZRE`0Z9@%qD0_Uqm1t9Rv+ zc_pHO0;>3%7N+1$b5~a5Uq?rW*40^m?Cg$Z9rZTHSi&>&UjB5bCCd}r_Pa+tAH7O0 zz$ZZK2}d!vg9dTM)1)+sHjkX!WD2{gN%y@(easD_m9f4)n|>A%O;6lhZsrE-1h`Q_ z^IM=>(g{!!!np5(c%A)wnvAvp4J`D_Bzv{hDSzdoPndlREQH^#Dppe)XGvvL=6hr0 z^h+$6ZqJRGe|AfFJ}8J3*Gh7a65Tyq97!w&YL+8@skv-nI&tec zmW3V%>l_C!$9)c~xDC~QlHbO<;9qA*oOG-d{QebI*{`~&r7c5qmKNDZxFeZWR>bGCtL!<@GT1v6l3fbEOEv{sxHU_5$ zb2jod7{GSpYoT9mnpy(on<4A9FH#=CdG#U4Fo=tD}Pr|D=?wRPB{`k$ObDIlcKny~x<}8W4FUavEB}yQSynP_w_& zBjM=47v*JnrgB_+g3hPvIi6HX1*4F*lY@lRad;1}0q$aGbL~fW_w1RMTgJ9;;dWyA zimLAKVx0|CCBU08u*jD+rZK!z=%FoPZZ*`2vtut9ifs~dAeGzETpTCn!_E0_59RQ< zcncP)vnw)TYC6s0bjBtB_`O!g=F)J{=o`L%Z@3|Z3)9U;mXdM$L)_^A_UjRm zG~vQsO>dBG#*g3clUtJNrrIkb>{T6jx!}xCGvexbM5u++YPv?;OfF=&r_cmm-q%r4 z^5vp5JaIg1oZN5?T45#<=O=tNdA8Hr99rzzwA2v~8VEo^b4z0T(1^NycAEh0RO^C6 zf_#_#gXz9G?&Lg+#o-0!s@qf@avj@3o^6Jkk^C^h!&=+giiXC{@Z=b@!=+>PBkMr4 zgnbdZ*;quO$5y;!m^o*xV`4D3nT5b=G0BL;(X!@Or^`YC_bn2HgPi8W841>|C1=IIv-plYM;1xTX$Cvs*ZcO1))wcfLZjWqg-A(VY`N}&dc=Mkn6`;GqwwDk2q z?1!^r8sn?j+l%lkuYX{(?{&$Ui%>1-NziS`?NGB7T8B#ANqyQUD_S?%(7D6e%U*=V z_4v7VwbB)-@gIQv1e%;)-E;1V#Z6DUZx){B%Ve4r_cDiPs>+%kZ%)=NlxE#(H z<>e{-8XlzD{IJ>g*I>-WoCU@oK)6Rk_s;ju5HGk6qD9*q3%5n+X?I5`e&cHE>MB3F z1`;njm#_&+*m!4ACW2%d_fFt|=%XAC+nwvit9m$lL>bjt)ZRh#(qlIW7$ocE3=5;F z`DOC=hlYmcz%=f#?Xk9-@1gKB2PfckvxfK)Mh??`TJ*@Fa-4gO%95IGns1E~?aG>} zc6N69jy8d^)BDV>YWkiPaHeobnK+U;W;SPubYB$=-0q_<#@Ef`%k0a`lH2OxPje=h zBmM9pa_hyUj(29Gw53gc;;>Y;l(>xqDAFH*u-ym!9Td=-6;N zi%vh!<>GyB8e<|3E5l63htr%>Il2iZ)btKEoDWyDbaLD5K4mn@e5}1XPt{*shHbg@ zuMIJ!e7s}34f`gD`5;&pMO_MCTo!WR>Bs4NS{;e$rF=EOZv%<`nct?zifDgZP9|U1 z{u~#Gh~T^`lFR|FAVRdmXCpDDiOm11OiSIPlsITt@a})Woyad%N-*Yz(se1174^mM z+8Njm zWuY%bz_>P%lGB46l(gdi+GCe_*Pyo{EQvwD)BvJ$H%Zeg8tDmJB7N1la%Dpsg3#KfWR)ta3G{&ZY68;Jky4f9DN9irR|?p=8!zr zKS;g(R4G(_84nk?xs6yN0@ofhWPm{WGUlRhw9_^F@AlF!;nJnnkMhFWwuBDV7GeM- zW%J+&RbdG#NV2WVNjBn<}Msg4dTNLQBG?`Rh4;n z7Zp>OUSQ-fWWW-Ibna=|C5bdi)=+GG2$C*=kf-G{^QZ=0o*0^#&?Br3AVY(C2DBMW zzAEPd-@R|;4`^#1>u|j93!6LCY3PynU?3bdm14qiB@z--Y|6eJ_W|4kXedlC%*Rg4 zGnCUqKRSNcv?ai}v;6c;H|U8C0WJw(Sw%IW3X#ON8z`VTG3dP?rv^4i(X!90>GeQ*hoV7$T6@G zlz&i5J=hqsMmA_3S<$GbkbXl_{rFcCN7nDKLs%Vv#cJ})hR=<+jC5B-k zyc3owZD@{oTX=;Dc@g?7h)l+P(+(|@_HJP|?<*MRX=UW(V9RHgj($hHW>7(7N7B#D z&23M({ziC_FjSBS=NC{80kPtAcI=GcL?Mnvw%oCt{5yQ+a7%c7CRwnvaW5TY2&Vrd zL6UyuUfv^ir2^%*n(=*`CcA`GMFmqu_FL3+{4}SoN6fIph6mke1@G)6^Z$z$d~CcNwZy`0aoErgI7^pfCqaRLzz0-D6aB2*Bq zt*$nMeFHVb`gjAzaW<|kX98%92)Pvj+9o7~CQn>n&{@h*E0hIwQ^i*UPa26&It6c2 zQytvD3jv4`Aq|9kM|4-h=H&3{x-4K;U@jz4@1v;wbqJ0na6?uHz+Hw|6TlT$L;i$C z^`o11$~!eh#d|V=D_g6mXtZUDkt^`seh?n4yr#6X_=%UF?Fk7ye{Bxb!a(TyHz0My z&5UgI>A{Gn6SHMh+UT-77+E26M2jPCUk5n4>FMc2lZtCL4?*M>moC##NN+4rn*oE~ zBsCQbkToXpd^~K_ORA-`QvPiYg>^fQka!z>r;*H(g@q>oa|HNm`6`!&MVM`PDW@&C z)$}(fW@;)L8|e{{SqNc5YFAKD&KMZ5Cv9(PiRD{AT z_Jp{hp#kAig4G%@c~_C|F*3IRoS{s~a3<)S08fmEkP;m-d9m7DvHm^;U^OXId7}X? z$xOae#b{PkObiL;T9C%7Rv5T`!F)4Nyq#j2!rPO7=(-ncvRD;z0~dNKA;e1ux=>nP zhxRXD9xtzsR`hgb3oK{#@PJJtYbbuG&!z(5E@oZoB4;(A@1e(3fV&C-!vZNT9j*%k z#5M6+q_7sJG5ff9vAdiAUshI~?7~3#l9mDbM}Gvquu_(oav7I^79zg2t&JbFS%@41 zOp~5qg2?XQi-&#<(t7wnn}L9-VJx=cXXhgz#jbyNpXfJrR9e(UFxYW1U!%R&?P3OZ zTz-5auz<{g{_VM%ms>nWMKxRis_mG#BrMc&##-Q;Sk}sam(4(l1p{OYq~*YVC7US} zxD*c6pC0=R4z|PEb=-S01hxfV7WS`Z#U-&^fvSGqZbg6Mx`zNuyUH`SX8{_58P%24 zHG?(ZioVBP^ib_O54CAY_2mv4dJW8(Os374w{5e2=R~*o&uyl_#*9=D0PWL9BEk)!w0VhU|zlapBqrfhN?5j%a!0me$@Pv zDE4nd-)(2tt;f{rpgt8!TF7|F)+_c!SkvZFx@KOCQA|YlB#W|PPSsFnc!D<%t4Gqr z(kl*FStX8Ha0q4D2TXnL`pxRs>B^iMTlvAE2pIqos~MVBgWd53V4oCK@1(>55259e zy2LGRQ4n4r^jv_yV~|r)W`HaMvB)9N=K?7eP&nZ6lkth$-34nL zG=Ka3TLI30u!)C4Rj_ij2j7Lw<+e?&L(2_0jZ$lm89x5?uz9SKn-CuaY|i*0eN;1O zJ&R1XO?qIZxzqZM%8Big#82u-%tr7IY$lG+C$>h?>KHtZYG{ACSQVtF=%x%m<4mop z5>8G@0bHm?L4HR`UQ>pnu_?^tlwprR3GP`rKzTdVuH;Z|@jF$(OeU#ccs}~Q6u2&S z3-+9Aj|Bt81Nj&&(dFeM-VbTr0dh~BPxW~D^mw1|`KIjU%!M9kZfLraG~)x`H?S{H zS4e?@<|UtFzdr5{Dj85YQcL;0NMblb)O>fB)>gwG@W(oBPKelzSE`D}+Oj~*8I(;( z{s&>;0cf10LGcR0kz{U>a1ea+3;wKCz0Jo*0#^MtxX6$m1zBC#2u!v}atTs?6q)5t z;o-O0bPe!v_OkJ4wWZg}0<0-EkpuQoI!t8kTtb^cb~%TXra+s8Qpo>a=AU#E{pbOK zyzMK8L7`*E(M%$RiRg5b&t3HEpd1Kw_MbZk zey_~|d+uRnGMohnwY@L=CW4bZ-|r{nxQ|d8cDq@T5G1gN&w_qJ5Av9RpG-568(J3X zrnCn?(v-6SVi=fd91i$}Snl4X7M^elDqn_r2ot&G;KCGtSd~_;VKd@`#{=Sk(GWDZ z?bLy4mK9XHKzt4dTqTTY6*uspLy^7I=O|N#p}j7#+0`B+bb{C4c!<( zH1K-=&3&gWGdrnTI*KrSFwOn)PL^vL^V_DZ|Ig{Tw6w(1Q1Xz?3E;jfTpCJB_~4#L z$iP`yH=$G9%a`gY5nkN^BNy#tb52$MQ2WkctdQiTz&Gce>}thZqRJM&Lb zu*!HZiqBAgDjoEv3jxZDxZGq>N$gz+lm{*T#n4~JYV@J6bBP!XV1 zl2ReLDtq)4_G1wDgkXXZ#~zX?mWr)To{(6nKoo;@Zzbz~OzujwoR7~}UMkQQf0otw z{B}6KxDx43^_(5BKpEbVjOJ=E;a|<}O9lfchzjt|VAUxx;(oPJ$y2>tyc#7ypQF1# zwLrDqRVxLi?f;sS)r2n+vxabkfuR2VQekaf-8_<#AAky`Sp&j!jYf@_jqCX@V5#P*|TjJ(^I}QOAYJ zN%g^yVW~^Db>jx?EVsvOOFk)6jZ1V}YFo~(wV7rbJc@+Ih+n|Zvd$o7{RK@hQ$6#{ z#vCDFPl(8NW|nbwrXO9(6?0I*??FpNL!>ac`_C>q4&ecTWH=!i9UphnfZ7VLLIByC zT}aykK6leNe<^r~9v?1O^@Z>USXXu8ZsFSfm`hbp;)hXJuo-8FC`&tz6$zAH-Y zWt~G=3p5UEQcK(GKgC{$-=flZs24DHX7KI(ZQSa8|CPUgLjjHrK@~Z2YmZMnHlpED zIoEIBg?Fdt<#)^SD9PTP4pJvnlJAnz3fTn!m={W5h`C6nq;rIDl6WqCCf^rOGMBHc zZ7LE>3%PlXcQ3*wk?~bI$k%nafoh1`3>M``C?V&9;uzA=b2>agrNCiD0UAQmISO>p zpVPj$g#h20_1!uH#?ZDygja(_p*?v2mAt-Ujr-@Oa9vCLRSj}TGYJBRHzaJ$zgY4* zOFU(^(XNQO_QWaAxdm%SCN`Qq;Rjd+fDDl>{6WR?pu~trprv6^$^a$R4H9m|m zNl4K!uWG@^wx%X3DVA17+)$D*7iwG67dx*6ul9k40zRyD3Xjjqii%(Gy^vGc#P?uO zo)ZtMygqgq%uB%&qpYKA7#wSg;SI$e@cf~s;K#4~`dm75*i3hbMz!}m7@#zd=lNJyxjLe^^DwJBS~dcx#8+%x82yesZk1{(TBD;c4U+Ax8w* zoffK>?rr5OfL#wx?4pmRFw*&zo!WL;^iOIb{$q&ve!&JS))thIWz++g0Z8QXtW2x@y13_; z!Mi=SSpV~Q{4uTu81%4>@hS{HZHu3V#g))MAWvZvLO%-L%ZuAeKa}47eTM_LJTA%l zSFac^v`~WE!8)(zmJA&`iM#v*K%8dden)cj0MFdm{Ezw+@psKz;9`FW$*>hptZjEN z26=L}6sm=;%{JfiDp7t*0>Jv*Cfm0`-VBL4bKl-FgG>f#XtsfI zFLe9?;w3)|%GiM3L$@b(tindK>cI$j#LElpmY%~3`N7!GHNNwxo(}>zunJ;>)K4e| zVIn{Lyd+%;9vD*BFVV0wTLxTM&;wNhU|BvGU+KLyB-0G%^d2V@Z;E-0XPJ)` zuh^`uuF{-WWn`e^a1t?f4GKElxJMOmkC8-Ho}eWdj||w_?yoX!KEg!Rvh#O)p8(9n zkkvQXtmv5Tzs|tTd=`vLI@#&gc1V|FxBqV|ZN75cLBLmyd=?}^Y3Y(qt}d~g9$*3P zv($judiCE_pW^Pna?rWhgz1n&eG1+12VrD|Ha(?1i?KCY4 z6m|%V3!dmttgPl|YJ;|U4m)?k=D+bL`aO=Gzk4Bg@y1j8MG%&_sC1~zUm0kkXO~_k z`AkHNeAZ*POZxk}G7dBp^t5Nxjr@KX8stcPZt|`;*1YH=6eJ>emsM4XQ;hb-$F8p0 zya0+<-(5-gCLlY6BAQiRFaR{+Hus-#c4^61>Un`4_XwuI%Er zHWy>SRwDxVHbjdI?}iu>AuDYTs$d8QeSv~~Au>yV2p0R)cSv^~pQ?`!Pj+o%tVNMq zt(>j1lv^QVGX{5k?#e zdj87L7O7qT_V@J8Q~`g!h(=!9^pRJt85$%!LI=%ZqEQ$kCK{9jpxNMTTQ z#Ie$RIHEz~m!lY@qF|x*;MME(WV`yZ8M*bavYS3Tnri`hTT^T7em;ry#=`x zQn}PulO{#xV0B=(1f)=TnE&laL8OlXRV}nr-j1HM^|RSWf!BxHs09PDy-ad0g{fGn z#6{;cekKd{TW;tJ-=7W$^1^wm{oxh(v|hL$7hn(bvk`pT?+KPKkXACm-+lg9e-Yi0 z%JHmdYnl(HO(2IvqWM-_VG=rhM~oz3c07c}R_qTvHlSwA+7X91t7k`HM!ZzKnAJ&? zEXN>VQAu9>^_uY6i&;w_$ofbJ$0vaCPY*xH-;iU(2PRk_h$MRiR z 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 literal 27250 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 diff --git a/lectures/kalman.md b/lectures/kalman.md index 6cbbd93..a3978dd 100644 --- a/lectures/kalman.md +++ b/lectures/kalman.md @@ -18,7 +18,7 @@ kernelspec: ``` -# 卡尔曼滤波器的初步介绍 +# 初见卡尔曼滤波器 ```{index} single: 卡尔曼滤波 ``` @@ -40,7 +40,7 @@ tags: [hide-output] 本讲座为卡尔曼滤波器提供了一个简单直观的介绍,适合以下读者: -* 听说过卡尔曼滤波器但不知道它如何工作的人,或者 +* 听说过卡尔曼滤波器但不知道它如何运作的人,或者 * 知道卡尔曼滤波的方程但不知道这些方程从何而来的人 关于卡尔曼滤波的更多(进阶)阅读材料,请参见: @@ -83,9 +83,11 @@ from scipy.linalg import eigvals 总结我们知识的一种方式是点预测 $\hat x$ -* 但如果总统想知道导弹目前在日本海上空的概率呢? -* 那么用二元概率密度 $p$ 来总结我们的初始认知会更好 - * $\int_E p(x)dx$ 表示我们认为导弹在区域 E 内的概率。 +然而,点预测可能不够用。例如,我们可能需要回答"导弹目前在日本海上空的概率是多少"这样的问题。 + +为了回答这类问题,我们需要用二元概率密度函数 $p$ 来描述我们对导弹位置的认知。 + +对于任意区域 $E$,积分 $\int_E p(x)dx$ 给出了我们认为导弹在该区域内的概率。 密度 $p$ 被称为随机变量 $x$ 的*先验*。 @@ -186,7 +188,7 @@ def bivariate_normal(x, y, σ_x=1.0, σ_y=1.0, μ_x=0.0, μ_y=0.0, σ_xy=0.0): def gen_gaussian_plot_vals(μ, C): "用于绘制二元高斯 N(μ, C) 的 Z 值" - m_x, m_y = float(μ[0]), float(μ[1]) + m_x, m_y = float(μ[0].item()), float(μ[1].item()) s_x, s_y = np.sqrt(C[0, 0]), np.sqrt(C[1, 1]) s_xy = C[0, 1] return bivariate_normal(X, Y, s_x, s_y, m_x, m_y, s_xy) @@ -232,7 +234,7 @@ plt.show() ```{math} :label: kl_measurement_model -y = G x + v, \quad \text{where} \quad v \sim N(0, R) +y = G x + v, \quad \text{且} \quad v \sim N(0, R) ``` 这里 $G$ 和 $R$ 是 $2 \times 2$ 矩阵,其中 $R$ 是正定矩阵。两者都被假定为已知,且噪声项 $v$ 被假定与 $x$ 独立。 @@ -292,7 +294,7 @@ new_Z = gen_gaussian_plot_vals(x_hat_F, Σ_F) cs2 = ax.contour(X, Y, new_Z, 6, colors="black") ax.clabel(cs2, inline=1, fontsize=10) ax.contourf(X, Y, new_Z, 6, alpha=0.6, cmap=cm.jet) -ax.text(float(y[0]), float(y[1]), "$y$", fontsize=20, color="black") +ax.text(float(y[0].item()), float(y[1].item()), "$y$", fontsize=20, color="black") plt.show() ``` @@ -321,7 +323,7 @@ plt.show() ```{math} :label: kl_xdynam -x_{t+1} = A x_t + w_{t+1}, \quad \text{where} \quad w_t \sim N(0, Q) +x_{t+1} = A x_t + w_{t+1}, \quad \text{且} \quad w_t \sim N(0, Q) ``` 我们的目标是将这个运动定律和我们当前的分布 $p(x \,|\, y) = N(\hat x^F, \Sigma^F)$ 结合起来,得出一个新的一个时间单位后位置的*预测*分布。 @@ -405,7 +407,7 @@ new_Z = gen_gaussian_plot_vals(new_x_hat, new_Σ) cs3 = ax.contour(X, Y, new_Z, 6, colors="black") ax.clabel(cs3, inline=1, fontsize=10) ax.contourf(X, Y, new_Z, 6, alpha=0.6, cmap=cm.jet) -ax.text(float(y[0]), float(y[1]), "$y$", fontsize=20, color="black") +ax.text(float(y[0].item()), float(y[1].item()), "$y$", fontsize=20, color="black") plt.show() ``` @@ -482,7 +484,7 @@ plt.show() 方程 {eq}`kalman_sdy` 被称为离散时间黎卡提差分方程。 -方程 {eq}`kalman_dare` 被称为[离散时间代数黎卡提方程](https://en.wikipedia.org/wiki/Algebraic_Riccati_equation)。 +方程 {eq}`kalman_dare` 被称为[离散时间代数黎卡提方程](https://zhuanlan.zhihu.com/p/692283143)。 关于固定点存在的条件以及序列 $\{\Sigma_t\}$ 收敛到该固定点的条件在 {cite}`AHMS1996` 和 {cite}`AndersonMoore2005` 第4章中有详细讨论。 @@ -646,7 +648,7 @@ y = y.flatten() for t in range(T): # 记录当前预测的均值和方差并绘制其密度 - m, v = [float(temp) for temp in (kalman.x_hat, kalman.Sigma)] + m, v = [float(temp.item()) for temp in (kalman.x_hat, kalman.Sigma)] f = lambda x: norm.pdf(x, loc=m, scale=np.sqrt(v)) integral, error = quad(f, θ - ϵ, θ + ϵ) @@ -795,5 +797,5 @@ plt.show() 这说明 $x_t$ 运动规律中的随机性越大,会导致预测中的(永久性)不确定性越大。 ``` -[^f1]: 例如,参见 {cite}`Bishop2006` 第93页。要从他的表达式得到上面使用的表达式,你还需要应用 [Woodbury矩阵恒等式](https://en.wikipedia.org/wiki/Woodbury_matrix_identity)。 +[^f1]: 例如,参见 {cite}`Bishop2006` 第93页。要从他的表达式得到上面使用的表达式,你还需要应用 [Woodbury矩阵恒等式](https://zhuanlan.zhihu.com/p/388027547)。