1、persistent 用法
静态变量(persistent)
在函数中声明的变量,当函数调用完之后就会释放。如果想保留这个变量的值(供该函数下一次调用),可以把这个变量声明为静态变量。stateflow里面的变量和这个差不多
静态变量只能在function里声明,且只有这个function才能认识它(main函数也不行,被遮蔽无法使用)。静态变量不能在声明的时候赋值,x声明后是 [ ], 就是一个空的array。声明后需初始化,注意不能直接用persistent x=0;而是用isempty(x)判断x是否已经赋值。
2、代码演示
function y=persistentTest()
persistent x;
if isempty(x)
x=0;
end
x = x + 1;
y = x;
第一次运行这个脚本 y = 1,
第二次运行 y = 2;
....每次都会累加。
其值不会随着函数调用结束而消失。
其在simulink用法何在matlab脚本里面一样,都是在函数里面调用一次,比如
在这个matlab function里,循环里使用了静态变量,该整个模型的频率是25ms,也就是说,
对于整个系统,在每个25ms一次的模型中,每次循环的起始值,都是上次的保存值。
3、global 用法
全局变量(global)
用matlab写代码时 ,对于一般的局部变量,如果有多个.m文件,且之间存在相互调用关系;每个.m文件中的变量,都为局部变量,都有自己的工作区域/Workspace,当函数调用结束之后,其变量的声明周期也就结束了(记住,变量的声明周期随着子函数的结束而结束)
如果定义了全局变量/global,则需要注意几点:
1、在每一个子函数/.m文件中,都需要先声明,然后再进行操作;
2、global/全局变量,只占一个workspace,即在某一个地方修改,同时在变量存在的地方全部修改;
3、定义多个global/全局变量方式为: global var1 var2 var3 ……;
4、去掉/消除某一个或多个全局变量方式为:clear var1 var2 var3……;
1、代码演示
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)
2、结果
可以看到第一个函数plot_sin(2),其X = X=0:0.1:2*pi,其大小为1*63;
第二个函数plot_cos(2),其X=-pi:0,1:pi ,其值为1*7,分别为: -3.1416 -2.1416 -1.1416 -0.1416 1 2 3