【问题标题】:Matlab / Octave - trouble getting started with functions, is there a function main equivalent?Matlab / Octave - 开始使用函数时遇到问题,是否有等效的函数?
【发布时间】:2016-01-22 16:55:54
【问题描述】:

我正在尝试开始使用 Matlab / Octave,并且很难弄清楚如何将程序组织成函数。目前我正在尝试编写一个简单的程序,将两个数字相加并显示结果,相加是由一个函数完成的。我原以为这会奏效:

% test.m

close all;
clear all;

num1 = 2;
num2 = 2;

result = myAdd(num1, num2);

disp(result);          % this should display 4 ??

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function retval = myAdd(var1, var2)
  retval = var1 + var2;
end

使用 Octave 4.0.0 运行上述程序,我收到以下错误:

error: 'myAdd' undefined near line 7 column 10
error: called from
    test at line 7 column 8

我也尝试过将函数放在第一位,将测试部分放在第二位,并将函数放在单独的文件中,并在同一目录中有一个 main.m 文件调用 myAdd 函数,都会导致错误。

所以这是我的问题:

-Matlab / Octave 是否有一个主要的等价物??

-解释器如何知道从哪里开始?它会自动转到程序的第一行,还是可以使用某个函数名称使其以该函数开头,因为函数 main() 在 C/C++ 中??

-在一个很大的 Python 程序中,我通常的做法是按如下方式组织事物:

# some_python_program.py

import abc
import xyz

###################################################################################################
def main():

    # stuff to get program started here

# end main

###################################################################################################
def function1():

    # specific function here

# end function

###################################################################################################
def function2():

    # specific function here

# end function

###################################################################################################
if __name__ == "__main__":
    main()

有没有办法在 Matlab/Octave 中做同样的事情??

如果有人可以就主要等价物和/或如何在 Matlab/Octave 中组织函数提供一些指导,请告知,谢谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果您来自诸如 python 之类的语言,Matlab/Octave 可能会以这种方式有点令人困惑。为了定义一个函数(不使用匿名函数),您需要使用该函数的名称创建一个单独的文件,然后可以使用命令行调用该文件。

    例如,您想创建一个名为myadd 的函数。您应该创建一个名为 myadd.m 的文件,其内容为:

    function out = myadd(a,b)
        out = a+b;
    end
    

    然后,只要您的文件在您的路径上(将其保存到您的 MATLAB 文件夹或放在您当前的工作目录中),您就可以从命令行窗口调用它,如下所示:

    >> myadd(5,6)
    
    ans =
    
         11
    

    每个文件仅公开一个函数(名称与文件名匹配的函数)。但是,如果您打算只使用该函数,您仍然可以为每个文件定义多个函数。例如,如果您有一个名为 foo.m 的文件,您可以执行以下操作:

    function out = foo(a,b)
        out = fun(a,b);
    end
    
    function out = fun(a,b)
        out = a * b;
    end
    

    这将允许您从命令行窗口调用foo(5,6),但fun(5,6) 将导致错误:Undefined function or variable 'fun'。

    详细了解local functions 和nested functions。

    希望对您有所帮助!

    【讨论】:

    • 是的,非常有帮助,谢谢。我根据您的建议做了以下操作,它起作用了:1)制作了一个文件“myAdd.m”,包括上面的添加功能 2)在 Octave 中选择“命令窗口”并在提示符下输入“myAdd(2, 2)”它显示了 4(应该如此) 3)我在同一目录中创建了一个文件,只有 2 行,第一行是“result = myAdd(2, 2);”,然后是“disp(result);”并切换回提示符,它再次显示 4。最后的后续问题:有没有办法将函数的测试代码包含在与函数相同的文件中?
    • 我承认我对 MATLAB 的unit test framework 不太了解,所以我不确定。我通常会编写额外的函数(通常命名为test_$FUNCTION_NAME,然后运行它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2018-10-14
    相关资源
    最近更新 更多