从 MATLAB 中的特定工具箱调用重载函数



我安装了一些Matlab-Toolbox。在我的 Matlab 版本中,其中一个工具箱函数与另一个工具箱函数发生冲突。在这种情况下,它是黑森州。我想使用符号工具箱的黑森函数。

在 C/C++ 中时,函数是多个定义的,就像 cos 的函数一样,我仍然想使用我可以编写的"标准"cos 函数:

std::cos(x);

matlab 中有类似的东西吗?

如果您有重载的方法并想调用内置的方法,则可以使用函数 builtin .来自官方文档:

builtin(function,x1,...,xn) 使用 输入参数 x1 到 xn。使用内置执行原始 从重载函数的方法中内置。要工作 正确,您绝不能超载内置。

使用它的语法是:

[y1,...,yn] = builtin(function,x1,...,xn)

友情建议:如果你想尝试重载内置("嗯,我想知道会发生什么"),记得先保存东西。

以您描述的 c/c++ 非常相似的方式,您可以通过先添加工具箱的名称来使用特定的工具箱函数: ToolboxNamefunction2call()

首先使用 which 命令确保将使用特定的调用语法从哪个工具箱加载哪个函数。

由于我没有您提到的工具箱,因此我将使用经典的fopen函数作为示例。

调用的第一个fopen函数(没有任何其他参数)将是用于返回文件句柄的内置函数。事实上,which命令确认

>> which fopen
built-in (C:TLAB13atoolboxmatlabiofunfopen)

现在假设我想使用 fopen 函数打开一个串口,我需要在调用 fopen 前面加上工具箱/对象的名称,如下所示:serialfopen 。让我们首先确保这种调用方式指向正确的函数:

>> which serialfopen
C:TLAB13atoolboxmatlabiofun@serialfopen.m  % serial method

宾果游戏!

为了确保在调用这些函数时它有效,让我们真正调用它们(使用虚拟参数):

>> fopen('toto')
ans =
    -1
>> serialfopen('toto')
Error using serial (line 72)
The PORT must be specified.

成功了。对fopen('toto')返回的第一个简单调用-1因为它找不到名为"toto"的文件。
serialfopen('toto')的第二次调用出错,因为未定义串行端口,但调用了正确的函数。


编辑:您还可以通过对 Matlab 路径重新排序来覆盖 Matlab 获取函数的顺序。如果您将符号工具箱放在路径中的另一个工具箱之前,那么在没有显式信息的情况下调用时,Matlab 将执行它在路径中找到的第一个函数。

不过,我仍然推荐带有显式声明的第一个解决方案,因为如果您有许多重载函数,更改路径顺序可能会弄乱其他函数调用。

最新更新