Matlab 重载符号工具箱函数

Matlab 重载符号工具箱函数,matlab,symbolic-math,Matlab,Symbolic Math,在Matlab中,我们可以重载任何函数。约定是将新的/重载的函数文件放在一个文件夹中,该文件夹处理以“@”符号开头的数据类型。可以找到一个著名的例子 在Windows中放置sinc.m,例如在\anywhere路径\@sym\下,将在Matlab2009b下工作。但是,它在Matlab2011b中不起作用。此问题特定于“sym”数据类型(例如,double对我来说很好)。有没有我错过的新环境 更新1 Matlab 2009b将返回: ans = sin(u) ----

在Matlab中,我们可以重载任何函数。约定是将新的/重载的函数文件放在一个文件夹中,该文件夹处理以“@”符号开头的数据类型。可以找到一个著名的例子

在Windows中放置sinc.m,例如在\anywhere路径\@sym\下,将在Matlab2009b下工作。但是,它在Matlab2011b中不起作用。此问题特定于“sym”数据类型(例如,double对我来说很好)。有没有我错过的新环境

更新1 Matlab 2009b将返回:

ans =
       sin(u)
       ------
         u
Undefined function 'sinc' for input arguments of type 'sym'.
Matlab 2011b将返回:

ans =
       sin(u)
       ------
         u
Undefined function 'sinc' for input arguments of type 'sym'.
更新2 用户在其页面上漫无目的地提出的建议也不会起作用。将文件放在symbolic toolbox根文件夹(\MATLAB[VersionOfMatlab]\toolbox\symbolic\symbolic\@sym)中,并使用
rehash TOOLBOXRESET
进行更新也无济于事

更新3 W.r.t霍奇勒评论: R2009b中使用了
set MATLAB\u symbol=MATLAB
,因为maple在这里不工作。 对于测试,我曾经临时删除了所有不需要的文件。下面您将找到完整的测试,其中忽略了从信号工具箱加载sinc.m的结果。因为我现在无法访问R2011b,所以我只是再次使用R2013b进行了测试,这导致了相同的结果。在2009年和更高版本之间,UI之外的许多东西都发生了变化。很明显,它的目的是没有bug(因此我将保留R2009b,以便能够运行我的遗留代码;)


你弄明白了吗?您确定2009b版本实际上是在调用您的函数而不是其他函数吗?在命令窗口中运行
哪个sinc
。我假设您尝试过其他
重新缓存
选项(例如,
toolboxcache
),但也没有成功?没有,我还没有找到答案。但我在更新后停止了研究2。请参阅更新3。为什么您需要超载?换个新的函数名怎么样?(
mysinc
)@Dennis Jaheruddin这只是品味的问题。我不必。它实际上与学习不同的语言和应用(一般的)概念和技术有关。我并不是说练习和学习不好,但值得注意的是,我个人经历了matlab程序员的普遍态度:“除非你有充分的理由,否则不要超负荷”。
>>
>> %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     | 
  +-           -+
>>