18.08.2013 Views

UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica

UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica

UNIVERSITA' DEGLI STUDI DI PAVIA - Robotica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

%<br />

ni = nargin;<br />

no = nargout;<br />

if ni ~= 8<br />

error('Wrong number of parameters')<br />

end<br />

if no ~= 3<br />

error('Wrong number of return values')<br />

end<br />

error(abcdchk(A,B));<br />

if ~length(A) | ~length(B)<br />

error('A and B matrices cannot be empty.')<br />

end<br />

Pk = P0;<br />

for i = 1:nin,<br />

Pk1 = A * Pk * A' + B * Q * B' - A * Pk * C' *<br />

inv(C * Pk * C' + R) * C * Pk * A';<br />

Pk = Pk1;<br />

if (norm(Pk1 - Pk, 2) / norm(Pk, 2)) < eps<br />

break<br />

end<br />

end<br />

nout = i;<br />

P = Pk;<br />

out_eps = eps;<br />

Il programma ha dunque la forma di una funzione, riccati(), che risolve<br />

iterativamente l'equazione omonima.<br />

Questa funzione riceve in input le matrici che descrivono il sistema<br />

dinamico, cioè A, B e C, il valore di partenza per l'iterazione P0, le matrici che<br />

descrivono il rumore sui dati, ovvero Q ed R, la precisione desiderata per<br />

l'iterazione (eps) in termini di residuo della soluzione ed infine il numero massimo<br />

di iterate, specificato da nin. In uscita si ha, invece, il risultato<br />

dell'approssimazione (P), la precisione raggiunta dall'iterazione ed il numero di<br />

cicli effettivamente compiuti, rispettivamente out_eps e nout.<br />

205

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!