如何理解matlab中defaule链接函数内部的linkagemex函数

how to understand the linkagemex function inside of the defaule linkage function in matlab

我需要在matlab中重写联动函数。现在,当我检查它时,我意识到其中有一个名为 linkagemex 的方法。但是我根本无法进入这个方法来查看它的代码。谁能帮我解决这个奇怪的情况?

function Z= linkage (Y, method, pdistArg, varargin)

         Z=linkagemex(Y,method);

PS。我觉得自己学的还不错,但是matlab就没那么好学了。如果您有很好的参考资料可以很好地学习它,请随时告诉我。非常感谢您的时间和关注。

您遇到了一个 MEX 函数,"are dynamically linked subroutines that the MATLAB interpreter loads and executes"。由于这些子例程是本机编译的,因此您无法进入它们。另请参阅有关 MEX functions.

的 MATLAB 文档

作为@m.s。提到,您发现了对 MEX 函数的调用。 MEX 函数作为 C 代码实现,该代码被编译为可由 MATLAB 调用的函数。

如您所见,您无法进入此方法(因为它是编译的 C 代码,而不是 MATLAB 代码),并且您无权访问 C 源代码,因为它没有随附MATLAB.

通常情况下,您在这里会陷入死胡同。幸运的是,linkagemex 并非如此。您会注意到 linkage.m 的第 240 行,它实际上进行了测试以查看 linkagemex 是否存在。如果不是,它会调用本地子函数 linkageold.

我想你可以假设 linkageold 做的事情至少与 linkagemex 大致相同。您可能想用一些合适的输入参数来测试它们,看看它们是否给出相同的结果。如果是这样,那么您应该能够使用 linkageold 而不是 linkagemex.

中的代码重写 linkage

我将更笼统地发表评论,与您的 PS 相关。在过去的几天里,我一直在回答你的一些问题——你看起来确实是一个学得很快的人。但这并不是说 MATLAB 真的很难学 - 你应该意识到你正在尝试的事情(重写 phytree 的聚类行为)即使对于非常高级的用户来说也不是一件容易的事。

MathWorks 以一种使其(希望)易于使用的方式编写他们的东西 - 但不一定以一种使用户易于扩展或修改的方式。有时他们出于性能原因做一些事情,使您无法修改,正如您在 linkagemex 中发现的那样。此外,phytree 是使用不再正确记录的旧式 OO 编程实现的,因此即使您有代码,也很难弄清楚它的作用,除非您碰巧一直在使用多年来一直使用 MATLAB 并记住旧样式的工作原理。

我的建议是,您可能会发现从头开始实施自己的聚类方法比尝试在 phytree 之上构建更容易。在您前进的道路上,您还会遇到很多更令人头疼的事情,而且您将学到的大部分内容是 phytree 是以一种晦涩的老式方式实现的。如果您借此机会从头开始实现自己的东西,您可能会学习如何使用更现代的 OO 方法来实现事物,这在将来对您更有用。

不过你的电话,这只是我的想法。如果您选择继续 phytree 路线,我很乐意继续尝试回答问题。