m文件(即主函数 )中的第一个函数在调用m文件时被调用。 主函数不需要与m文件具有相同的名称,但为了清晰起见,它应该是这样 。 当function和文件名称不同时,必须使用文件名称来调用主函数。

m文件中的所有后续函数(称为本地函数 (或旧术语中的“子函数”))只能由该m文件中的主函数和其他本地函数调用。 其他m文件中的函数不能调用它们。

另外,还可以在其他函数中声明函数。 这些被称为嵌套函数 ,只能从嵌套函数中调用。 他们也可以访问嵌套函数中的variables,这使得它们非常有用,尽pipe稍微有些棘手。

更多的想法…

上面提到的正常函数范围映射行为有很多方法,例如Jonas的答案中提到的将函数句柄作为输出parameter passing。 但是,我不会build议把它作为一个这样的技巧的习惯,因为有可能有更好的select来组织你的文件。

例如,假设您在m文件Am具有一个主函数A以及本地函数D , E和F 现在我们假设在m文件Bm和Cm中分别有两个相关的函数B和C ,您也可以调用D , E和F 这里有一些选项:

把D , E和F分别放在各自的m文件中,允许其他函数调用它们。 缺点是这些函数的范围很大,并不局限于A , B和C ,但好处是这很简单。

用D , E和F创build一个defineMyFunctions m文件(就像Jonas的例子中的那样)作为本地函数和一个简单的返回函数句柄的主函数。 这允许你将D , E和F在同一个文件中,但是这些函数的作用域并没有做任何事情,因为任何可以调用defineMyFunctions函数都可以调用它们。 你也必须担心传递函数句柄作为参数,以确保你有他们需要他们的地方。

将D , E和F复制到Bm和Cm作为本地function。 这将它们的使用范围限制为A , B和C ,但由于在不同的地方有相同代码的三个副本,所以更新和维护代码是一场噩梦。

使用私人function ! 如果在同一个目录中有A , B和C ,则可以创build一个名为private的子目录,并在其中放置D , E和F ,每个都作为一个单独的m文件。 这限制了它们的范围,所以它们只能被上面的目录(即A , B和C )中的函数调用,并将它们放在同一个地方(但仍然是不同的m文件):

myDirectory/ Am Bm Cm private/ Dm Em Fm

所有这些都超出了你的问题的范围,可能比你需要的更详细,但是我认为可能会考虑组织你所有m文件这个更普遍的问题。 ;)

一般来说,你的问题的答案是否定的,你不能为每个文件定义多个外部可见的函数。 不过,您可以将函数句柄返回给本地函数,而且一个方便的方法是使它们成为结构体的字段。 这里是一个例子:

function funs = makefuns funs.fun1=@fun1; funs.fun2=@fun2; end function y=fun1(x) y=x; end function z=fun2 z=1; end

这里是如何使用它:

>> myfuns = makefuns; >> myfuns.fun1(5) ans = 5 >> myfuns.fun2() ans = 1

在单个文件中具有多个可单独访问的函数的唯一方法是使用面向对象编程来定义静态方法 。 你可以像myClass.static1() , myClass.static2()等那样访问函数。

OOPfunction从R2008a开始才正式得到支持,所以除非你想使用旧的,没有logging的OOP语法,否则你的答案是否定的,正如@gnovice所解释的那样 。

编辑

在外部可访问的文件中定义多个函数的另一种方法是创build一个返回多个函数句柄的函数 。 换句话说,你可以把你的定义函数称为[fun1,fun2,fun3]=defineMyFunctions ,之后你可以使用out1=fun1(inputs)等

我真的很喜欢SCFrench的回答 – 我想指出的是,它可以很容易地修改,以使用assignin函数直接导入到工作区的function。 (像这样做让我想起很多Python的“从ximport”的方式)

function message = makefuns assignin('base','fun1',@fun1); assignin('base','fun2',@fun2); message='Done importing functions to workspace'; end function y=fun1(x) y=x; end function z=fun2 z=1; end

然后这样使用:

>> makefuns ans = Done importing functions to workspace >> fun1(123) ans = 123 >> fun2() ans = 1

沿着SCFrench的答案,但更多的C#风格的旋转..

我会(经常)做一个包含多个静态方法的类。 例如:

classdef Statistics methods(Static) function val = MyMean(data) val = mean(data); end function val = MyStd(data) val = std(data); end end end

由于这些方法是静态的,所以你不需要实例化类。 你调用的function如下:

data = 1:10; mean = Statistics.MyMean(data); std = Statistics.MyStd(data);

我使用Octave在一个.m文件中定义了多个函数,然后使用.m文件中的命令,我需要使用该文件中的函数:

source("mycode.m");

不知道这是否可用于Matlab。

