Matlab / Octave - 开始使用函数时遇到麻烦,是否有一个函数main等价?

时间:2016-01-22 16:55:55

标签: matlab

我试图开始使用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中组织功能,请告知,谢谢。

1 个答案:

答案 0 :(得分: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)会导致错误:Undefined function or variable 'fun'

详细了解local functionsnested functions

希望这有用!