MATLAB:包含我所有功能的脚本

时间:2014-12-16 08:15:55

标签: matlab

也许这是一个基本问题但是我走了。我希望有一个.m,其中包含其他脚本和函数可以访问的所有函数。

我尝试用一​​个包含所有函数的脚本,并在其他函数代码中调用它。

我得到了错误。你能解释一下我该如何解决这个问题?

我尝试这个,这没有给我任何错误,做了我想做的事,仍然,这是一个好方法吗?有什么建议吗?

function PruebasLlamaFuncion
    funcionFEM=@PruebasTodasFunciones;
    a=funcionFEM('OVERPOWER',1,5)
    b=funcionFEM('POWEROVERWELMING',2)
end

...


  function a=f(nombre,varargin)
     f=str2func(nombre)
     a=f(varargin{1:end});

  end
  function d=OVERPOWER(J,c)

     d=J*c;

  end

  function e=POWEROVERWELMING(J)
     e=J;
  end

2 个答案:

答案 0 :(得分:0)

我认为你误会了什么。脚本用于按顺序调用一系列函数/其他脚本。如果您只想在其他代码中访问您的函数,您只需要确保它们在路径上。你永远不需要一个“包含所有功能的脚本”。您可能会想到local functions,但这些与您想要的完全相反(它们不能从定义它们的函数外部或同一文件中的其他本地函数调用)。

e.g。如果你的路径上有Function1Function2,你可以写一个这样的脚本,或许作为如何使用这两个函数的演示:

a = 0;
b = 1;
c = 2;
d = 'Unicorns';
Result=Function1(a,b,c); 
Result2=Function2(b,d);

它不会也不应该包含任何函数定义。如果您的脚本找不到这些函数,请使用addpathsee docs)将这些函数文件所在的文件夹放入您的路径中。 m文件应该具有相同的名称,例如以下内容需要放在名为myfunc.m

的文件中
function result = myfunc(a,b,c)

即使该路径不在您的路径上,也可以调用工作目录中的函数。

答案 1 :(得分:0)

功能放置

与许多其他语言不同,Matlab允许单个文件只包含一个对系统其余部分可见的主要功能。主要功能是第一个功能。 (Documentation

在主函数体之后定义的任何函数都称为local functions。这些函数每个都创建自己独立的工作区(范围),并且可以相互调用,当然也可以由主函数调用。

在主函数体中 中定义的任何函数都称为nested functions。这些函数具有自己的工作空间,但也能够访问和更改其父函数under certain conditions的变量。同一嵌套级别的嵌套函数可以相互调用和本地函数,但本地函数不能调用嵌套函数,因为它们超出了范围。


变通方法

根据您的使用方式,您可以选择多种选项。 如果有太多选择但希望详尽无遗的风险,我会把清单从我先做的事情到我最后做的事情。 对于大多数事情,我建议1或2。 其他选项更多用于创建库/ API,但我将它们包含在内以显示可以完成的内容。

  1. 在Matlab路径或当前工作目录中的单独m文件中定义Function1和Function2,以便正常调用它们。

  2. 将您工作的主体(调用函数的主体)包装在函数本身中,并将其他函数定义为本地函数或嵌套函数。例如:

  3. function output = main(a,b,c)
      Result=Function1(a,b,c); 
      Result2=Function2(b,d);
      ...
    
      % You can define Function1 and Function2 here for nested functions
    end
      % Or you can define Function1 and Function2 here for local functions
    
    1. 你可以获得更多的花哨,并有一个函数返回本地或嵌套函数的函数句柄(指针),然后使用(在示例中)结构调用另一个脚本中的函数:
    2. function Functions = GetFunctions()
        Functions.F1 = @(a,b,c) Function1(a,b,c); 
        Functions.F2 = @(a,b)   Function2(a,b); 
      
        % You can define Function1 and Function2 here for nested functions
      end
        % Or you can define Function1 and Function2 here for local functions
      
      1. 如果您有R2013b or above,您可以使用localfunctions函数执行与上面相同的操作,为所有本地函数创建句柄的单元格数组(在这种情况下,需要定义主要功能体外。)
      2. function Functions = GetFunctions()
          Functions = localfunctions(); % R2013b+ only
        end
          % Define Function1 and Function2 here for local functions
        
        1. 您还可以使用静态函数创建一个类:
        2. classdef Functions
            methods(Static)
              % Define Function1 and Function2 here and call them just like the struct above.
            end
          end
          

          我希望这有意义并希望有所帮助。