Matlab的global变量-日志分享

http://blog.renren.com/share/317010482/14838700954

作者 :程新勇

这几天在用Matlab做一个仿真,写代码的时候使用了global类型的变量,写完之后仔细读了一下Matlab的Help,将自己的一些总结写出来。

大部分的东西都是从Matlab的Help中得到的,加入了自己的一些理解。

global variable(全局变量)

global

variable(全局变量),这个概念基本上在所有的主流编程语言中都有,但是在不同的编程语言中,他们的含义是不一样的。

以C语言为例,其全局变量是指定义(声明)在C文件的所有函数以外的变量,它们的作用域从其定义的地方开始,直到这个文件的结尾,在C语言中,全局变量是以文件为单位的(如果一个变量是全局变量,我们指的是这个变量在这个文件内是全局的,如果不用extern声明,那么在其他文件中,这个变量在那个文件中仍然是不可见的)。

其实,C语言中处理全局变量的方式是大部分编程语言的处理方式。

但是Matlab中处理全局变量有一种不同的方式。

Matlab中的workspace

在Matlab中,global声明是针对Workspace的,所以要搞清楚Matlab的global是怎样工作的,那么就要先说说Matlab的workspace。

Matlab中的代码可以位于三种不同的地方,第一种是直接在其command

line中写的代码,这些代码的输入参数来自于当前Workspace,而输出也进入当前Workspace;第二种代码是写在一个script中的,这些代码的输入输出对一个与当前script同名的workspace起作用;第三种代码写在一个function中,这种代码的输入输出对一个与当前的函数名相同的workspace起作用(nested

function除外)。

Matlab中有一个特殊的workspace叫做Base

workspace,上面说过,所有的script运行的时候都会有操作一个和其同名的workspace,实际上,所有的script对应的workspace中的内容都和Base

workspace是一样的,也就是说,所有的script都在操作一个workspace,那就是Base

workspace。当然,Base workspace还要受command line的控制因为command

line影响的是当前的workspace。

但是平时大家可能很少注意到有这么多的workspace,因为所有的这些workspace是只有在你使用Debug模式才能被看到的(所谓Debug模式,是指你在程序中加入了断点,程序跑到断点的位置会停下来)。如果你没有使用Debug模式,而是直接让程序直接跑,那么你的workspace

Stack将是灰色的:

如果你使用Debug模式,那么你的workspace stack将是一个下拉列表框:

上面说到的workspace当使用Debug模式的时候我们是可以看到的,而Matlab运行时还有一个workspace是怎么也不能直接看到的(可以通过命名看到),那就是global

workspace,

其详细介绍见下一节。

Matlab中的global variable

说完了Mtalab的workspace,那么就可以说Matlab中的global

variable了,在使用Matlab是,我们大部分时候会在函数中使用global,其实在Matlab中,global这个语句可以出现在上面所说的三种地方的任意一个地方,有了上面的workspace的介绍,要理解其所做的事情也是比较直接了。

当Matlab中出现了global语句时,Matlab会到global workspace中查找声明的变量是否已经在global

workspace中存在了,如果不存在,那么Matlab会在global

workspace中创建这个变量,并给其赋值空([]),并且在当前的workspace中创建一个也其同名的变量,这个变量实际上是global

workspace中的变量的link,其值会保持和global

workspace中的值一样;如果这个变量已经存在了,那么不会在global

workspace中重新创建这个变量,而是直接在当前的workspace中创建一个与其同名的变量,其也是global

workspace中的变量的link。

所以当我们更新一个global变量的时候,所有对其声明了global的workspace中都会同时更新。

clear global variable

因为global variable实际存在于global

workspace,而在各个使用了的workspace中有其link,所以使用clear时会表现得有点不同。

当我们使用

clear name

删除一个变量时,如果这个变量是global声明出来的,那么这条命令实际上只删除了当前workspace中的link,对global

workspace和其他workspace中的值没有影响。就算我们使用这条命令删除了所有workspace中的link,global

workspace中的值还是没有删除的。

如果我们真的要删除一个global variable,那么我们必须使用

clear global name

这样变量将从global workspace和所有其他的workspace中同时删除。

当然,我们也可以使用clear all,因为clear all是包含了clear

global的

