在matlab应用中,函数间的数据共享很多时候是非常必要的。例如在sfunction的编写中,在更新函数中用到的一些中间变量需要在输出函数中用到。虽然这些变量也可以通过在输出函数中由输入和状态变量重新计算出来,但现将它们从更新函数中导出来更为快捷方便。为此需要先讲解两个函数
assignin('base','y',x);
此函数的作用是:若基本工作空间(workspace)中没有变量y,则先在基本空间中定义这个变量,然后将变量x的值赋给它;若基本空间已经存在变量y,则直接将变量x的值赋给y
z=evalin('base','y');
这一条语句的作用是:将基本工作空间中的变量y赋给变量z;
了解了上述两个函数的作用,若要将函数A中的变量x传入函数B的变量z,可以这样实现:在函数A中调用
而在函数B中执行
z=evalin('base','y');
后边以一个S-Function的例子,对本文方法进行介绍。这个例的功能是在更新对状态x进行积分,并计算x^2,并将x^2和t(时间)的值记录到基本工作空间,在输出函数中再次计算x^2的值,然后将在更新函数中记录的值输出,并输出这个时候计算出的x^2的值,并将此时的时间也输出。
由于S-Function的执行过程是先输出,后更新,在输出.....,因此当我们以常量1作为输入时,两组时间值是有些差别的。从而导致在更新函数中计算出的x^2和输出函数中的x^2有差别存在。