MATLAB函数之间数据传递:Matlab里evalin和assignin的用法

我看的也是转贴的,原出处就省略了。。。

assigninevalin
    MATLAB
通常的基本工作空间是'base'空间MATLAB在程序运行过程中,将为每个函数分配它自己的函数工作空间(从基本空间中分割出的一块, 以函数名作为其工作空间名),各个工作空间之间的变量是不能够直接引用的,在函数退出之后,该函数空间也就立即被注销。因此,对于函数文件,运行结果除输出变量返回到基本工作空间或者其父工作空间(调用该函数的程序的工作空间)之外,其他中间变量不在基本工作空间或者其父工作空间保留。而对于脚本M文件,其工作空间与基本工作空间'base'是共享的,其运算过程中所用到的中间变量也将在基本工作空间'base'中保留。


assignin
为工作空间的变量指派值,其语法为:
assignin(WS,'name',V)
,其中,WS为工作空间名称,'name'为变量名,V是为该变量指派的值。


evalin
实现在工作空间中某个表达式字符串,并将结果返回,其语法为:
evalin(WS,'expression')
,其中,WS为工作空间名称,'expression'为表达式符号串。


利用assigninevalin指令,可以实现不同M文件主函数与子函数的工作空间变量的共享

例:

function test
clear;     %
清空当前工作空间
a=3;       %
在基本工作空间创建一个变量
assignin('base','a',5); %
为该变量指派新的值

b = evalin('base','3*a+2'); %在基本工作空间中计算式子3*a+2的值并将结果赋予b   

end 
a      %
查看现在该变量的值    
a =
     5 


b =
    17

 

evalin功能很强大,可以运行不同工作区域里的Matlab任何命令:

evalin(ws, expression)

[a1, a2, a3, ...] = evalin(ws, expression)

 

ws:工作区域(default base)

expression: 合法的matlab命令

 

比如想在运行函数同时,运行工作区域里一个赋值命令:

evalin('base', 'a=1');

看一下,是不是你的workspace里面有了一个a的变量。



另外,今天还试用solve解一个较复杂的一元方程(求一点到高斯函数曲线的最短距离,对高斯函数求导以后方程变得很复杂)。结果总是:Warning: Explicit solution could not be found. 怎么调都调不通,都快哭了。下次若遇到较为简单的符号运算才采用symbolic toolbox吧,而且实验期间还分别用了maple和matlab的工具包,均不能解出来。最后只能用优化方法解,速度貌似还挺快的。


  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值