一、global

官方解释:

 help globalglobal Define global variable.global X Y Z defines X, Y, and Z as global in scope.Ordinarily, each MATLAB function has itsown local variables, which are separate from those of other functions,and from those of the base workspace.  However, if several functions, and possibly the base workspace, all declare a particular name as global, then they all share a single copy of that variable.  Any assignment to that variable, in any function, is available to all the other functions declaring it global.If the global variable doesn't exist the first time you issuethe global statement, it will be initialized to the empty matrix.If a variable with the same name as the global variable already existsin the current workspace, MATLAB issues a warning and changes thevalue of that variable to match the global.Stylistically, global variables often have long names with allcapital letters, but this is not required.

1、简单说:

用matlab写代码时,如果有多个.m文件,且之间存在相互调用关系;每个.m文件中的变量,都为局部变量,都有自己的工作区域/Workspace,当函数调用结束之后,其变量的声明周期也就结束了(记住,变量的声明周期随着子函数的结束而结束);

如果定义了全局变量/global,则需要注意几点:

1、在每一个子函数/.m文件中,都需要先声明,然后再进行操作;

2、global/全局变量,只占一个workspace,即在某一个地方修改,同时在变量存在的地方全部修改;

3、定义多个global/全局变量方式为: global var1 var2 var3 ……;

4、去掉/消除某一个或多个全局变量方式为:clear var1 var2 var3……;

2、优缺点:

(1) 优点

传递大数据的参数:
      如果通过函数传参数的方式的话,系统会浪费过多的时间在复制数据的时间上,如果采用global的方式共享数据的话代码的效率会大大提高

过多的常量需要传递
       如果每个量都作为函数函数的参数传递的话,代码参数列表就很长,如果采用global的话代码的可读性提高,函数调用也方便。

(2) 缺点

在多数情况下,使用全局变量不是值得推荐的做法,因为会导致模块之间存在强耦合,并且由于各模块的访问顺序问题,可能导致一些难以预料的情况。

示例:

function global_plot()
global X
X=0:0.1:2*pi;
plot_sin(2)
plot_cos(2)
function plot_sin(a)
global X
y=a*sin(X);
figure
plot(X,y)function plot_cos(a)
global X   %使用全局变量X时,也要用global定义
X=-pi:0,1:pi; %全局变量被修改
y=a*cos(X);
figure
plot(X,y)

结果;

二、persistent 永久变量

1、解释: 局部静态变量

和global变量很像,和global不同的是,persistent只被定义persistent的函数所知晓/访问,其他函数无法访问或改变它的值。当m文件被从内存中清除或m文件改变时,persistent变量才会被清除。

如果persistent变量中第一次使用时未进行初始化赋值,则初始化为空矩阵。

如果workspace中已经有同名变量,则声明persistent变量会出错。

示例:

% 脚本文件: test_runstats.m
%
% 程序目的:
% 计算输入一系列数的平均值和方差,(是随时保存值的)
%
% 版本记录:
% 日期                      负责人       版本描述
% ====                     ========== =====================
% 2015-10-9 17:43:33        王茂春         源代码
%
% 定义变量:
% array --输入数组
% ave --平均值
% ii --循环索引
% nvals --输入数的数量
% std --方差
% 首先清零初始化
[ave std] = runstats('reset');
% 确定输入数的数量
nvals = input('输入这一组总数: ');
% 获取输入值
for ii = 1:nvals
% 提示输入(这种方法:分成两个语句的学习下。。。)
string = ['输入数值 ' int2str(ii) ': '];
x = input(string);% 调用函数求解(输出变量是多个)
[ave std] = runstats(x);
% 显示运算结果
fprintf('平均值 = %8.4f; 标准差 = %8.4f\n',ave, std);
end

子函数:

function [ave, std] = runstats(x)
%RUNSTATS 随时计算一组数的平均值和方差
% 输入数x必须一次一个,当输入字符串'reset'时,持久变量清零% 定义输入输出变量
% ave    --平均值
% msg    --错误信息
% n      --一组数的个数
% std    --方差
% sum_x  --一组数的的和
% sum_x2 --一组数的平方和
% x       --输入值
% 版本记录:
% 日期                      负责人       版本描述
% ====                     ========== =====================
% 2015-10-9 17:43:33        王茂春         源代码% 持久变量声明(重要)
persistent n     % 输入数的个数
persistent sum_x % 输入数的和
persistent sum_x2 % 输入数的平方和% 检查输入数的合法性
msg = nargchk(1,1,nargin); %最少1个参数,最多一个参数,检查输入变量
error(msg);
% 如果输入时'reset',重置
if x == 'reset'
n = 0;
sum_x = 0;
sum_x2 = 0;
else
n = n + 1;
sum_x = sum_x + x;
sum_x2 = sum_x2 + x^2;
end
% 计算平均值和方差
if n == 0     %0输入
ave = 0;
std = 0;
elseif n == 1  %1输入
ave = sum_x;
std = 0;
else
ave = sum_x / n;
std = sqrt((n*sum_x2 - sum_x^2) / (n*(n - 1)));
end

