Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

problem in return of function

Asked by 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

huda nawaf on 2 Sep 2012

I saw that links of code , just mark the code then press {}code then make spaces between each two lines

I did as in this example of write code http://www.mathworks.com/matlabcentral/answers/13205-tutorial-how-to-format-your-question-with-markup

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 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.

huda nawaf

Tags

Products

No products are associated with this question.

3 Answers

Answer by Star Strider on 1 Sep 2012
Edited by 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.

0 Comments

Star Strider
Answer by Image Analyst on 1 Sep 2012
Edited by 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

0 Comments

Image Analyst
Answer by Yash on 1 Sep 2012
Edited by 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

0 Comments

Yash

Contact us