一、先看原視頻教程
- 來源:原博客地址(@山貓小隊長):
- 視頻地址整理:
優酷: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