Inner matrix dimensions must agree. error
1 view (last 30 days)
Show older comments
Hi everybody. I'm very news in matlab. I try to design kalman filter but the error occurred 'Inner matrix dimensions must agree' in matlab function
function [ x, P] = kalman( z, Q, R, x_old, P_old, A, H)
I = eye(3);
% Measurement update
K = (P_old * H') / (H*P_old*H'+R);
x = x_old + K * (z - H*x_old);
P = (I-K*H)*P_old;
% Time update
x = A * x ;
P = A * P * A' + B*Q*B';
Maybe initial estimates of P_old and x_old is not set I think. How to set that value? I want to set the first value for x and P are [0 ; 0 ;0 ] and [0.1 0 0; 0 0.1 0; 0 0 0.1] but dont know how to do.
5 Comments
Walter Roberson
on 4 Dec 2012
Please go in with the debugger, with dbstop if error, run until the problem occurs, and then try the subexpressions to see which part is generating the error
(P_old * H')
(H*P_old*H'+R)
and then if neither of those, finally
(P_old * H') / (H*P_old*H'+R)
With the array sizes you report, I do not reproduce the error.
I have to wonder about possibilities such as on the first iteration, something might be empty or an unexpected size.
Accepted Answer
Azzi Abdelmalek
on 4 Dec 2012
Edited: Azzi Abdelmalek
on 4 Dec 2012
As you said in your question, in your delay block you must set initials conditions to x0 and P0, where x0=zeros(n,1); n is your system order, and P0=0.1*eye(n). in your case n=3
2 Comments
Azzi Abdelmalek
on 6 Dec 2012
Edited: Azzi Abdelmalek
on 6 Dec 2012
What is B in your code?, it should be H.
Corrected function
function [ x, P] = kalman( z, Q, R, x_old, P_old, A, H)
I = eye(3);
% Measurement update
K = P_old * H'/(H*P_old*H'+R);
x = x_old + K * (z - H*x_old);
P = (I-K*H)*P_old;
% Time update
x = A * x;
P = A * P * A' + H*Q*H';
Also, In the constant block H uncheck Interpret Vector as 1-D
More Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!