MATLAB的assignin和evalin函数

本文介绍了MATLAB工作区的基本概念,重点讲解了assignin函数如何在不同工作空间中赋值,以及evalin函数如何在指定工作区执行MATLAB表达式。通过实例演示了这两个函数在实际编程中的应用和区别。
摘要由CSDN通过智能技术生成

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 调用 funBfunB 的调用方工作区就是 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 空间,有cfcnStatus变量,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函数对比

   evalineval函数都可以计算字符串形式的matlab表达式,唯一不同的是evalin可以指定工作区,而eval针对当前运行的工作区。例如:

Z1 = eval('magic(5)');            % 保存到当前工作空间
Z2 = evalin('base','magic(5)');   % 保存到base工作空间
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuntou0906

玛莎拉蒂是我的目标!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值