getting 'output argument' error when calling function

7 Ansichten (letzte 30 Tage)
Brinta Chowdhury
Brinta Chowdhury am 22 Mär. 2018
Kommentiert: Brinta Chowdhury am 22 Mär. 2018
I have written this below function :
function [winner_index] = Auction(match_fit,match_index,cbid)
bidmax = 0;
m = match_fit;
w = match_index;
for i = 1:length(m)
bid(i) = cbid*m(i,:);
effectiveBid (i)= bid(i)+randn;
if effectiveBid(i) > bidmax
winner_index = w(i);
bidmax = effectiveBid(i);
end
end
end
Previously when I run this some times it is ok, sometime it was giving the below error " Output argument "winner_index" (and maybe others) not assigned during call to "Auction".
and now I am calling this function inside a loop. It is continuously showing the same error. I don't know why :(
[SL: edited to apply code formatting. Brinta, in the future please use the {}Code button to format your code.]

Akzeptierte Antwort

Steven Lord
Steven Lord am 22 Mär. 2018
If effectiveBid(i) > bidmax is not true during any of the iterations, the variable winner_index will never be assigned a value. When the function returns, it tries to take the value of winner_index in the function and return it as the output. But winner_index doesn't exist so MATLAB throws an error.
Define winner_index to a default value before the for loop.
  2 Kommentare
Brinta Chowdhury
Brinta Chowdhury am 22 Mär. 2018
Hi Steven, I modified my function as below { function [winner_index] = Auction(match_fit,match_index,cbid) % bidmax = 0;m m = match_fit; w = match_index; for i = 1:length(m) bid(i) = cbid*m(i); effectiveBid(i)= bid(i)+randn; end [s,sortedInds] = sort(effectiveBid(:),'descend') c=sortedInds(1); winner_index=w(c); end } now it is giving below error .
Undefined function or variable 'effectiveBid'. Error in Auction (line 9) [s,sortedInds] = sort(effectiveBid(:),'descend')
May be it is some thing silly, but I cannot notice. If I run this code as a separate program it is working fine.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan
Jan am 22 Mär. 2018
If match_fit is empty or effectiveBid(i) > bidmax is never true, the variable winner_index is not created. The output of randn can be negative.
What do you want to define as output instead in this case?
Note that length(m) is not safe, because it replies the longest dimension. Better use: size(m, 1).

Kategorien

Mehr zu Loops and Conditional Statements 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!

Translated by