matlab - 扩展 matlab 类 : new methods for built-in classes

标签 matlab matlab-class

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

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

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

有人知道怎么做吗?

最佳答案

由于我没有找到解决方案的运气,所以我不得不自己找到一个。这是我想出的方法。

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

通过这种方式,我确保使用了新类并应用了正确的方法。

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

关于matlab - 扩展 matlab 类 : new methods for built-in classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24916710/

相关文章:

performance - 在 matlab 中运行编译的 mex 代码时,mingw 是否比 cygwin 慢?

matlab - 如果它是类的属性,为什么更改表的变量名称不起作用?

matlab - 如何在 MATLAB 中创建抽象类对象数组?

matlab - 如何在Matlab中更改实例的属性

matlab - 如何在 Matlab 句柄类中创建 "one-way dependency"

matlab - 如何在matlab中添加多个函数

matlab - 最简单的是共享用 MatLab 编写的小组项目代码

matlab - 设置子类属性导致意外错误

algorithm - 使用图像处理计算弯管的曲率(霍夫变换抛物线检测)

oop - 对象上的测试方法存在