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".
[EDITED, Jan, code formatted]
No products are associated with this question.
If it is not always necessary for you to return a value for ‘d’, you might consider using the nargout function.
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.
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
for any values less then one it will give the following output
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