Function 如何从单个.m matlab文件调用多个函数
我在一个m文件中编写了一个算法,在另一个.m文件中创建了几个函数。我想调用我在与主algorithm.m文件分离的文件中创建的几个函数。我知道如何将一个函数从一个文件调用到另一个文件,但在这里我想调用我在邮件算法文件的单独文件中创建的不同函数。我在这里搜索过,但我得到的答案没有帮助,也没有谈论我想要什么 下面是我所说内容的一个小例子:Function 如何从单个.m matlab文件调用多个函数,function,matlab,nested-function,Function,Matlab,Nested Function,我在一个m文件中编写了一个算法,在另一个.m文件中创建了几个函数。我想调用我在与主algorithm.m文件分离的文件中创建的几个函数。我知道如何将一个函数从一个文件调用到另一个文件,但在这里我想调用我在邮件算法文件的单独文件中创建的不同函数。我在这里搜索过,但我得到的答案没有帮助,也没有谈论我想要什么 下面是我所说内容的一个小例子: main algo file N = 30; x = -10 + 20rand(1,N) for j = 1 to N c = f1(x) % here i
main algo file
N = 30;
x = -10 + 20rand(1,N)
for j = 1 to N
c = f1(x) % here i need to call different functions from another file
end
具有多个变量的函数-这是一个单独的文件
Function perform
%% Function F1
f = f1(x)
statements
end
%% Function F2
f = f2(x)
statements
end
%% Function F3
f = f3(x)
statements
end
%% Function F4
f = f4(x)
statements
end
%% Function F5
f = f5(x)
statements
end
end Perform
我想在主algo.m文件中调用F1到F4。你怎么能做到这一点。此外,如果每次运行主algo.m文件时,它都会提示我选择要调用的F1到F4函数中的哪一个,并输入一个,并在dailog框中指示该函数,它会调用该特定函数,这会更好。你知道怎么做吗?州政府:
MATLAB®程序文件可以包含多个函数的代码。文件中的第一个函数(主函数)对其他文件中的函数可见,也可以从命令行调用它。文件中的其他函数称为本地函数。本地函数仅对同一文件中的其他函数可见
因此,实际上,您可以在这个m文件之外调用的唯一函数是第一个函数(在您的示例中是perform
),而函数f1
,…,f5
只能在m文件内部调用,因为它们是本地的
我的建议是坚持推荐的做法,在自己的m文件中定义每个函数。但是,如果您不想以大量的m文件结束,并且坚持在同一个m文件中实现所有函数,您可以通过向主函数传递附加参数来解决此问题,如下所示:
function f = perform(func, x);
switch(func)
case 'f1'
f = f1(x);
case 'f2'
f = f2(x);
case 'f3'
f = f3(x);
case 'f4'
f = f4(x);
case 'f5'
f = f5(x);
otherwise
error(['Unknown function ', func]);
end
%// ... next follows the implementation of f1 through f5
然后使用适当的函数名称字符串调用perform
,调用每个函数f1
,…,f5
。例如:
perform('f1', some_variable)
各国:
MATLAB®程序文件可以包含多个函数的代码。文件中的第一个函数(主函数)对其他文件中的函数可见,也可以从命令行调用它。文件中的其他函数称为本地函数。本地函数仅对同一文件中的其他函数可见
因此,实际上,您可以在这个m文件之外调用的唯一函数是第一个函数(在您的示例中是perform
),而函数f1
,…,f5
只能在m文件内部调用,因为它们是本地的
我的建议是坚持推荐的做法,在自己的m文件中定义每个函数。但是,如果您不想以大量的m文件结束,并且坚持在同一个m文件中实现所有函数,您可以通过向主函数传递附加参数来解决此问题,如下所示:
function f = perform(func, x);
switch(func)
case 'f1'
f = f1(x);
case 'f2'
f = f2(x);
case 'f3'
f = f3(x);
case 'f4'
f = f4(x);
case 'f5'
f = f5(x);
otherwise
error(['Unknown function ', func]);
end
%// ... next follows the implementation of f1 through f5
然后使用适当的函数名称字符串调用perform
,调用每个函数f1
,…,f5
。例如:
perform('f1', some_variable)
只是为了补充Eitan T的答案;在大多数C族语言(实际上还有很多其他语言)中,还有一个类似于“包含文件”的变通方法。它是这样工作的: 主算法文件:
function main
%// "include" the function definitions
f = declareFunctions;
%// Call desired function like so
for jj = 1:N
c1 = f{1}(x) %// call f1(x)
c2 = f{2}(x) %// call f2(x)
%// ...
cN = f{N}(x) %// call fN(x)
end
end
函数定义文件:
%// "Declare" all subfunctions in a caller's workspace
function fs = declareFunctions
fs = {...
@f1,...
@f2,...
@f3,...
%//... etc.
@fN
};
end
%// first function
function y = f1(x)
%// f1's code
end
%// Second function
function y = f2(x)
%// f2's code
end
%// ...
%// Nth function
function y = fN(x)
%// fN code
end
只是为了补充Eitan T的答案;在大多数C族语言(实际上还有很多其他语言)中,还有一个类似于“包含文件”的变通方法。它是这样工作的: 主算法文件:
function main
%// "include" the function definitions
f = declareFunctions;
%// Call desired function like so
for jj = 1:N
c1 = f{1}(x) %// call f1(x)
c2 = f{2}(x) %// call f2(x)
%// ...
cN = f{N}(x) %// call fN(x)
end
end
函数定义文件:
%// "Declare" all subfunctions in a caller's workspace
function fs = declareFunctions
fs = {...
@f1,...
@f2,...
@f3,...
%//... etc.
@fN
};
end
%// first function
function y = f1(x)
%// f1's code
end
%// Second function
function y = f2(x)
%// f2's code
end
%// ...
%// Nth function
function y = fN(x)
%// fN code
end
另一个解决方法是使用与原始函数相对应的
静态方法创建类
。然后,所有内容都被捆绑到一个.m
类文件中。另一个解决方法是使用与原始函数相对应的静态方法创建类。然后所有内容都被绑定到一个.m
类文件中。所以你基本上是说我不能从主algo文件调用函数执行文件中的函数,对吗?顺便说一句,我使用的是matlab版本R2008b。@kumba严格来说,不是。但我建议了一个解决方法。请看我的编辑。哦,主要算法和所有的几个F1到F5函数必须在一个文件中。e case语句和F1到F5函数必须在主算法之后还是之前实现?@kumba对不起,你把我弄糊涂了。我得到的印象是“主算法文件”与此文件不同,其中实现了perform
和f1
到f5
。现在你告诉我是同一个文件?在一个m文件中,您可以调用在其中实现的所有函数。它们实际上是不同的文件。我想你建议我把它们放在一个文件里,这就是为什么我要问。是的,主algo是一个different.m文件,包含f1到f5函数的perform也是另一个文件。所以你基本上是说我不能从主algo文件调用函数perform文件中的函数,对吗?顺便说一句,我使用的是matlab版本R2008b。@kumba严格来说,不是。但我建议了一个解决方法。请看我的编辑。哦,主要算法和所有的几个F1到F5函数必须在一个文件中。e case语句和F1到F5函数必须在主算法之后还是之前实现?@kumba对不起,你把我弄糊涂了。我得到的印象是“主算法文件”与此文件不同,其中实现了perform
和f1
到f5
。现在你告诉我是同一个文件?在一个m文件中,您可以调用在其中实现的所有函数。它们实际上是不同的文件。我以为你在建议我把它们放进去