这个提交定义泛型类矩阵像对象叫做MatrixObj称为DataObj的子类。对象类的有能力的行为矩阵,但其数学操作符(+、-、*、/、。*,<、>、等)和其他方法可以定义/重新定义在任何Mfile甚至从命令行。这消除了编写专用的classdef文件限制为每一个新的矩阵型或类目录用户可能希望创建的对象。
类是通过存储函数处理的各种矩阵运算符函数(+,-,mtimes、mldivide等…)的财产MatrixObj称为行动,这是一个结构变量。因此,一个可以设置所需的简单的矩阵运算符设置行动领域的一个适当的处理函数。
MatrixObj对象是特别有用,当一个对象需要具备几个矩阵像功能很快表示使用匿名函数或几个嵌套函数。这是下面的例子所示,处理创建一个有效版本的DFT矩阵。MatrixObj对象的另一个优点是,它没有必要时发出“明确类”命令操作方法必须编辑或重新定义。
DataObj子类MatrixObj适合模仿的专业版/修改现有MATLAB数值数据类型的行为。其行动属性包含默认方法适合现有的数据类型,但可以有选择地覆盖。下面的示例4说明了它的使用。
示例1:实现fft运算符形式()。众所周知,操作fft (x)可以表示为一个矩阵向量乘法。如果你有信号处理工具箱,相关矩阵可以使用DFTMTX函数生成。否则,它可以生成如下,
d = 2500;
Q = fft(眼(d));% - 2500 x2500 DFT矩阵
操作fft (x)相当于Q * x,但这是一个缓慢的方式来执行此操作
x =兰德(d);
抽搐;y0 = Q * x;toc %运行时间是3.595847秒。
然而,使用MatrixObj类,我们可以快速地创建一个对象Qobj可变换x使用相同的矩阵乘法的语法,Qobj * x,但它使用fft()下罩,在速度上的优势,
Qobj = MatrixObj;
Qobj.Ops.mtimes = @ (obj, z) fft (z);%设置mtimes方法在1线! !
抽搐;日元= Qobj * x;toc %运行时间是0.212282秒。
抽搐;y2 = fft (x);toc %运行时间是0.212496秒。
isequal (y1, y2);% = 1
当然,的内存占用Qobj远小于整个矩阵Q
> >谁问Qobj
类属性名称大小字节
问2500 x2500 100000000双复杂
4412 MatrixObj Qobj 1 x1
示例2:继续示例1,假设我现在决定,我仍然希望Qobj代表一个fft()操作,但它是归一化来满足Parseval定理。一个简单的动态重新定义mtimes()可以做到这一点。
Qobj.Ops.mtimes = @ (obj, z)(1 /√(元素个数(z))) * fft (z);
x =兰德(d, 1);
TestParseval =[规范(x)、规范(Qobj * x)), % = [28.2807, 28.2807]
示例3:继续示例2,现在让我们看看如何给Qobj ctranspose方法以便Qobj”定义。因为Qobj满足Parseval定理,Qobj”是它的逆矩阵。一行可以通过反式属性定义,
Qobj.Trans.mtimes = @ obj, z)√元素个数(z)) *传输线(z);
下面的代码验证ctranpose操作各种预期的属性,
TestParseval =[规范(x)、规范(Qobj * x)), % = [28.2807, 28.2807]
AdjointOfAdjoint = isequal (Qobj * x (Qobj ') ' * x), % = 1
InversionErrorLeft =规范(x - Qobj ' * (Qobj * x)), % = 8.4315 e - 015
InversionErrorRight =规范(x - Qobj * (Qobj ' * x)), % = 7.9086 e - 015
示例4:下面是DataObj子类的一个实例。在这里,我们使用它来创建一个专门的数组类型调用bsxfun()为特定的操作。这可能是一个有用的方式绕过bsxfun冗长的功能语法。其他操作如mtimes有默认的实现。
P = DataObj;
P.Data = [1, 2, 3, 4]。”
P.Ops.minus = @ (A, B) bsxfun (@minus, A, B);
P.Ops。+ = @ (A, B) bsxfun (@plus, A, B);
Q = P - [1, 2],
R = P + (3; 7),
S = P * %,这使用了一个自然的违约
P =
1 3
2 4
Q =
0 1
1 2
R =
4 - 6
9 11
S =
3个7
4 10
引用作为
马特·J (2023)。动态定义自定义矩阵的对象(//www.tianjin-qmedu.com/matlabcentral/fileexchange/26611-on-the-fly-definition-of-custom-matrix-objects), MATLAB中央文件交换。检索。