高效的面向对象的克罗内克积操纵

类高效的n次克罗内克操纵产品的操作数。s manbetx 845

2.4 k下载

更新2010年8月5日

查看许可协议

编者按:这个文件被选为MATLAB中央选择的

这是有效地代表一个类和操纵n阶张量积的产品矩阵(或对象,像矩阵)的操作数。s manbetx 845

给定矩阵{A, B, C, D,…}和一个标量年代,一个对象可以使用这个类的代表

矩阵= s * kron B kron C kron D kron……(1)式。

“克隆亚麻B”表示kron (A、B), A和B的克罗内克积在内部,然而,M存储操作数{年代,A, B, C, D,…}另外,这通常是远比数值byte-compact情商的RHS扩张。1。

此外,许多克罗内克产品更有效的数学操作完成后的{年代,A, B, C, D,…s manbetx 845}分别比用M作为矩阵的显式数值形式。类过载的方法和数学运算符的方式利用相应的克罗内克积结构。

在这些方法/运营商:mtimes(*) *(. *),转置(。),ctranpose (), rdivide (/), ldivide (\), mldivide (\), mrdivide(/),发票,pinv,权力,mpower,规范,和,电导率,eig,圣言,abs, nnz,奥尔特,胆固醇,lu qr,满,稀疏,…

一些限制适用于这些过载。特别是bi-operand涉及两个KronProd对象的数学操作,例如M1 *平方米,通常需要每个KronProd的操作数的大小兼容。然而,我发现这些限制是满意通常在应用程序。

咨询更多信息“帮助KronProd / methodname”在每个方法。也可选,krontest阅读。m的示威活动使用。

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
例# 1:

这个类的主要应用是有效执行分离张量的操作,即。,一个线性变换应用于所有列的一个数组,然后所有行,等等。

下面的例子是一个分离的变换三维数组X转换所有的通过乘法与非方阵列,然后将所有行通过乘法B,最后将所有3 rd-dimensional轴通过乘法与c两种方法进行了比较。第一种方法使用克隆亚麻()。第二个使用KronProd类。其他操作也出于演示目的。

注意到数量级减少CPU时间和内存消耗,使用KronProd对象。


%的数据
m = 25;n = 15;p = 40;
毫米= 16;nn = n;页= 10;
一个=兰德(mm, m);B =π*眼(n);C =兰德(pp、p);
s = 4;%一个标量
X =兰德(m, n, p);




%我方法:基于克隆亚麻()
抽搐;

矩阵= s * kron (C,克隆亚麻(B));

日元=矩阵* X (:);%的张量的转换
日元=重塑(y1,[毫米,nn,页]);

z1 =矩阵。' * y1 (:);

w1 =矩阵。' \ z1;

toc;
%运行时间是78.729007秒。





%方法二:基于KronProd对象
抽搐;

对象= KronProd({π,C}, (1 2 3), m, n, p, s);%相当于矩阵

y2 = * X对象;
%这个操作也可以实现
%,y2 =重塑(对象* X(:),[毫米,nn,页]);

z2 =对象。' *日元;

w2 =对象。' \ z1;

toc
%运行时间是0.003958秒。




% % %误差分析
PercentError = @ (x, y)规范(x - y(:)(:), 2) /规范(x(:),“正”)* 100;

PercentError (y1, y2), % = 3.0393 e - 012

PercentError(大小(日元),大小(y2)), % = 0

PercentError (z1 (z2), % = 1.3017 e - 012
PercentError (w1 w2), % = 4.3409 e - 011



% % %内存占用

> >谁矩阵对象


类属性名称大小字节

矩阵2400 x15000 288000000双
2400 x15000 8102 KronProd对象

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
例2:作为一个更实际的例子,KronProd类是非常有用的信号插值结合以下工具/重建:

//www.tianjin-qmedu.com/matlabcentral/fileexchange/26292-regular-control-point-interpolation-matrix-with-boundary-conditions

一个例子涉及二维信号重建使用立方b样是Example2D提供的文件。在上面的链接。

引用作为

马特·J (2023)。高效的面向对象的克罗内克积操纵(//www.tianjin-qmedu.com/matlabcentral/fileexchange/25969-efficient-object-oriented-kronecker-product-manipulation), MATLAB中央文件交换。检索

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

社区寻宝

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

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

在构造函数KronProd (opset, opinds,…)介绍了默认值为opinds 1:长度(opset)。

这允许简单1-argument contructor调用等
KronProd ({C、B}),相当于克隆亚麻(A,克隆亚麻(B, C))

1.9.0.0

在用户的建议,整理描述部分

1.8.0.0

* KronProd类重载kron ()。
*使用classdef文件重新实现类定义。
* loadobj现在总是construct-on-load。
*请参阅UpdateNotes更多细节。

1.7.0.0

*重载cellfun KronProd类()

* domainsize参数在构造函数中添加简单的选项语法KronProd (opset, opdims domainsizes,…)

有关详细信息,请参阅UpdateNotes

1.6.0.0

添加额外的例子来描述部分相关FEX提交链接。

1.5.0.0

错误修复的qr()方法(参见UpdateNotes.txt)。还增加了有关测试krontest.m修复

1.3.0.0

*新类方法:时间,rdivide ldivide,排名,奥尔特,圣言,pinv, qr,陆,胆固醇,loadobj。

*扩张的老方法:eig、mldivide mtimes mrdivide

*看到UpdateNotes。txt在包

1.1.0.0

小错误修复包的描述

1.0.0.0