MATLAB Answers

Error in a user-define function calling.

9 views (last 30 days)
Hi, i am returning multiple values from a user-function but this gives an error of Too many output arguments , i don't know where i am making the mistake ?
This is my function calling inside the loop,
for i = 1:no_users
[indexes(:,i), users_data(i,:)] = singleuser_traffic(num_event);
end
And this is the first line of the user-function
function [index, sort_user1] = singleuser_traffic(num_event)
I can't see any mistake in my function call, Thank you so much

  0 Comments

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 7 Jun 2014
Providing you’re not using the ‘index’ and ‘sort_user1’ variables elsewhere, try:
for i = 1:no_users
[index, sort_user1] = singleuser_traffic(num_event);
indexes(:,i) = index;
users_data(i,:) = sort_user1;
end
This doesn’t significantly add to the overload, and will let you see what the incompatibility is between what the function returns and what you want in your ‘indices’ and ‘users_data’ arrays.
I’ve found that for whatever reason, most functions will crash if you ask them to fill arrays for you. Let them return what they want, and do the array assignments just after.
BTW, num_event isn’t subscripted in your loop, so unless you’re defining it to change outside the loop you posted, you’re giving it the same argument in each iteration.

  7 Comments

Show 4 older comments
Star Strider
Star Strider on 7 Jun 2014
This is the problem:
function sort_user1 = singleuser_traffic(num_event)
Note that it’s only returning one output. If you want to return ‘index1’ from the sort call in the function (the only ‘index’ I see defined in it), change the function declaration line to:
function [index1, sort_user1] = singleuser_traffic(num_event)
That should do what you want. (You don’t have to change the function file name, since you haven’t changed the function name.)
Aftab Ahmed Khan
Aftab Ahmed Khan on 7 Jun 2014
Hi,
You won't believe this that i was making changes in my function-file which was placed in another folder and was calling another function with the same name placed placed in the current directory..................
Thanks life saver..........
Star Strider
Star Strider on 7 Jun 2014
My pleasure!
I’ve done that as well. If I’m working on one file to improve it and am using the previous version of it, I temporarily put a ‘#’ at the end of the file name of the version I don’t want to run. I remove the ‘#’ when I want to test the new version. I do my best to keep them in the same directory so that I don’t lose track of them.
Another helpful feature is the which function:
which singleuser_traffic -all
can be revealing in any situation where you believe a function isn’t behaving correctly.

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 7 Jun 2014
Before you call it, check out the size of indexes and users_data.
Inside the function, check the size of index and sort_user1.
Chances are they have different numbers of rows or index and sort_user1 are row vectors instead column vectors.

  1 Comment

Aftab Ahmed Khan
Aftab Ahmed Khan on 7 Jun 2014
Hi, Thank you for the reply.
For each loop iteration, index variable produce a 500*1 column vector whihle the sort_user1 produce a 1*500 row vector.
I think my function calling is set according to this situation, isn't it ?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!