problem in return of function

조회 수: 1 (최근 30일)
huda nawaf
huda nawaf 2012년 9월 1일
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
Image Analyst
Image Analyst 2012년 9월 2일
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 2012년 9월 2일
@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.

댓글을 달려면 로그인하십시오.

답변 (3개)

Star Strider
Star Strider 2012년 9월 1일
편집: Star Strider 2012년 9월 1일
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 2012년 9월 1일
편집: Image Analyst 2012년 9월 1일
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 2012년 9월 1일
편집: Yash 2012년 9월 1일
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

카테고리

Help CenterFile Exchange에서 Argument Definitions에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by