How do I use function for a function which has a matrix with variable index?
显示 更早的评论
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".
回答(1 个)
James Tursa
2020-11-17
编辑:James Tursa
2020-11-17
0 个投票
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 个评论
Fidele Adanvo
2020-11-17
James Tursa
2020-11-17
编辑:James Tursa
2020-11-17
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
2020-11-17
James Tursa
2020-11-17
编辑:James Tursa
2020-11-17
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
2020-11-17
James Tursa
2020-11-17
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
2020-11-17
Fidele Adanvo
2020-11-17
类别
在 帮助中心 和 File Exchange 中查找有关 Data Type Identification 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!