示例:

参考

matlab 全局变量的使用举例

Matlab中的保留字:global和persistent

matlab 利用persistent关键字 存储持久变量

matlab 编程之全局变量(global)和永久变量(persistent)相关推荐

  1. MATLAB学习笔记3:MATLAB编程基础(前半)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  2. python3精要(19)-全局变量global和工厂函数,lambda,变量作用范围,nonlocal

    一.全局变量global语句: 1.全局变量是位于模块文件的内部顶层的变量名 2.全局变量是在函数内被赋值的话,必须通过global声明 3.全局变量名在函数内部不经营声明也可被引用 二.工厂函数 d ...

  3. java 静态全局变量_静态变量static和全局变量global

    静态变量static , 全局变量global 静态变量 在java也叫类变量从名字可以看出它是属于某个类的而不是类的实例.它的关键字是static存储在静态存储区,当程序执行,类的代码被加载到内存, ...

  4. 利用Matlab编程实现对NetCDF数据针对某一坐标按时间提取风、流、水蒸气等变量信息

    一.NetCDF数据介绍 NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmosph ...

  5. 关于Matlab编程的思考(待续)

    Matlab编程的规范化思考 1.并行化 2.释放内存 3.需要调参的变量太多,可考虑将变量都放到一个结构体里面. 4.find(y),就是要找到y中那些非零项的指引 5.代码运行出现问题的时候,在命 ...

  6. matlab思考,关于Matlab编程的思考(待续)

    Matlab编程的规范化思考 1.并行化 2.释放内存 3.需要调参的变量太多,可考虑将变量都放到一个结构体里面. 4.find(y),就是要找到y中那些非零项的指引 5.代码运行出现问题的时候,在命 ...

  7. 线性正切制导 matlab编程实现,数学建模之MATLAB编程

    EverydayOneCat ✖️N 「Sushi shop!」 知识点 1.下载 链接:https://pan.baidu.com/s/1DbfysOOwIoSvt8HQUw0jhw 提取码:75m ...

  8. MATLAB 编程风格指南

    MATLAB 编程风格指南      --Richard  Johnson  Version 1.5,Oct.  2002  版权: Datatool 所有  翻译:Genial @ USTC &qu ...

  9. OC高级编程——深入block,如何捕获变量,如何存储在堆上

    OC高级编程--深入block,如何捕获变量,如何存储在堆上 首先先看几道block相关的题目 这是一篇比较长的  博文 ,前部分是block的测试题目,中间是block的语法.特性,block讲解b ...

最新文章

  1. java内存溢出的情况解决方法
  2. python汽车票票系统_长途客运售票系统
  3. HTML页面中点击按钮关闭页面几种方式与取消
  4. Imagemagick常用指令
  5. 据库专家Michael Stonebraker获得2014年图灵奖
  6. 额外篇| Python制作词云
  7. PHP登录状态判定的思路
  8. linux unset path,linux查看和修改PATH环境变量的方法
  9. ASP.NET Request.UrlReferrer 问题
  10. php 数组元素往后移动,php 二维数组 元素移动
  11. 太傻了!下次二面再回答不好“秒杀系统“设计原理,我就捶死自己...
  12. bootstart讲义,不过忘了是哪个老师的了
  13. 存储过程系列三:根据表别名方式distinct去重插入
  14. Mac卸载Anaconda
  15. TianMao订单数据分析
  16. 【NYNU 1151】轻羽飞扬 数塔DP
  17. python爬取腾讯新闻_Python采集腾讯新闻实例
  18. 使用Python将图片变成铅笔素描
  19. java实现阿拉伯数字转人民币大写(精确到分)
  20. 关键字、主关键字、候选关键字

热门文章

  1. 探讨未来网站发展趋势
  2. unity 利用NavMeshAgent2D实现怪物追人
  3. 组合数学拉丁方是什么
  4. Aplayer搭配Metingjs音乐插件的使用
  5. 适配手机VR眼镜的VR视频播放器种类大全
  6. p2p 了解资源整合
  7. 概率论考点总结类型3 概率不等式
  8. android闹钟倒计时_如何在Android上使用闹钟,计时器和秒表
  9. 少儿编程软件python_Python编程软件下载
  10. 应用回归分析之岭回归(Ridge Regression,RR)