Matlab / Octave - 难以开始使用函数,是否有类似于主函数的功能?

3

我正在尝试使用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是否有类似于主函数的东西?
-解释器如何知道从哪里开始?它会自动转到程序的第一行,还是有某个特定的函数名称可以使它从那个函数开始,就像C/C++中的function main()一样?
-在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中组织函数的方向,请告知,谢谢。
1个回答

4

如果你从像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)会导致错误:未定义函数或变量'fun'
查看有关本地函数嵌套函数的更多信息。
希望这有所帮助!

非常有帮助,谢谢。我根据您的建议进行了以下操作,并且它起作用了:1)创建一个名为“myAdd.m”的文件,其中包含上面的加法函数2)在Octave中选择“命令窗口”,在提示符处输入“myAdd(2,2)”,它显示4(应该如此)3)我在相同目录中创建了一个只有两行的文件,第一行是“result = myAdd(2,2);”,然后是“disp(result);”,并切换回提示符,它再次显示4。最后跟进问题:有没有办法在与函数相同的文件中包含测试代码? - cdahms
我承认我对MATLAB的单元测试框架并不是很了解,所以我不确定。通常我会编写额外的函数(通常命名为test_$FUNCTION_NAME),然后运行这些函数来进行测试。 - GJStein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接