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

wro*_*ame 17 matlab

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

我该怎么做呢?

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

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

Ego*_*gon 16

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

一个文件(`A.m'):

function results = A(parameters)
   % some code
Run Code Online (Sandbox Code Playgroud)

一个文件(`B.m'):

function results = B(parameters)
   % some code
Run Code Online (Sandbox Code Playgroud)

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

function results = B(parameters)
   % some code
   otherResults = A(otherParameters)
Run Code Online (Sandbox Code Playgroud)

如果您的情况类似于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
Run Code Online (Sandbox Code Playgroud)

无法直接访问CD从外部访问A.如果你需要使用外面的子功能 ,只需制作一个包含的文件DAD.m

function results = D(parameters)
    % code of function D
end
Run Code Online (Sandbox Code Playgroud)

并且最好从功能中删除相同的代码A.

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

最有可能的是,你不会有案例C,因为这是MATLAB中的一项高级功能.

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

文件内容E.m:

% code for script E
Run Code Online (Sandbox Code Playgroud)

文件内容F.m:

% some code
E;
Run Code Online (Sandbox Code Playgroud)

使用该代码,您可以E从内部脚本执行所有命令F.要注意的是E,并F会分享他们的所有变量,因此,如果你的东西开始你的脚本一样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
Run Code Online (Sandbox Code Playgroud)

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

A = ackermann(1,1)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 嗯,谢谢Egon,但我假设我需要以某种方式导入另一个`.m`文件来使用它,就像在C++和python以及其他语言中一样.我怎么做,因为`load am`给出了一个关于列数不同的错误?另外,我会更新问题以使其更清晰. (2认同)
  • @wrongusername事实证明你不需要做任何事情来将"load1.m"加载到Matlab中.如果function1.m和function2.m在同一个文件夹中,那么你可以从function2.m()里面调用function1() (2认同)

nim*_*odm 14

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

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

  • matlab中没有'import'语句.您只需确保myfunc.m文件位于MATLAB路径中.尝试添加路径('<path-to-directory-where-m-file-resides>')或者只使用GUI(我相信的文件菜单)添加它. (2认同)

Pho*_*iyx 12

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

addpath('[Path name of mat file]');
Run Code Online (Sandbox Code Playgroud)

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

which [function name]
Run Code Online (Sandbox Code Playgroud)

如果成功,则应列出刚刚添加的路径名.