重载符号工具箱功能

时间:2014-10-20 20:12:50

标签: matlab symbolic-math

在Matlab中我们可以重载任何函数。惯例是将新/重载的函数文件放在一个文件夹中,该文件夹解决了' @' -sign前面的数据类型。可以找到一个着名的例子here

function z = sinc(x)
%SINC The symbolic sinc function
%     sin(x)/x. This function
%     accepts a sym as the input argument.
if isequal(x,sym(0))
   z = 1;
else
   z = sin(x)/x;
end

将sinc.m置于Windows中,例如在\ anywhereOnPath \ @sym \下将在Matlab2009b下工作。但是它在Matlab2011b中不起作用。此问题特定于' sym'数据类型(例如double对我来说很好)。我错过了一个新设置吗?

UPDATE1

>> syms u
>> pretty(sinc(u))

Matlab 2009b将返回:

ans =
       sin(u)
       ------
         u

Matlab 2011b将返回:

Undefined function 'sinc' for input arguments of type 'sym'.

UPDATE2

用户WalkingRandomly在其页面Explorations in overriding MATLAB functions上提出的建议也不会奏效。将文件放在符号工具箱根文件夹(\ MATLAB [VersionOfMatlab] \ toolbox \ symbolic \ symbolic \ @sym)中并使用rehash TOOLBOXRESET进行更新也不会有帮助。

UPDATE3

W.r.t horchlers评论: set MATLAB_SYMBOLIC=matlab用于R2009b,因为枫木在这里不起作用。 对于测试,我暂时删除了所有不需要的文件。下面你会发现完整的测试,省略了结果,其中sinc.m是从信号工具箱加载的。由于我现在无法访问R2011b,我只是再次使用R2013b进行了测试,结果相同。在2009年及以上版本之外,UI之外的许多内容都发生显然它的目的并没有错误(因此我将保留R2009b以便能够运行我的遗留代码;)。

>>
>> %using 32bit R2009b on Windows XP 32bit
>> rehash TOOLBOXRESET
>> which -all sinc %signal file removed
C:\Program Files\MATLAB\R2009b\toolbox\symbolic\symbolic\@sym\sinc.m  % sym method
>> pretty(sinc(u))

  sin(u) 
  ------ 
    u
>> 
>> rehash TOOLBOXRESET
>> which -all sinc %signal file recovered
C:\Program Files\MATLAB\R2009b\toolbox\signal\signal\sinc.m
C:\Program Files\MATLAB\R2009b\toolbox\symbolic\symbolic\@sym\sinc.m  % sym method
>> pretty(sinc(u)) %takes signal file since higher in path

  sin(u) 
  ------ 
    u
>> 
>> %using 32bit R2013b on Windows 7 64bit
>> rehash TOOLBOXRESET
>> which -all sinc %signal file removed
C:\Program Files (x86)\MATLAB\R2013b\toolbox\symbolic\symbolic\@sym\sinc.m  % sym method
>> pretty(sinc(u))
Undefined function 'sinc' for input arguments of type 'sym'.
>> 
>> rehash TOOLBOXRESET
>> which -all sinc %signal file recovered
C:\Program Files (x86)\MATLAB\R2013b\toolbox\signal\signal\sinc.m
C:\Program Files (x86)\MATLAB\R2013b\toolbox\symbolic\symbolic\@sym\sinc.m  % sym method
>> pretty(sinc(u)) %takes signal file since higher in path

  +-           -+ 
  |  sin(pi u)  | 
  |  ---------  | 
  |    pi u     | 
  +-           -+
>> 

0 个答案:

没有答案