首页 文章

在MATLAB中返回特定值

提问于
浏览
1

我需要在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 回答

  • 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);
    
  • 1

    在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

    Matlab函数看起来像这样:

    function older = classify(y1, m1, d1, y2, m2, d2)
        ...
    end
    

    older 变量是您的返回变量 - 返回函数内的最后一个赋值 .

  • 2

    首先classify是在MATLAB中实现的,使用相同的名称创建自己的函数并不是一个好主意 .

    • 您尚未在函数定义中定义输出,因此只需在单词函数前添加 [A] =

    • return不能在你的情况下使用..用 A = 替换回报你还需要在 if 语句开始之前声明并定义A.

    PS . 我使用 A 作为示例,但只要以字母开头且长度少于63个字符,就可以使用variable的任何名称 .

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

相关问题