扩展matlab类:内置类的新方法

扩展matlab类:内置类的新方法,matlab,matlab-class,Matlab,Matlab Class,我继承了一个完整的工具箱,上一次修订是在2006年,我必须将它更新到Matlab的最新版本。此工具箱定义了一些类,并为内置类定义了方法。更具体地说,它为控制系统工具箱类lti、ss、zpk和tf的对象创建了一些额外的方法 第一部分,重建新类,已经完成。我对现有类的新方法有困难 由于该代码是在旧版本的Matlab中编写的,因此它使用@lti、@ss、@zpk等类文件夹来定义新方法。现在我需要保留该功能,但使用新的OOP模型,其中并非所有@文件夹都可见 有人知道怎么做吗?因为我没有找到解决办法,所以

我继承了一个完整的工具箱,上一次修订是在2006年,我必须将它更新到Matlab的最新版本。此工具箱定义了一些类,并为内置类定义了方法。更具体地说,它为控制系统工具箱类lti、ss、zpk和tf的对象创建了一些额外的方法

第一部分,重建新类,已经完成。我对现有类的新方法有困难

由于该代码是在旧版本的Matlab中编写的,因此它使用@lti、@ss、@zpk等类文件夹来定义新方法。现在我需要保留该功能,但使用新的OOP模型,其中并非所有@文件夹都可见


有人知道怎么做吗?

因为我没有找到解决办法,所以我不得不自己找一个。这就是我想出的方法

工具箱为zpk类提供了三个新方法。我创建了一个名为sdzpk的新类,并声明它是内置zpk类的子类。然后,在使用任何新方法的地方,我首先将对象转换为新类,然后再将其传递给方法

以下代码可以更好地说明这一点:

类定义文件:

    classdef sdzpk < zpk & sdlti

        methods (Access = public)

            function obj = sdzpk(varargin)

                % Constructor method. Long code here to perform data validation
                % and pass information to the zpk constructor

                obj = obj@zpk(args{:});
            end

            % Existing methods
            % This are the old files I inherited. No need to edit them.

           tsys = ctranspose(sys);
           sys = delay2z(sys);
           sysr = minreal(sys,tol);
           F = minreals(F,tol);
           FP = setpoles(F,p);
           F = symmetr(F,type,tol);
           F = z2zeta(F,tol);
        end       
    end
通过这种方式,我确保使用新类并应用正确的方法


我希望这对某人有所帮助。

这可能会有所帮助@Alfabravo非常感谢。我以前见过这个答案。它解释了我理解的包和类的文件夹层次结构。但它并没有阐明(就像Matlab文档一样)如何为现有类引入新方法。我想子类化是一种选择,但我必须使用不同的名称,这需要大量的重新编码。
    minreals(sdzpk(obj))