如果操作正确,则应该有运行时间O(n log n)。
function d = ffTU(f)
n = [size(f)](1);
if n==1
d = f;
return;
else
even=ffTU(f(2:2:end,:));
odd =ffTU(f(1:2:end,:));
for k=0:(n/2)-1
T(k+1)= exp(-2i*pi*k/n)*odd(k+1);
end
for k=0:(n/2)-1
d(k+1) = even(k+1) + T(k+1) + even(k+1) - T(k+1);
end
end
我一直收到这些错误:
error: ffTU: A(I): index out of bounds; value 2 out of bound 1
error: called from
ffTU at line 16 column 11
我知道我必须调整函数的索引,但我认为我已经解决了这个问题。
答案 0 :(得分:1)
在循环之前预先分配T
:
T = zeros(n/2,1);
或者更好的是,在没有循环的情况下计算它:
k = (0:(n/2)-1).';
T = exp(-2i*pi*k/n).*odd(:);
您应该对d
执行类似操作。
您还需要测试输入是否均匀。
而不是
n = [size(f)](1);
DO
n = size(f,1);
但是如果你的输入不是列向量,那就不好了。用
修复它f = f(:);
n = size(f,1);
您计算d
时出现错误,因为您将其设为2*even
,T
未使用T-T==0
。{ p>