我继承了一个完整的工具箱,最新修订于2006年,我必须将其更新到最新版本的Matlab。此工具箱定义了一些类并定义了内置类的方法。更具体地说,它为控制系统工具箱类lti,ss,zpk和tf的对象创建了一些额外的方法。
第一部分,重建新类,已经完成。我在使用现有类的新方法时遇到了麻烦。
由于代码是在较旧版本的Matlab中编写的,因此它使用类文件夹(如@ lti,@ s,@ zpk)来定义新方法。现在我需要保留功能,但是使用新的OOP模型,其中并不是所有的@文件夹都可见。
有人知道怎么做吗?
答案 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))
这样,我确保使用了新类并应用了正确的方法。
我希望这有助于某人。