我需要在MATLAB中编写一个函数,假设( y1,m1,d1,y2,m2,d2 )
(年,月,日)形式的两个人的出生日期将比较它们,如果第一个人年龄较大则返回1,-1如果第一个人年龄较小,如果第一个人年龄相同则为0。我做了以下事情:
function classify( y1,m1,d1,y2,m2,d2 )
if y1 > y2
return -1;
elseif y1 < y2
return 1;
elseif y1 == y2
if m1 > m2
return -1;
elseif m1 < m2
return 1;
elseif m1 == m2
if d1 > d2
return -1;
elseif d1 < d2
return 1;
elseif d1 == d2
return 0;
end
end
end
end
但它给出了错误。如何在不必声明变量的情况下在MATLAB中返回值?我只需要返回1,0,-1取决于结果,似乎return 1;
不能正常工作。
答案 0 :(得分:2)
在Matlab中,return
is used将控制权返回给调用函数而不是返回值。要从函数中获取值,您应该执行以下操作:
function result = classify(a, b)
if a > b
result = 1;
elseif a < b
result = -1;
else
result = 0;
end
当您想要中断您的功能时, return
非常有用。但是,与goto
类似,它可能会降低您的代码的可读性,从而容易出错。
顺便说一下,通过比较两个日期可以缩短你要做的事情:
function result = classify(y1, m2, d1, y2, m2, d2)
date1 = datenum(y1, m1, d1);
date2 = datenum(y2, m2, d2);
if date1 < date2
result = 1;
elseif date1 > date2
result = -1;
else
result = 0;
end
你可以通过避免使用if子句来缩短它:
result = sign(date2 - date1);
答案 1 :(得分:1)
Matlab函数如下所示:
function older = classify(y1, m1, d1, y2, m2, d2)
...
end
older
变量是你的返回变量 - 返回函数内的最后一个赋值。
答案 2 :(得分:1)
首先classify是在MATLAB中实现的,使用相同的名称创建自己的函数并不是一个好主意。
您尚未在函数定义中定义输出,因此只需在函数一词之前添加[A] =
return不返回值,但会将控制权返回给调用它的函数..所以它在你的情况下不可用..用A =
替换返回你将还需要在if
语句开始之前声明和定义A.
PS。我使用A
作为示例,但您可以使用任何名称variable,只要它以字母开头且长度少于63个字符。
function [A] = classi( y1,m1,d1,y2,m2,d2 )
A = 0;
if y1 > y2
A = -1;
elseif y1 < y2
A = 1;
elseif y1 == y2
if m1 > m2
...
答案 3 :(得分:1)
要让函数返回一个值,需要在函数定义行中声明相应的变量。 return
函数只是过早地退出函数,它不会自动返回值。
function output = functionName()
%# assign output
output = 1;
end
与输入多个值的方式类似,您可以让它返回多个值
function [add, mult] = addAndMultiply(a,b)
add = a+b;
mult = a*b;
end
将其命名为
[u,v] = addAndMultiply(1,2);
现在,针对您比较两个日期的具体问题:我强烈建议您使用datenum
:
function firstIsOlder = classify( y1,m1,d1,y2,m2,d2 )
firstDate = datenum(y1, m1, d1);
secondDate = datenum(y2, m2, d2);
%# if first is older, sign is +1, if both equal, sign is 0
firstIsOlder = sign(secondDate - firstDate);