matlab中全局变量的作用域,【转载】Matlab的global变量相关推荐

  1. matlab中的timer模块,[转载]Matlab中Timer的使用

    Matlab中Timer的使用 鉴于Matlab中缺乏多线程机制,使用Timer无疑是一个很重要的工具,Matlab中Timer是一个Java对象. (1)Timer 的定义 t=timer(); 设 ...

  2. matlab中图像映射实例,[转载]Matlab实现多种图像配准(转)

    本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影.仿射.投影.多项式.分段线性.局部加权平均配准的过程. 实验平台 X86 PC,Windo ...

  3. matlab中ss函数_[转载]matlab ss函数 tf函数

    ss 指定状态空间模型或者将线性时不变系统转成状态空间 语法 ss sys = ss(a,b,c,d) sys = ss(a,b,c,d,Ts) sys = ss(d) sys = ss(a,b,c, ...

  4. matlab中循环读入文件内容,[转载]Matlab利用load循环读入数据文件

    Contents 1.load循环读入.mat 2.1.fprintf写出数据txt 2.2.load循环读入txt % 利用load循环读取文件 % 把文件的文件名按一定的规律命名,假如:f001. ...

  5. matlab中怎么表示概率,[转载]matlab中的概率函数

    y=pdf(dist,x,p1,p2,-):返回以p1,p2,-为参数的m行n列dist分布概率函数(分布率或密度函数)在x处的值.dist是表示分布类型的字符串,可适用的分布类型类似于random. ...

  6. matlab中如何定义局部变量,转 MATLAB自定义函数及局部变量

    在开始学习MATLAB的时候并没有发现这个软件有着这么强大的功能,随着课题的不断深入,也在逼迫着自己不断的去应用新的公式并开发新的算法,这就牵涉 到了如何在MATLAB中自定义函数的问题,随之而来自然 ...

  7. m 文件 dll matlab 中调用_如何在matlab中调用python程序

    现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...

  8. matlab中m文件是什么,MATLAB中M文件的使用

    运行方法: 使用matlab的时候,可以在"Command Window"内直接书写matlab代码,也可以将代码保存到M文件中,然后运行该文件.使用matlab主界面菜单&quo ...

  9. matlab 如何axis,在matlab中axis是什么意思,matlab中axis的用法

    在matlab中axis是什么意思轴在matlab中是什么意思,matlab中的Axis是指在绘图中通常使用axis函数来设置坐标值的范围,在matlab的命令窗口中输入doc轴或help轴即可获得该 ...

  10. 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用

    导航:网站首页 > 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 相关问题: 匿名网友: 一 ...

最新文章

  1. 「AI不惑境」残差网络的前世今生与原理
  2. VS2010强大的一塌糊涂
  3. 一次 Druid 连接池泄露引发的血案!
  4. python 逗号作用 语句间_Python中逗号的三种作用
  5. 原来做的一个语义搜索软件的界面
  6. JAVA转为wasm/JavaScript,可以考虑CheerpJ
  7. 广州海珠php培训_海珠|海珠区第二实验小学教育集团成立两周年 初步实现集团内教师资源的“柔性流动”...
  8. 诺基亚n1平板电脑刷机教程_Z Launcher详细使用教程_诺基亚 N1_平板电脑新闻-中关村在线...
  9. Photoshop抠图大决战
  10. 极小化极大;292Nim 游戏;bitset容器;464我能赢吗;486预测赢家
  11. 龙之谷2服务器维护,龙之谷2今日上线!详细攻略带你玩转阿尔特里亚大陆
  12. php识别word语言,PHP读取word文档
  13. 图纸打印什么时候用蓝图_cad图如何打印成施工蓝图
  14. 复选框全部选中/全部取消
  15. 无法删除文件夹,文件,出现指定的文件名无效或太长,请指定另一文件名
  16. Clone all repos from a GitHub organization
  17. 【DP】西北大学集训队选拔赛(重现赛) B 饱和式救援
  18. 不安分的 android 开发者(小程序初尝试)
  19. 绝对的内幕!近些年各大IT公司售前薪水
  20. 【推荐算法论文阅读】BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Trans

热门文章

  1. flash 文件计算机课件,计算机软件及应用Flash.ppt
  2. 迅雷免费VIP账号获取器 每天更新帐号 易语言编写
  3. 无损音乐播放器,有软件与硬件之分
  4. 基于Unity的软光栅实现(1):框架搭建和矩阵构造
  5. 数据库-SQL语句创建与修改
  6. 希捷硬盘固件指令要领
  7. 谷歌浏览器导入插件教程
  8. 高级终端termux下载不了Python_基于Termux打造Android手机渗透工具
  9. MongoDB可视化管理工具-Robo 3T
  10. 菜鸟和老鸟都无法避免的问题——未将对象引用设置到对象的实例