使用Matlab导入另一个.m文件

时间:2011-06-11 08:55:29

标签: matlab

我对Matlab很新。我在.m文件中定义了一个函数,我想在另一个.m文件中的.m文件中使用该函数,我想从命令窗口运行最后一个.m文件的内容。

我应该如何完成这项工作?

编辑 - 为了澄清,我在a中有一个函数a.m,在b.m内部使用函数a的脚本a.m。我想从命令窗口在b.m内运行此脚本,但我不知道该怎么做。 (作为旁注,如果需要,我可以将b.m中的脚本完全转换为函数)

编辑 - 现在我只需要知道如何导入/加载matlab文件就是这样!!!

3 个答案:

答案 0 :(得分:14)

如果我理解你的情况,你会有这样的事情:

文件(`A.m'):

function results = A(parameters)
   % some code

文件(`B.m'):

function results = B(parameters)
   % some code

你想在A里面使用函数B,你可以从函数B中调用该函数:

function results = B(parameters)
   % some code
   otherResults = A(otherParameters)

如果您的情况与nimrodm描述的情况类似,那么您的A.m文件就像:

 function results = A(paramters)
    % some code
    function results = C(parameters)
        % code of function C
    end
 end
    function results = D(parameters)
        % code of function D
    end

无法直接从C外部访问DA。如果您需要在D之外使用subfunction A,请创建一个包含

的文件D.m
function results = D(parameters)
    % code of function D
end

最好从函数A中删除相同的代码。

对于nested function C,在一些(但不是全部)情况下也可以这样做,因为嵌套函数也可以访问函数A的变量。在MATLAB的最新版本中(我猜R2010b或R2011a),编辑器突出显示了函数和teal中嵌套函数之间共享的变量。如果您未在函数A内使用函数C的变量,请执行与函数D相同的操作。如果这样做,请将这些变量作为参数和/或返回值传递,并调整其余代码以反映这一点。测试您的代码,然后执行与D相同的操作。

最有可能的是,您不会遇到案例C,因为这是MATLAB中的高级功能。

但是,如果您不使用MATLAB函数,则会出现另一种情况,但MATLAB脚本位于不同的文件中。您可以调用脚本(来自命令行和其他函数或脚本,只需通过其(文件)名称。

文件E.m的内容:

% code for script E

文件F.m的内容:

% some code
E;

使用该代码,您可以从脚本E内执行F中的所有命令。请注意EF将共享所有变量,因此如果您使用clear all; close all; clc;之类的内容开始编写脚本,则无法将F中的任何变量传递到E (并且在调用F之前,您将失去计算E的所有结果。

在大多数情况下,最好使用函数而不是脚本,这也是解决这种情况的方法:将所有内容组合成具有合适参数和返回值的函数。

修改: 在你'改变'你的问题后,这很容易。

让我们考虑你有这个功能,我将使用不同的名称,因为这更直观易懂。您希望从脚本ackermann调用文件ackermann.m中的函数bigScript.m

文件ackermann.m包含Ackermann-Péter函数(作为示例):

function result = ackermann(m,n)
  if m == 0
      result = n + 1;
  elseif m > 0
      if n == 0
          result = ackermann(m-1,1);
      elseif n > 0
          result = ackermann(m-1,ackermann(m,n-1));
      else
          error('n has to be positive');
      end
  else
      error('m has to be positive');
  end
end

从大脚本内部,您可以按如下方式调用函数ackermann(如果您想要m = 1且n = 1):

A = ackermann(1,1)

就是这么简单,不需要加载任何东西。但是你需要记住让函数“在你的路径中可用”,最简单的方法就是将脚本和函数文件保存在同一个目录中。

无论如何,我觉得你是一个初学MATLAB用户:如果你不知道函数是做什么的,只需在命令窗口输入help functionname(当然用函数名替换)。您会注意到函数load用于加载数据文件,而不是m文件(因为路径中的m文件是自动使用的。)

答案 1 :(得分:13)

原则上,MATLAB主张每.m个文件使用一个函数。您可以从另一个.m文件和MATLAB命令行调用此类函数。

您可以在一个.m文件中定义多个函数,但只能从其他.m文件或命令行访问第一个(或“最外层”)函数。其他函数被视为“辅助”函数,只能在此特定.m文件中调用。

答案 2 :(得分:11)

对于其他搜索此问题的人,就像我一样,只需输入:

addpath('[Path name of mat file]');

这将告诉Matlab如何找到该功能。要验证,只需输入:

which [function name]

如果成功,它应列出您刚刚添加的路径名。