goldfrapp04
goldfrapp04

Reputation: 2356

Matlab function calling basic

I'm new to Matlab and now learning the basic grammar.

I've written the file GetBin.m:

function res = GetBin(num_bin, bin, val)
if val >= bin(num_bin - 1)
    res = num_bin;
else
    for i = (num_bin - 1) : 1
        if val < bin(i)
            res = i;
        end
    end
end

and I call it with:

num_bin = 5;
bin = [48.4,96.8,145.2,193.6]; % bin stands for the intermediate borders, so there are 5 bins
fea_val = GetBin(num_bin,bin,fea(1,1)) % fea is a pre-defined 280x4096 matrix

It returns error:

Error in GetBin (line 2)
if val >= bin(num_bin - 1)

Output argument "res" (and maybe others) not assigned during call to
"/Users/mac/Documents/MATLAB/GetBin.m>GetBin".

Could anybody tell me what's wrong here? Thanks.

Upvotes: 0

Views: 610

Answers (2)

kol
kol

Reputation: 28688

for i = (num_bin - 1) : -1 : 1

Upvotes: 0

Oliver Charlesworth
Oliver Charlesworth

Reputation: 272467

You need to ensure that every possible path through your code assigns a value to res.

In your case, it looks like that's not the case, because you have a loop:

for i = (num_bins-1) : 1
    ...
end

That loop will never iterate (so it will never assign a value to res). You need to explicitly specify that it's a decrementing loop:

for i = (num_bins-1) : -1 : 1
    ...
end

For more info, see the documentation on the colon operator.

Upvotes: 2

Related Questions