编者按:这个文件被选为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类是非常有用的信号插值结合以下工具/重建:
一个例子涉及二维信号重建使用立方b样是Example2D提供的文件。在上面的链接。
引用作为
马特·J (2023)。高效的面向对象的克罗内克积操纵(//www.tianjin-qmedu.com/matlabcentral/fileexchange/25969-efficient-object-oriented-kronecker-product-manipulation), MATLAB中央文件交换。检索。
@KronProd /
@KronProd /私人/
版本 | 发表 | 发布说明 | |
---|---|---|---|
1.10.0.0 | 在构造函数KronProd (opset, opinds,…)介绍了默认值为opinds 1:长度(opset)。 这允许简单1-argument contructor调用等 |
||
1.9.0.0 | 在用户的建议,整理描述部分 |
||
1.8.0.0 | * KronProd类重载kron ()。 |
||
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 |