在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对我来说很好)。我错过了一个新设置吗?
>> syms u
>> pretty(sinc(u))
Matlab 2009b将返回:
ans =
sin(u)
------
u
Matlab 2011b将返回:
Undefined function 'sinc' for input arguments of type 'sym'.
用户WalkingRandomly在其页面Explorations in overriding MATLAB functions上提出的建议也不会奏效。将文件放在符号工具箱根文件夹(\ MATLAB [VersionOfMatlab] \ toolbox \ symbolic \ symbolic \ @sym)中并使用rehash TOOLBOXRESET
进行更新也不会有帮助。
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 |
+- -+
>>