在MATLAB中返回特定值

时间:2015-04-25 18:39:49

标签: matlab

我需要在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;不能正常工作。

4 个答案:

答案 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);