晚上一段时间纠结了一个nc的问题,有关matlab里S函数中的global全局变量的使用问题,刚开始我很怀疑它的意义何在,使用方法如下:
比如,我现在想在命令窗口中改变S函数里这样的全局变量,首先在S函数中相应位置(比如在mdloutputs中用到了该变量,即定义下global variable)要先定义了一个global全局变量,然后在命令窗口中给这样一个变量赋予特定值之后,必须也应声明它为global全局变量,这样才能够让两者对接一致,实际上是系统里的一个全局变量。OK!
在使用MATLAB时,有时需要在函数M文件中访问基本工作空间中的变量,或者把函数M文件中的数据保存到基本工作空间中。利用MATLAB提供的两个函数:evalin和assignin就可以实现。
evalin:在函数M文件中访问工作空间中的变量
[a1, a2, ...] = evalin(ws, expression);
在工作空间ws中执行expression命令或表达式,并将执行的结果保存到变量a1、a2、...中。
函数的调用方法如下所示:
v = evalin('base', 'var'); %把基本工作空间中的变量var的值赋给局部变量v。
v = evalin('base', 'who'); %查询基本工作空间中的变量名称,并把变量名称保存到v数组中
举例:调用基本工作空间中的变量来在界面上绘制图形。
复制内容到剪贴板
代码:
首先在基本工作空间中产生x和y变量: >> x=0:pi/50:2*pi; >>y=sin(x); 然后在函数M文件中调用这些数据来在界面上绘制曲线: function myfunc hf=figure('units','normalized','name','evalin example','position',[0.4 0.3 0.4 0.3]); haxes=axes('parent',hf,'units','normalized','position',[0.1 0.1 0.8 0.8]); %取得基本工作空间中的变量的值,保存到xdata和ydata中 xdata=evalin('base','x'); ydata=evalin('base','y'); % 在指定的坐标轴中绘图 axes(haxes); plot(xdata,ydata);
assignin:将函数M文件中的变量的值传给指定的工作空间中的变量
assignin(ws, 'var', val);
将变量val的值赋给工作空间ws中的变量var,如果变量var在工作空间中不存在,则创建该变量。
例如:
在上述myfunc函数的末尾添加如下语句,即可以在基本工作空间中产生新的变量valueX和valueY,并把函数中的xdata和ydata变量的值赋给valueX和valueY:
复制内容到剪贴板
代码:
assignin('base','valueX',xdata);
assignin('base','valueY',ydata);
变量相关的
MATLAB存储变量在一块内存区域中,该区域称为基本工作空间。脚本文件或命令行创建的变量都存在基本工作空间中。函数不使用基本工作空间,第个函数都有自己的函数空间。
变量有三种基本类型:
1.局部变量
每个函数都有自己的局部变量,这些变量只能在定义它的函数内部使用。当函数运行时,局部变量保存在函数的工作空间中,一旦函数退出,这些局部变量将不复存在。
脚本(没有输入输出参数,由一系列MATLAB命令组成的M文件)没有单独的工作空间,只能共享调用者的工作空间。当从命令行调用,脚本变量存在基本工作空间中;当从函数调用,脚本变量存在函数空间中。
2.全局变量
在函数或基本工作空间内,用global声明的变量为全局变量。例如声明a为全局变量:
>>global a
声明了全局变量的函数或基本工作空间,共享该全局变量,都可以给它曲赋值。
如果函数的子函数也要使用全局变量,也必须用global声明。
3.永久变量
永久变量用persistent声明,只能在M文件函数中定义和使用,只允许声明它的函数存取。当声明它的函数退出时,MATLAB不会从内存中清除它,例如声明a为永久变量:
>>persistent a