gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:50:12 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com