您想将调用包装fft在一个为您进行重塑和诸如此类的函数中。只有在最微不足道的情况下,您才想显式地构造矩阵。以二维 DFT 为例,一个 1024 x 1024 的输入数组需要一个 1024^2 x 1024^2 的矩阵。此外,矩阵实现将比 FFT 实现慢一个数量级。
例如,假设您使用的是 SPGL1,其中函数句柄的格式为f(x,mode),其中 if mode == 1,前向线性运算符应用于输入,如果mode == 2,则应用伴随。
function y = fft2_operator(x,mode,M,N)
x = reshape(x,[M,N]); % Reshape the input to an M x N array.
if(mode == 1)
y = fft2(x);
else
y = ifft2(x);
end
y = y(:); % We want to return an MN x 1 vector.
end
然后,您可以使用以下内容定义一个函数句柄以传递给求解器:
% The size of the input with some made up data.
M = 1000;
N = 1024;
x = rand(M,N);
f_fft = @(x,mode) fft_operator(x,mode,M,N);
y = spgl1(f_fft,x);
如果您使用不同的求解器,则上述细节将发生变化,但方法将相同。