MATLAB的assignin和evalin函数
MATLAB工作区
在学习assignin
之前,得先了解MATLAB
工作区的概念。工作区简单来说就是计算机为程序运行提供的一段内存,用于存储代码运行过程中的变量。没错,就是我们在MATLAB
主界面看到的,工作区(用于保存变量)。
MATLAB
的工作区包括:基本工作空间,也就是'base'
,以及函数工作空间,即每次调用函数时,会分配的函数工作空间。各个空间的变量是不能够直接互用。 对应'base'
空间,主文件运行的变量会保留,以及函数返回值,这些变量在程序运行完后可以在主界面的工作区看到。对于函数空间会在函数调用完成后,自动释放,其中的变量也不会保留,如果需要保存某些变量到'base'
工作空间,可以通过函数返回值的方法,或者通过global
,或者通过assignin函数
,evalin
函数。
'base'
工作空间可以通过主界面的工作区查看。那么函数空间怎么查看呢,当然也是通过主界面的工作区,不过,需要在对应的函数里面打断点,通过debug
进入。
assignin函数
OK,了解了工作空间的概念,那么就看看assignin
函数。assignin
函数为指定工作区中的变量赋值,具体用法:
assignin(ws,var,val)
ws
是指定工作空间,取值为'base'
或者'caller'
,分别表示基本工作空间和父函数(调用者,例如:假设 funA
调用 funB
。funB
的调用方工作区就是 funA
。因此,可以通过使用 assignin
并将工作区指定为 'caller'
,从 funB
中为 funA
中的变量赋值。)工作空间,var
是变量名,为一个字符串,val
为一个数或者矩阵,即给var
赋的值。
assignin实例
以下例子摘自mathworks,做一个简单说明,其余例子可以参考官网,基本上大同小异。
function c = myAdd(a,b)
c = a+b;
str = sprintf('%s called with %d,%d (%s)',mfilename,a,b,char(datetime));
assignin('base','fcnStatus',str)
end
通过调用这个函数,可以发现在base
空间,有c
和fcnStatus
变量,c
是通过函数返回值返回的,fcnStatus
是通过assignin
函数在myAdd
函数空间中赋值的。
evalin函数
evalin
函数在指定的工作区中计算 MATLAB 表达式,具体用法:
evalin(workspace,expression)
[output1,...,outputN] = evalin(workspace,expression)
workspace
指定在其中计算表达式的工作区,指定为 'base'
或 'caller'
,意义同上assignin
函数。expression
要计算的表达式,指定为字符向量或字符串标量,expression
必须为有效的 MATLAB
表达式,并且不能包含任何 MATLAB
关键字。
evalin函数例子
以下例子摘自Mathwork,做一个简单说明,其余例子可以参考官网,基本上大同小异。
例如在某个函数工作空间中,执行以下代码:
var = magic(5);
v = evalin('base','var') % 将var的值保存到'base'空间
实际上上述的例子是将var
当做matlab
的表达式计算,然后运算完保存到'base'
空间的v
变量中,这实际上就是assignin
的功能~~~。当然,可以向下面这样写,只要语句合法:
var = magic(5);
v = evalin('base','var+magic(5)') % 将var的值保存到'base'空间
evalin和eval函数对比
evalin
和eval
函数都可以计算字符串形式的matlab
表达式,唯一不同的是evalin
可以指定工作区,而eval
针对当前运行的工作区。例如:
Z1 = eval('magic(5)'); % 保存到当前工作空间
Z2 = evalin('base','magic(5)'); % 保存到base工作空间