Inner matrix dimensions must agree. error
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
Walter Roberson
2012 年 12 月 4 日
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.
採用された回答
Azzi Abdelmalek
2012 年 12 月 4 日
編集済み: Azzi Abdelmalek
2012 年 12 月 4 日
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 件のコメント
Azzi Abdelmalek
2012 年 12 月 6 日
編集済み: Azzi Abdelmalek
2012 年 12 月 6 日
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
その他の回答 (1 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!