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