Coder. Error due mismatched varying sizes
Mostrar comentarios más antiguos
Good evening. I made the function NEOEKF and then tried to convert to C++ with coder, but I got the following warning:
57 Size mismatch (size [:? x 1] ~= size [4 x 1]). Mismatched varying and fixed sizes indicate a probable run-time error. If this diagnostic is incorrect, use indexing to explicitly make the varying size fixed.
Does any one can support me how to fix it? Refer to line 57
Thank you in advance.
regards Willy
function [DIST,VEL,RB] = NEOEKF(dT,T2)
Mo = 030;
dT = 20;
T2 = 360;
Xs = [0 0 4 0];
yseg = 2025.371/3600;
F = [1 0 0 0;0 1 0 0;dT 0 1 0 ;0 dT 0 1];
dd= 100;
dve= 15;
P = [dd^2 0 0 0;
0 dd^2 0 0;
0 0 dve^2 0;
0 0 0 dve^2];
v = 0.5;
R = pi/180*v^2;
X = [];
X = [15000*sin(Mo*pi/180) 15000*cos(Mo*pi/180) 0 0]';
I=eye(4);
Q = 15*[0.5*dT^3 0 0.25*dT^4 0;0 0.5*dT^3 0 0.25*dT^4;...
dT^2 0 0.5*dT^3 0;0 dT^2 0 0.5*dT^3];
DIST = size(T2);
VEL = size(T2);
RB = size(T2);
z = 30:0.4:34;
for k = 1:1:10
X(:,k+1) = F*X(:,k);
P_ = F*P*F'+ Q;
sx = X(1,k);
sy = X(2,k);
h = atan2(sx,sy);
if h<0
h = h + 2*pi;
elseif h>2*pi
h = h - 2*pi;
end
H = [sy/(sx^2 + sy^2) -sx/(sx^2 + sy^2) 0 0];
g = [cos(z(k))/(X(1)*sin(z(k))+ X(2,k+1)*cos(z(k))) -sin(z(k))/(X(1,k+1)*...
sin(z(k))+ X(2,k+1)*cos(z(k))) 0 0];
S = H*P_*H'+ R;
G = P_*H'/S;
X(:,k+1) = X(:,k+1)+ G*(z(k) - h); % Line 57
P =(I - G*g)*P_*(I - G*g)' + G*R*G';
DIST(k+1) = sqrt(X(1,k+1).^2 + X(2,k+1).^2);
VEL(k+1) = sqrt((X(3,k+1) + Xs(3)).^2 + (X(4,k+1) + Xs(4)).^2)/yseg;
RB(k+1) = atan2(X(3,k+1)+ Xs(3),X(4,k+1) + Xs(4))*180/pi;
RB(k+1) = round(RB(k+1));
if RB(k+1)<0
RB(k+1) = RB(k+1) + 360;
elseif RB(k+1) > 360;
RB(k+1) = RB(k+1) - 360;
end
X(:,k) = [X(:,k)];
end
2 comentarios
Image Analyst
el 4 de Dic. de 2012
Guillermo, to get your code to show up on separate lines, you can highlight the code and click the {}Code icon to make it look like code. That is far better than double spacing your code. Give it a try. Edit, remove blank lines, highlight, then click {}Code and Save.
Guillermo Soriano
el 4 de Dic. de 2012
Respuestas (1)
Walter Roberson
el 4 de Dic. de 2012
0 votos
Your z values are not integral, so z(k) is not integral, and h is not integral, so z(k)-h is not integral. But you have G() at that expression. G appears to be an array rather than a function, so I do not understand why it does not complain about indexing at a non-integral value ?
3 comentarios
Walter Roberson
el 4 de Dic. de 2012
Oh, you tried formatting as bold, and then you got messed up on the fact that a multiplication already existed on the line and was considered to end the bold instead of showing the multiplication.
In that case, is there reason to expect that G will be a scalar ?
Guillermo Soriano
el 4 de Dic. de 2012
Walter Roberson
el 4 de Dic. de 2012
Do no extend your X array at run-time. Initialize it to be its final size as the very first time you assign to X, using zeros().
Categorías
Más información sobre Mathematics and Optimization en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!