打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Matlab中的静态(持久)变量和全局变量

1、静态变量(persistent)

在函数中声明的变量,当函数调用完之后就会释放。如果想保留这个变量的值(供该函数下一次调用),可以把这个变量声明为静态变量。静态变量不能在声明的时候赋值,而且只能在function里声明,且只有这个function才能认识它(main函数也不行)。x声明后是[],就是一个空的array。声明后需初始化,注意不能直接用persistent x=2;而是用isempty(x)判断x是否已经赋值。如:

function y=test()
persistent x;
if isempty(x)
x=0;
end

 

matlab可以在function里声明静态变量,方法:
persistent x;
注意它只能在function里声明,且只有这个function才能认识它。x声明后是[],就是一个空的array。
声明后需初始化,注意不能直接用persistent x=2;而是用isempty(x)判断x是否已经赋值。如:
function y=test()
persistent a;
if isempty(a)
a=0;
end
a=a+1;
y=a;
之后调用一次y=test;结果y=1,再调用一次y=test;结果y=2。就是说a记录了每次调用function后的结果。

2、全局变量(global)

如果想让某个函数中定义的变量能够被其他函数调用,需要用到全局变量。注意,在这两个函数中都要用global修饰这个变量。如:

function t1
global x;
x=0;

function t2
global x;
y=x

matlab中global的用法总结:
  各个函数之间以及command window(base workspace)中内存空间都是独立的,不能互相访问。
  初始化的时候声明一次,用的时候再声明一次【在一个内存空间里声明global,在另一个内存空间里使用这个global的时候需要再次声明 global,当然,各内存空间里声明一次就可以了】。
  如果只是在某个内存空间中使用一下,而担心在这个内存空间里的变量影响了全局的变量,那么'clear 变量名' 就好了。

 有条件性地执行语句

语法

if expression 
    statements 
end

描述

MATLAB 计算表达式,如果产生一个逻辑真或者非零结果,然后就执行一条或者多条 MATLAB 命令语句。

当有嵌套if时,每一个if必须和一个相应的end匹配。

当你在if语句里面嵌套使用else if或者else时,一般的格式如下:

if expression1 
    statements1 
elseif expression2 
    statements2 
else 
    statements3 
end

参数

1、expression

expression参数一个 MATLAB表达式,通常由一些变量或者联合相关操作的更小的表达式(例如:count < limit)或者逻辑函数(例如:isreal(A))组成。简单表达式可以结合一些逻辑运算符(&,|,~)变成复合表达式,例如下面的组合表达式从左到右根据操作符优先级进行计算。

(count < limit) & ((height - offset) >= 0)

2、statements

statements参数是一条或者多条仅仅当expression为true或者非零时而执行的 MATLAB 语句。

备注

非标量表达式:

如果需要计算的表达式产生一个非标量的值,那么只有当该值的每一个元素都为true或者非零时,才认为该表达式为true。例如,对于语句if(A<B),只有当A矩阵的每一个元素都小于B矩阵对应元素时,才认为此表达式为true。

计算部分表达式值:

在if或者while语句中,并不是所有情况都要计算整个表达式的值,在某些情况下,只需计算部分值就可以判断真假,这样往往是更优的。例如:

在下面表达式1中,如果A为零,那么整个表达式的值为false,而不管B的值如何,这样就没必要计算B的值,而MATLAB也不会去计算它。同样,在表达式2中,如果A为非零,那么整个表达式为true,而不管B的值如何。这些时候都不需要计算表达式后面部分的值。

1)   if (A & B)               2)   if (A | B)

如果前半部分的值能评估整个表达式状态,你可以通过这个属性来优化程序。例如:

while (b ~= 0) & (a/b > 18.5) 
if exist('myfun.m') & (myfun(x) >= y) 
if iscell(A) & all(cellfun('isreal', A))


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++编码规范之全局变量(Global Variables)
.m文件的一些规则 | matlab基础(5000 字)
Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别
在Matlab一个m文件中定义多个函数直接运行的方法
python中的全局变量(global关键字)
C语言基础知识梳理总结(经典)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服