gpt4 book ai didi

algorithm - 卡尔曼滤波算法是否有可能产生奇异方差矩阵?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:40 24 4
gpt4 key购买 nike

在卡尔曼滤波器实现中,“预测估计协方差”P(k|k-1), (see the wiki here) 是否可能是奇异矩阵?如果不是,是我的代码有问题吗?

这是状态空间模型

%    y{t}=Z{t} b{t} +  eps{t},                  eps{t} ~ N(0,H{t})
% b{t} = Pi{t} b{t-1} + tao{t} tao{t} ~ N(0,Q{t})
% b{1} ~ N(b0,P0)
% t=1,...,T

这是作为卡尔曼滤波器算法主要部分的反向递归:

for t=1:T

v{t} = y{t} - Z{t} * b_tt_1{t};
M{t} = P_tt_1{t} * Z{t}';
F{t} = Z{t} * M{t} + H{t};

F_{t}= inv(F{t});
MF_{t}= M{t} * F_{t};

b_tt{t}=b_tt_1{t} + MF_{t} * v{t};
P_tt{t}=P_tt_1{t} - MF_{t} * M{t}';

b_tt_1{t+1} = Pi{t} * b_tt{t};
P_tt_1{t+1} = Pi{t} * P_tt{t} * Pi{t}' + Q{t};

end

这发生在我使用实际数据时。为了查看问题出在哪里,我编写了一些代码来生成随机状态空间模型(如果需要,我可以提供代码)。

当 T 很大时,在某个 t0 之后,P_tt_1{t0} 是奇异的并且状态 (b{t0}) 发散。

编辑:我使用了协方差更新方程的“约瑟夫形式”(参见维基百科)。它有所帮助,但当状态空间模型很大时(在方程或状态的数量意义上),结果仍然不同。我认为这意味着问题与数值稳定性有关。有办法解决吗?

最佳答案

矩阵唯一可以变为奇异的地方是在行中:

F_{t}= inv(F{t});

您可以使用 pseudo-inverse `pinv' 代替。

或者如果你重写这些行会更好:

F_{t}= inv(F{t});
MF_{t}= M{t} * F{t};

MF_{t}= M{t} / F{t};

Matlab 将求解线性方程:MF_{t} * F{t} = M{t} - 即使 F_{t} 是奇异的,它也可能有解 - 或者如果它是仍然通过伪逆求解。

关于algorithm - 卡尔曼滤波算法是否有可能产生奇异方差矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com