我继承了一个完整的工具箱,最后一次修订是在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/