Coder. Error due mismatched varying sizes
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Image Analyst
am 4 Dez. 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.
Antworten (1)
Walter Roberson
am 4 Dez. 2012
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 Kommentare
Walter Roberson
am 4 Dez. 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().
Siehe auch
Kategorien
Mehr zu MATLAB Coder finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!