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

时间:2014-07-23 17:07:35

标签: matlab matlab-class

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

第一部分,重建新类,已经完成。我在使用现有类的新方法时遇到了麻烦。

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

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

由于我没有找到解决方案的运气,我必须自己找一个。这是我提出的方法。

工具箱为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

在工具箱中的多个位置,调用函数minreals。所有这些电话都被替换为:

    minreals(sdzpk(obj))

这样,我确保使用了新类并应用了正确的方法。

我希望这有助于某人。