BlockScalar(nv,A)
ans(:,:,1,1)=
1 2
3 4
ans(:,:,2,1)=
0 0
0 0
ans(:,:,3,1)=
0 0
0 0
ans(:,:,1,2)=
0 0
0 0
ans(:,:,2,2)=
1 2
3 4
ans(:,:,3,2)=
0 0
0 0
ans(:,:,1,3)=
0 0
0 0
ans(:,:,2,3)=
0 0
0 0
ans(:,:,3,3)=
1 2
3 4
分块矩阵
第二个函数目前不起作用,因为我正在努力在A的第i个元素(它是一个3×3矩阵)和包含第i个元素的3个元素的列向量之间实现矩阵乘积A * u. ü.正如您可能很容易看到的,我希望这是3-D中矩阵*向量乘积的多维推广.
function [B] = BlockMatrix(A,u)
N = size(u,2);
B = zeros(N,N,3);
for i=1:N
for j=1:N
B(i,j,:)= reshape(reshape(A(i,j,:,:),[3,3])*reshape(u(i,j,:),[1 3]),size(u));
end
end
——- BlockMatrix示例
如果输入是广义单位矩阵(每个NxN元素是3×3单位矩阵),则NxN矩阵由3×1向量组成:
N=2;
A = 4.*shiftdim( repmat( eye(3,3), 1, 1, N, N ), 2 );
c = ones(2,2);
V(1,1,:)=[1 2 3];
u = c.*V;
期望的输出显然是具有V(NxN矩阵由3×1向量构成)的结构的对象,其中每个元素是重塑的矩阵乘积(A(i,j,:,:),[3 3])和重塑(V(i,j,:),[1 3]).那是:
i=1;j=1;
reshape(B(i,j,:),[3,1])
ans =
4
8
12
对于任何我和j.
完整输出,完整性:
B(:,:,1) =
060014
B(:,:,2) =
060015
B(:,:,3) =
060016
问题
我很难(0)让BlockMatrix工作; (1)找到一种正确的矢量化方法,(2)我甚至不确定矢量化版本会更快.
任何帮助回答上述问题都将非常感激.