octave:8> help source 'source' is a built-in function -- Built-in Function: source (FILE) Parse and execute the contents of FILE. This is equivalent to executing commands from a script file, but without requiring the file to be named `FILE.m'.

你也可以把一个主文件中的函数和主函数一起看起来像这样:

function [varargout] = main( subfun, varargin ) [varargout{1:nargout}] = feval( subfun, varargin{:} ); % paste your subfunctions below .... function str=subfun1 str='hello'

然后调用subfun1将如下所示:str = main('subfun1')

从R2017b开始,这不是正式的可能。 相关文件指出:

程序文件可以包含多个function。 如果文件仅包含函数定义,则第一个函数是主函数,并且是MATLAB与文件名关联的函数。 遵循主函数或脚本代码的函数称为本地函数。 本地function只能在文件中使用。

但是,其他答案中提出的解决方法可以实现类似的function。

matlab 多文件编程,是否有可能在MATLAB中为每个文件定义多个函数,并从该文件外部访问它们?...相关推荐

  1. matlab平面问题编程,有限元平面矩形单元MATLAB程序设计.docx

    有限元平面矩形单元MATLAB程序设计 有限元平面矩形单元MATLAB程序设计摘要本论文主要研究内容是有限元平面矩形单元的基本原理和MATLAB软件的图形用户界面及函数编程的基本知识,并根据有限元平面 ...

  2. matlab用双精度编程,西安电子科技大学版matlab知识要点

    1. 下列关于MATLAB变量和运算说法不正确的是:(C) (A)每个变量代表一个矩阵,变量中的每个元素都看做复数 (B)MATLAB中所有的运算都对矩阵和复数有效 (C)MATLAB程序中使用的矩阵 ...

  3. matlab产生时间数组以月为单位_Matlab中处理日期与时间的函数

    Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示 ...

  4. 在计算机窗口中什么中的文件不能被删除,在Windows操作系统中,“回收站”可以恢复(1)上使用键删除的文件或文件夹。在“我的电脑”窗口中,...

    55题库为您解答: 正确答案:B 解析:本题考查Windows操作系统应用的基本知识.在Windows操作系统中,"回收站"可以恢复硬盘上使用Del>键删除的文件或文件夹.& ...

  5. itoa 头文件 linux,【整理】Linux内核中的atoi,itoa等函数

    对于普通应用程序,可以通过包含头文件stdlib.h和stdio.h,string.h等,然后调用需要的itoa(),atoi()等函数, 但是对于Linux内核来说,无法使用那些C库中的函数. 对此 ...

  6. 基于MATLAB的面向对象编程(4)——类文件

    文章目录 5 MATLAB的类文件的组织结构 5.1 如何使用其他文件夹中类的定义 5.2 类的定义和成员方法分开 5.3 类的局部函数 5.4 使用package文件夹管理类 5.5 类方法和函数重 ...

  7. c语言const常量用法,C++ const常量在多文件编程中的3种用法

    <C++多文件编程是什么>一节提到,多文件编程中代码的划分原则是:将变量.函数或者类的声明部分存放在 .h 文件,对应的实现部分放在 .cpp 文件中.值得一提得是,此规律适用于大部分场景 ...

  8. [Linux系统编程]_文件编程(一)

    嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一.系统调用 1.1 什么是系统调用 1.2 什么是库函数 1.3 将hello写入到文件1.txt流程 1.4 为什么要有缓冲区(补充) 1.5 ...

  9. Linux实验---多文件编程Makefile实验二

    多文件编程Makefile实验指导书 一 实验题目: 二 实验目的 三 实验内容 四 实验步骤 五 实验结果 六.总结 一 实验题目: 多文件编程Makefile 二 实验目的 (1) 熟悉Linux ...

最新文章

  1. 9000亿投资浪费在数字化转型,罪魁祸首在DevOps?
  2. 仅有算法远远不够:AI突破下一站,需要对硬件重新审视
  3. 2013首部著作封面抢先曝光
  4. 神经网络:多层网络与C++实现
  5. python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录
  6. 嵌入式软件设计第12次实验报告-140201235-陈宇
  7. android 高德地图设置不能旋转_你以为高德地图只是个地图,并不是?它其实还是个PPT制作神器...
  8. Java中abstract和interface的区别
  9. 数据结构:二叉搜索树(BST)全部基本操作
  10. pytorch和torchvision的安装
  11. Builder(生成器)
  12. PHP 将文字转化mp3文件
  13. c语言延时时间计算器,rc延时电路延时时间计算公式
  14. 生产质量分析,助力企业掌握影响质量的全量数据
  15. 4.8 单元格背景样式的设置 [原创Excel教程]
  16. C++模版与特化与偏特化
  17. 微信h5界面隐藏分享按钮
  18. PS学习笔记——拾色器和色彩空间
  19. docker内创建文件夹失败
  20. 【论文精读】Pairwise learning for medical image segmentation

热门文章

  1. 怎么解决python Non-ASCII character错误
  2. java 设置两个方法互斥_分享两个操作Java枚举的实用方法
  3. php 递归到空如何处理,php递归调用删除数组空值元素的方法
  4. java分页 jar_零基础学java之javaEE,分页
  5. java bufferarray_Java中的ByteBuffer array()方法
  6. 优秀网页设计:带给你灵感的联系页面设计
  7. 微信小程序 网络请求之设置合法域名
  8. axios请求超时,设置重新请求的完美解决方法
  9. HTML5 拖放、交换位置
  10. 弱监督学习下商品识别:CVPR 2018细粒度识别挑战赛获胜方案简介