我需要在matlab中重写链接函数。现在,当我检查它的时候,我意识到里面有一个叫做linkagemex的方法。但我根本无法进入这个方法来查看它的代码。有人能帮我解决这个奇怪的情况吗?
function Z= linkage (Y, method, pdistArg, varargin)
Z=linkagemex(Y,method);PS。我认为我很擅长学习,但是matlab并不是那么容易学习。如果你有很好的参考资料来学好它,请随时告诉我。非常感谢您的时间和关注。
发布于 2015-04-30 11:16:41
@m.s.提到,您已经找到了对MEX函数的调用。MEX函数被实现为C代码,编译成一个可通过MATLAB调用的函数。
正如您已经发现的,您不能进入这个方法(因为它是编译的C代码,而不是MATLAB代码),而且您无法访问C源代码,因为它没有随MATLAB一起提供。
通常情况下,你在这里会是个死胡同。幸运的是,linkagemex的情况并非如此。您将在linkage.m的第240行上注意到,它实际上做了一个测试,以查看是否存在linkagemex。如果不是,则调用本地子函数linkageold。
我认为您可以假设linkageold所做的事情至少与linkagemex大致相同。您可能希望用一些合适的输入参数来测试它们,看看它们是否给出了相同的结果。如果是这样的话,那么您应该能够使用来自linkageold而不是linkagemex的代码重写linkagemex。
我要更笼统地评论一下,与你的PS有关。在过去的几天里,我一直在回答你的一些问题--你看起来确实是一个快速的学习者。但这并不是说MATLAB很难学--您应该认识到,您正在尝试的东西(重写phytree的集群行为)对于一个非常高级的用户来说并不容易。
MathWorks编写他们的内容的方式使它(希望)易于使用-但不一定使用户易于扩展或修改。有时,由于性能原因,它们会使您无法进行修改,就像您在linkagemex中发现的那样。此外,phytree是使用一种旧风格的OO编程实现的,这种编程不再被正确地记录下来,所以即使您有代码,也很难计算出它所做的事情,除非您碰巧已经使用了MATLAB多年,并记住了旧的风格是如何工作的。
我的建议是,您可能会发现,只从零开始实现自己的集群方法就更容易了,而不是试图构建在phytree之上。在您所处的道路上,您还会有很多更多的麻烦,您将了解到,phytree是以一种晦涩而过时的方式实现的。如果您利用这个机会从头开始实现自己的东西,那么您可以学习如何使用更现代的OO方法来实现这些东西,这在将来会对您更有用。
不过,这只是我的想法。如果你选择继续phytree路线的话,我很乐意在可能的时候继续回答问题。
发布于 2015-04-29 23:31:09
您遇到了一个MEX函数,它“是MATLAB解释器加载和执行的动态链接子程序”。由于这些子程序是本机编译的,所以您不能进入它们。还请参阅MATLAB有关MEX函数的文档。
https://stackoverflow.com/questions/29953566
复制相似问题