Assignment has more non-singleton rhs dimensions than non-singleton subscripts in UKF

1 visualización (últimos 30 días)
I'm trying to apply the unscented kalman filter as elaborated in the Artigo , to perform the estimation of the lambdah parameter of a time series. When implementing the code I get the following error
The commands in line 62 are hXi (:, k) = h (fXi (:, k)); and the error message i
Assignment has more non-singleton rhs dimensions than non-singleton subscripts
Error in Parametro_UKF (line 62) hXi(:,k) = h(fXi(:,k)); %h(Xi)
Hence I do not know how to do it because my measurement function only has three inputs of the five, that is, I only have the series of three variables. How to proceed, I'm trying to calculate the prediction of the measure through function h and Sigma Fxi points. I know there has to be dimensions, but I can not fathom how to correct.
It follows the implanted codes for the accomplishment of the parameter estimation.
I appreciate any help! If you notice any more errors please let me know, I do not know how to program very well!
  6 comentarios
Walter Roberson
Walter Roberson el 19 de Sept. de 2018
Out of those 18 values, which 3 would you like to store in hXi(:,k) ?
GTA
GTA el 19 de Sept. de 2018
I did not quite understand what you meant, sorry. Actually I would like to perform the same process that was done previously
[Xi, W] = SigmaPoints(x, P, 0);
fXi = zeros(n, 2*n+1);
for k = 1:2*n+1
fXi(:, k) = f(Xi(:,k));
end
[xp, Pp] = UT(fXi, W, Q);
only with h of size 3 x 6. And then apply the UT function in that matrix.

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 19 de Sept. de 2018
hXi = zeros(18, 2*n+1);
for k = 1:2*n+1
hXi(:,k) = reshape( h(fXi(:,k)), [], 1); %h(Xi)
end
  3 comentarios
Walter Roberson
Walter Roberson el 19 de Sept. de 2018
Well, you can do things like
hXi = cell(1, 2*n+1);
zp = cell(1, 2*n+1);
Pz = cell(1, 2*n+1);
for k = 1:2*n+1
hXi{k} = h(fXi(:,k)); %h(Xi)
[zp{k}, Pz{k}] = UT(hXi{k}, W, R);
end
Pxz = zeros(n, m);
for k = 1:2*n+1
Pxz = Pxz + W(k)*(fXi(:,k) - xp)*(hXi{k} - zp{k})';
end
but it will not work in the Pxz calculation.
(fXi(:,k) - xp) will be 6 x 1
hXi{k} will be 3 x 6. zp{k} will be 3 x 1. Since R2016b it has been legal to take 3 x 6 minus 3 x 1, which would be treated like bsxfun(@minus, 3x6, 3x1) which would give a 3 x 6 result. Then the conjugate transpose of that is taken, giving a 6 x 3 result.
And now you are stuck, since you cannot use * between a 6 x 1 and a 6 x 3.
You appear to be expecting a 6 x 3 result. The only way to get that out of a * with a 6 x 3 is if the first expression were to give a 6 x 6.
You need to trace out exactly what size you are expecting from each result.
GTA
GTA el 19 de Sept. de 2018
Thank you very much, I will think about everything that was said here and rethink some things. Thanks for taking the time to help me, and it helped a lot!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by