如何计算 MATLABdwt3
运算符的伴随?
换句话说,我如何计算以 3D 复数数组x
作为输入并返回数量dwt3(x,'db4')
作为输出的线性运算符的伴随。
这种伴随计算是许多迭代重建算法中的重要一步。
有人可能会猜测这idwt3
是 的伴随dwt3
,但以下代码似乎表明情况并非如此(除非我的代码包含错误):
sz = [384,300,144];
% Randomly generate a 3D complex array
x1 = randn(sz) + 1i*(randn(sz));
% Compute wavelet transform of x1
Wx1 = dwt3(x1,'db4');
% Randomly generate x2 which has the same size and shape as Wx1 (which is a Matlab structure)
x2 = Wx1;
for i1 = 1:2
for i2 = 1:2
for i3 = 1:2
arrSz = size(x2.dec{i1,i2,i3});
x2.dec{i1,i2,i3} = randn(arrSz) + 1i*randn(arrSz);
end
end
end
% Compute inverse wavelet transform of w2
WTransx2 = idwt3(x2);
% Check to see if the adjoint property <x1,WTransx2> = <Wx1,x2> is satisfied
prod1 = x1(:)'*conj(WTransx2(:));
prod2 = 0;
for i1 = 1:2
for i2 = 1:2
for i3 = 1:2
Wx1_arr = Wx1.dec{i1,i2,i3};
x2_arr = x2.dec{i1,i2,i3};
prod2 = prod2 + Wx1_arr(:)'*conj(x2_arr(:));
end
end
end
max(abs(prod1 - prod2))