动态定义自定义矩阵的对象

类与动态矩阵像对象确定的方法。

863下载

更新2010年10月3

查看许可协议

这个提交定义泛型类矩阵像对象叫做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中央文件交换。检索

MATLAB版本兼容性
创建R2009b
兼容任何释放
平台的兼容性
窗户 macOS Linux
类别
找到更多的在处理类帮助中心MATLAB的答案

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!
版本 发表 发布说明
1.3.0.0

添加逻辑()转换器DataObj子类的方法。这允许DataObj对象用于关系表达式,如果/当语句。同样地,添加双/单转换器的方法。

1.2.0.0

*添加HTML用户指南
*创建DataObj子类在用户指南(解释)。
*添加反式财产MatrixObj在用户指南(解释)。实现换位有时更容易通过反式。
*添加连接词()和()类方法显示

1.1.0.0

纠正小虫子subsref方法防止Params对象属性的索引。

1.0.0.0