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

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单的Gradle Web应用程序

Gradle通过“ war”和“ jetty”插件轻松支持Java Web应用程序。 本教程将向您展示如何快速创建一个简单的Java Servlet Web应用程序。 我们的基本项目结构将是: basic-websrcmainjavacomcodetutrHelloWorldServlet.javawebappWEB-INFweb.xml首先,创建一…

SD/MMC相关寄存器的介绍

1.SD卡内部架构 在熟悉SD/MMC相关寄存器之前,我们先来看看SD卡的内部架构是怎么样的,如下图所示: 2.SD/MMC相关寄存器的介绍 从上图中总结出:SD卡内部有7个寄存器. 一、OCR,CID,CSD和SCR寄存器保存卡的配置信息; 二、RCA寄存器保存…

【模板】OI常用模板(待补充)

//PS:最近修改日期:2017-11-07  20:41:44 首先感觉这种模板类的东西写了还是很有意义的,毕竟时不时的可以拿出来借鉴一下。 现在因为刚开始写这一类的东西,所以说还不是很详细,若有读者感觉可以补充,欢迎…

form中action属性后面?传递参数 获取不到

1 $p_id $_REQUEST[p_id]; 2 3 echo "<h1>您将更新商品编号为<span>$p_id</span>的商品信息 <a hreflistproduct.php>查看所有</a></h1> 4 <form actionupdateproduct.do.php?p_id$p_id methodget> 5 商品名称&#xff…

apche 禁止运行php,学习猿地-apache如何禁止执行php

apache禁止执行php的方法&#xff1a;首先新建一个“.htaccess”文件&#xff1b;然后复制代码内容“Order allow,deny”到“.htaccess”文件中&#xff1b;最后将该文件直接放到网站根目录里即可。apache禁止执行php的方法&#xff1a;第一种禁止上传目录运行php的方法如果你用…

Apache Camel 2.11发布

上周Apache Camel 2.11发布了。 这篇博客文章总结了最引人注目的新功能和改进。 有关详细说明&#xff0c;请参见Camel 2.11发行说明 。 1&#xff09;新组件 与往常一样&#xff0c;每个新发行版都包含许多新组件&#xff0c;这些组件由我们庞大的用户群贡献。 谢谢你们。 例…

linux分区满了,如何进行扩容

转自&#xff1a;https://blog.csdn.net/valage/article/details/73332147 图片中可以看到挂载点“/”的利用率移到100%&#xff0c;空间不够&#xff0c;所以要对其进行分区。 1. 先进入虚拟机设置里增大磁盘空间 注意&#xff1a;将25改成50&#xff0c;以扩大空间。这里…

RDA DEBUG

DEBUG寄存器&#xff1a;word 0xa0000010 word 0xa0000010 1  //debug开 word 0xa0000010 0  //debug关 当然也可以按模块打开/关闭debug信息&#xff0c;如 DBGCFG_KMF/DBGCFG_UMF/DBGCFG_MENU/DBGCFG_TUNER模块等。 所以大家在使用过程中要按源文件所在的模块加打印信息&…

DIV CSS布局-固定页面开度布局

DIV CSS布局中主要CSS属性介绍&#xff1a; Float: Float属性是DIV CSS布局中最基本也是最常用的属性&#xff0c;用于实现多列功能&#xff0c;我们知道<div>标签默认一行只能显示一个&#xff0c;而使用Float属性可以实现一行显示多个div的功能&#xff0c;最直接解释…

php获取网页js中的json,从php获取json数据使用js读取显示到网页笔记

//json与数组转换$array array("username" > "hellojson","age" > 23,"sex">"M");//定义php数组$resjson_encode($array);//var_dump($res);echo $res;//将结果输出到页面?>HTML代码$(function(){$(document)…

BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)

题目链接 类似求树的直径&#xff0c;可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链、次长链&#xff0c;用每个点子节点不同子树的 max{最长链}max{次长链} 更新答案。(不需要存次长链&#xff0c;求解过程中先更新ans&#xff0c;然后再更新最长链即可) 设…

Spring Java配置

我发现许多我认识的Spring开发人员仍然不了解或使用Spring Java Configuration&#xff08;aka JavaConfig&#xff09;。 Spring 3.0引入了此功能&#xff0c;该功能使Spring可以完全用Java进行配置-不再需要XML&#xff01; 我真的很喜欢使用JavaConfig&#xff0c;因为&…

纯 CSS 实现波浪效果!

一直以来&#xff0c;使用纯 CSS 实现波浪效果都是十分困难的。 因为实现波浪的曲线需要借助贝塞尔曲线。 而使用纯 CSS 的方式&#xff0c;实现贝塞尔曲线&#xff0c;额&#xff0c;暂时是没有很好的方法。 当然&#xff0c;借助其他力量&#xff08;SVG、CANVAS&#xff09…

Mysql 数据库(三)

一、数值类型 1、整数类型&#xff1a;应用场景&#xff0c;存放年龄&#xff0c;等级&#xff0c;id或者各种号码等等 TINYINT&#xff1a;1个字节存放&#xff0c;有符号范围&#xff1a;-128到127&#xff0c;没有符号范围&#xff1a;0&#xff0c;255 。 SMALLINT&#xf…

Thonny -- 简洁的 python 轻量级 IDE

Thonny目前是 树莓派 上 默认的 Python 开发环境。 该 IDE 是 Institute of Computer Science of University of Tartu &#xff08;爱沙尼亚 的 塔尔图大学 计算机科学院&#xff09;开发的。 最近 yvivid 也体验了一下 Thonny 的开发环境&#xff0c;网站地址为 http://thonn…

如何造成内存泄漏

这将是一个相当邪恶的职位-当您确实希望使某人的生活陷入困境时&#xff0c;您将在谷歌上搜索。 在Java开发领域&#xff0c;内存泄漏只是您在这种情况下会引入的错误类型。 为您的受害者保证几天甚至几周的办公室不眠之夜。 我们将在这篇文章中描述两次泄漏。 两者都很容易理…

二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现

有限元法求解二维 Poisson 方程的 MATLAB 实现 陈 莲a &#xff0c;郭元辉b &#xff0c;邹叶童a ( 西华师范大学 a&#xff0e; 数学与信息学院; b&#xff0e; 教育信息技术中心&#xff0c;四川南充 6437009) 摘 要: 文章讨论了圆形区域上的三角形单元剖分、有限元空间&…

javascript 之异常处理try catch finally--05

语法结构 try catch finally是ECMAScript-262 第三版提供异常处理机制的标准&#xff0c;语法结构如下&#xff1a; 1 try{ 2 //可能会发生的错误代码 3 } 4 catch(error){ 5 //错误处理 6 }finally{ 7 //无论是否有异常都会执行 8 } 语法与大多数语言一样 如java .net&#x…

CSS实现文本周围插入符号

CSS实现文本周围插入符号的方案 本文要讨论的是如何在文本的周围插入图标&#xff0c;怎么样控制它们之间的位置关系&#xff0c;通过HTML结构合理性与CSS属性的使用来比较不同方案所实现效果的优缺点。 常见设计稿要求 在文本前、后、上、下插入图标、线条、三角形、圆形插…

mysql动态sql是什么,mysql中动态sql的一次实际应用

一、前言本次实际应用中&#xff0c;使用到了如下几个要点&#xff1a;mysql的动态建表;mysql的多表插入;mysql的多表更新;mysql的多表删除;二、使用场景2.1 动态建表要求建立多个表&#xff0c;例如电压、电流等表&#xff0c;这些表的字段是完全一样的&#xff0c;只有表名不…