忘却係数付き逐次最小二乗法の更新則は
\begin{align}
\hat{\theta}_{N} &= \hat{\theta}_{N-1} + \dfrac{P_{N-1} z_{N} }{\rho + z_{N}^{T} P_{N-1} z_{N}} \left ( y_{N} – z_{i}^{T} \hat{\theta}_{N-1} \right) \\[1.5ex]
P_{N} &= \frac{1}{\rho} \left ( P_{N-1} – \dfrac{P_{N-1} z_{N} z_{N}^{T} P_{N-1}}{\rho + z_{N}^{T} P_{N-1} z_{N}} \right)
\end{align}
であるのでこれを実装すると次のようになる。
function [theta, Pn, Rn] = rls(theta_,Pn_,Rn_,Yn ,Zn)
Rn=Rn_;
Num = Rn_+Zn'*Pn_*Zn;
Pn = 1/Rn_*(( Pn_ - (Pn_ * Zn * (Zn)' * Pn_) /Num) );
Ln = (Pn_*Zn) /Num;
En = Yn - Zn' * theta_;
theta = theta_ + Ln * En;
end
あとはいい感じに実装すれば動く。
for i = 3:1:100
x(i) = - a1 * x(i-1) - a2 * x(i-2) + b1 * r(i-1) + b2 * r(i-2);
y(i) = x(i) + v(i);
Zn = [-y(i-1) -y(i-2) r(i-1) r(i-2)]';
Yn = y(i);
[Theta,Pn] = rls(Theta, Pn, 0.95, Yn, Zn);
result(i,:) = Theta' ;
end
コメント