How do I use function for a function which has a matrix with variable index?
Mostrar comentarios más antiguos
function[PacksA,PacksB,ContA,ContB,AR,BR,fA,fB]=OutAR_NotOutBR(i,Max,AR,BR,fB,fA,ContB)
if AR<Max
%PacksB, PacksA, ContB, ContA are a vector that varies according to the operation
PacksB=3; fB=fB+1;
PacksA=2; ContA(AR+1)=i; AR=AR+1;
if BR==1
PacksB(ContB(1))=4; fB=fB+1;
ContB(1)=0; BR=BR-1;
elseif BR>=2
PacksB(ContB(1,1:2))=4; fB=fB+2;
if BR==2
ContB=0;
else
ContB(1)=ContB(3); ContB(1,2:3)=0;
end
BR=BR-2;
end
elseif AR==Max
PacksA=3; fA=fA+1;
PacksB=3; fB=fB+1;
if BR>0
PacksB(ContB)=4; fB=fB+BR;
end
ContB=0;
BR=0;
end
%Hello, can you help me solve this error?
%Error in ==> OutAR_NotOutBR at 2
if AR<Max
{??? Output argument "PacksA" (and maybe others)
not assigned during call to
"C:\Users\vignon\Downloads\OutAR_NotOutBR.m>OutAR_NotOutBR".
Respuestas (1)
James Tursa
el 17 de Nov. de 2020
Editada: James Tursa
el 17 de Nov. de 2020
0 votos
You don't have a branch for the AR>Max case. If you hit that condition, the output variables will not be assigned. Also, ContA doesn't appear to be set in the AR==Max case.
You should check that in all of the possible paths through your code, all of the output variables get assigned to something.
8 comentarios
Fidele Adanvo
el 17 de Nov. de 2020
James Tursa
el 17 de Nov. de 2020
Editada: James Tursa
el 17 de Nov. de 2020
ContA is an output of your function, so you should set it to something even if your calling function doesn't need it for a particular branch. E.g.,
ContA = [];
If you really want it to be an optional output, you could put it at the end of the list. E.g.,
function[PacksA,PacksB,ContB,AR,BR,fA,fB,ContA]=OutAR_NotOutBR(i,Max,AR,BR,fB,fA,ContB)
Fidele Adanvo
el 17 de Nov. de 2020
James Tursa
el 17 de Nov. de 2020
Editada: James Tursa
el 17 de Nov. de 2020
Yes, of course. That is the point. You are not setting it to anything in one of your branches, so set it to something in that branch. If [] is not appropriate, then set it to something else that is appropriate.
Fidele Adanvo
el 17 de Nov. de 2020
James Tursa
el 17 de Nov. de 2020
Not sure exactly what you need to do. But here is the general syntax for having a function alter an element of a vector at the caller:
% Caller code
v = 1:n; % some arbitrary vector
for k=1:numel(v)
v(k) = some_function(some_arguments);
end
And you would have separate code for the function
% Function code
function v = some_function(some_arguments)
v = ______; % whatever expression goes into calculating the v element
end
Is that what you are trying to do?
Fidele Adanvo
el 17 de Nov. de 2020
Fidele Adanvo
el 17 de Nov. de 2020
Categorías
Más información sobre Data Type Identification 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!