一、先看原视频教程
- 来源:原博客地址(@山猫小队长):
- 视频地址整理:
优酷:http://v.youku.com/v_show/id_XNzQwMTMwOTQ0.html
二、问题及解决办法
- 运行环境:
win7 旗舰版
matlab R2018a
- 原视频教程是在Octave上面演示的,运行结果却不显示曲线,后来发现是plot函数的用法不够严谨,加上'.r'就好了,修改如下:
clc
clear
close
Z=(1:100); %观测值
noise=randn(1,100); %方差为1的高斯噪声
Z=Z+noise;
X=[0; 0]; %k-1时刻的状态
P=[1 0; 0 1]; %k-1时刻的状态协方差矩阵
F=[1 1; 0 1]; %状态转移矩阵
Q=[0.0001 0; 0.0001 0]; %状态转移协方差矩阵
H=[1 0]; %观测矩阵
R=1; %观测噪声方差
figure;
hold on;
for i=1:100
X_ = F*X; %没有控制矩阵
P_ = F*P*F'+Q;
K = P_*H'/(H*P_*H'+R);
X = X_+K*(Z(i)-H*X_);
P = (eye(2)-K*H)*P_; %eye(2)生成二阶单位矩阵
plot(X(1),X(2),'.r'); %画点,横轴表示位置,纵轴表示速度,'.r'表示红点
end