problem in return of function

1 view (last 30 days)
huda nawaf
huda nawaf on 1 Sep 2012
Hi, I have the following code
function [c,d]=test2(a,b)
if a>1
c=a*b';
d=a+b;
else
c=a*b'
end
In case of a be >1 I got this error message: Error in ==> test2 at 2 if a>1
??? Output argument "d" (and maybe others) not assigned during call to
"D:\MATLAB\R2011a\bin\test2.m>test2".
thanks
[EDITED, Jan, code formatted]
  11 Comments
Image Analyst
Image Analyst on 2 Sep 2012
No. You don't need to "make spaces between each two lines" (each pair of lines). You just make sure there is a blank line before the first line of your code. Then you highlight ALL your code, which may include blank lines or not - it doesn't matter, just highlight everything. Then click {}Code and it will format everything properly, even going across chunks of your code where you have a blank line.
Oleg Komarov
Oleg Komarov on 2 Sep 2012
@huda: then you weren't looking carefully. In the .gif I format the code, and then I improve it a bit. You can forget about the second part, just watch what happens when I press {}code in the preview.

Sign in to comment.

Answers (3)

Star Strider
Star Strider on 1 Sep 2012
Edited: Star Strider on 1 Sep 2012
If it is not always necessary for you to return a value for ‘d’, you might consider using the nargout function.
For example:
function [c,d]=test2(a,b)
if (nargout > 1) && (a > 1)
c=a*b';
d=a+b;
elseif (nargout == 1) && (a <= 1)
c=a*b'
end
So if your calling function calls test2 with (a <= 1), only needs ‘c’ and does not need ‘d’, this version of your function would only return a value for ‘c’. You would not generate the error. You can experiment with different options.

Image Analyst
Image Analyst on 1 Sep 2012
Edited: Image Analyst on 1 Sep 2012
So when you pass in a value of a less than 1, what value does d have? Think about it. It could be written more robustly like this perhaps:
function [c ,d] = test2(a, b)
% Initialize outputs to null.
c = [];
d = [];
try
% b is apparently an array because he's using the transpose operator '.
% a must be a scalar since he's comparing it to 1.
% c is the same for both parts of the if so we can pull it out of the if.
% We have no idea what d was supposed to be in case a < 1
% So we'll just assign it to a string.
c = a * b';
if a > 1
d = a + b;
else
% Assign d to a string or whatever you want.
d = 'a is less than 1';
end
catch ME
errorMessage = sprintf('Error in function test2.\n.\n\nError Message:\n%s', ME.message);
uiwait(warndlg(errorMessage));
end

Yash
Yash on 1 Sep 2012
Edited: Yash on 1 Sep 2012
for any values less then one it will give the following output
[c,d]=test2(-2,4)
c =
-8
Error in ==> test2 at 2 if a>1
??? Output argument "d" (and maybe others) not assigned during call to "D:\MakeYourassignment.com\test2.m>test2".
however change the code to this if you dont want any such error to exist..
function [c,d]=test2(a,b)
if a>1
c=a*b';
d=a+b;
else
c=a*b';
d=0;
end
now the output will be
[c,d]=test2(-2,4)
c =
-8
d =
0

Categories

Find more on Argument Definitions in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!