我有一个写在一个m文件中的算法,我有几个我在另一个.m文件中创建的函数。我想在主算法.m文件的分离文件中调用我创建的这几个函数。我知道如何将一个函数从一个文件调用到另一个函数,但在这里我想调用我在邮件算法文件的单独文件中创建的不同函数。我在这里搜索过,但我得到的答案没有帮助,也没有谈论我想要的东西。
以下是我所谈论的一个小例子:
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
我想在主要算法.m文件中调用F1到F4。你怎么能这样做此外,如果每次运行主算法.m文件,它会更好,它会提示我选择要调用的F1到F4功能中的哪一个,我输入一个并在一个dailog框中指示该功能,它会调用该特定的功能。有关如何做到这一点的任何想法吗?
答案 0 :(得分:2)
MATLAB®程序文件可以包含多个函数的代码。文件中的第一个函数(主函数)对其他文件中的函数可见,或者您可以从命令行调用它。文件中的附加功能称为本地功能。本地功能仅对同一文件中的其他功能可见。
所以实际上,你可以在这个m文件之外调用的唯一函数是第一个函数(在你的例子中是perform
),而函数f1
,...,{{ 1}}只能在m文件中调用,因为它们是 local 。
我的建议是坚持推荐的做法,并在自己的m文件中定义每个功能。但是,如果您不希望以多个m文件结束,并且坚持在同一个m文件中实现所有函数,则可以通过将其他参数传递给main函数来解决此问题,如下所示:
f5
然后通过使用适当的函数名字符串调用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
来调用每个函数f1
,...,f5
。例如:
perform
答案 1 :(得分:1)
另一种解决方法是使用与您原始功能相对应的class
方法创建static
。然后将所有内容捆绑到一个.m
类文件中。
答案 2 :(得分:0)
只是为了补充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