Function Return only one value

55 visualizaciones (últimos 30 días)
Tipu Sultan
Tipu Sultan el 15 de Mayo de 2019
Comentada: Tipu Sultan el 16 de Mayo de 2019
My Code is as follows:
function [X,Y] = MyEKFFun(theta1,theta2,theta3,r1,r2,r3,t1,t2,t3,T)
S = [100 0 0 0 0 0;
0 100 0 0 0 0;
0 0 100 0 0 0;
0 0 0 100 0 0;
0 0 0 0 100 0;
0 0 0 0 0 100];
prev_S = S;
Big_lambda = eye(3);
a=0;
b=0;
c=0;
p=0;
q=0;
s=0;
est_vec=[ a ; b; c; p; q; s];
%theta = [ 31 24 18] ;
%t= [ 1 1.1 1.2 ];
%r= [330 364 379];
theta = [ theta1 theta2 theta3] ;
t= [ t1 t2 t3 ];
r= [r1 r2 r3];
%Wanted = num2cell(M,1)
%[r,b,distance,angle]=deal(Wanted{:})
x = [ r; theta ; t];
%dif_x=zeros(2,3);
dif_a = arrayfun(@(t) [t^2 t 1 0 0 0; 0 0 0 t^2 t 1],t,'UniformOutput',false);
%time=2;
time=T;
dif_x = zeros(2, 3, 3); % Pre-allocation
w = zeros(2, 1, 3); % Pre-allocation
%pred_x = zeros(3, 3, 3);
W = zeros(2,2);
y = zeros(2, 1, 3);
K = zeros(6, 2, 3);
for i=1:3
dif_x(:, :, i) = [-cos(theta(i)), r(i).*sin(theta(i)), 2*a.*t(i)+b;...
-sin(theta(i)), -r(i).*cos(theta(i)), 2*p.*t(i)+q];
W(:,:,i) = dif_x(:,:,i)*Big_lambda(i)*dif_x(:,:,i)';
pred_x = x(:,i)+randn(3,1);
w(:,:,i) = dif_x(:,:,i) * (x(:,i)-pred_x);
y(:,:,i) = dif_a{i} * est_vec + w(:,:,i);
K(:,:,i) = prev_S*dif_a{i}'/((W(:,:,i) + dif_a{i}*prev_S*dif_a{i}'));
est_vec_new = est_vec + K(:,:,i)*(y(:,:,i)-dif_a{i}*est_vec);
cond = abs(est_vec_new - est_vec);
if cond < 0.003
break
end
est_vec = est_vec_new;
a=est_vec(1,1);
b=est_vec(2,1);
c=est_vec(3,1);
p=est_vec(4,1);
q=est_vec(5,1);
s=est_vec(6,1);
S_new = (eye(6) - (K(:,:,i)*dif_a{i}))*prev_S;
prev_S = S_new;
%X(i) = a*time.^2+b*time+c; % To calculate x co-ordinate for t>=3
%Y(i) = p*time.^2+q*time+s; % To calculate y co-ordinate for t>=3
%figure,plot(t,meas_equa1)
%new_t=[t,time];
%figure,plot(r_cosTheta,r_sineTheta)
end
X = a*time.^2+b*time+c; % To calculate x co-ordinate for t>=3
Y = p*time.^2+q*time+s;
end
Now my question is why it returns only one values as 'ans'.It should be two values which is calculated as 'X,Y' from the updated values of the for loop.But the function always returns one value titled answer, like as follows:
>> MyEKFFun(31,24,18,330,364,379,1,1.1,1.3,2)
ans =
384.4037
Please help anyone.
Thanks in advance.

Respuestas (2)

James Tursa
James Tursa el 15 de Mayo de 2019
Editada: James Tursa el 15 de Mayo de 2019
Call it with two requested outputs:
[X,Y] = MyEKFFun(31,24,18,330,364,379,1,1.1,1.3,2)
Since you were calling it with no requested outputs, MATLAB simply put the first one in ans and threw away the second one.
  1 comentario
Tipu Sultan
Tipu Sultan el 16 de Mayo de 2019
Editada: Tipu Sultan el 16 de Mayo de 2019
Ok thanks.
Can you tell me my code is correct or my implementation is correct or not!
My algorithm is as follows:

Iniciar sesión para comentar.


Jon Wieser
Jon Wieser el 15 de Mayo de 2019
when you call the function, you need to specify two outputs,
for example:
[X,Y] =MyEKFFun(31,24,18,330,364,379,1,1.1,1.3,2)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos


Versión

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by