当我将这两个语句从build中转换为我自己的函数时,我遇到了一个问题:
gaus=gauss/sum(gauss(:));
BeforeAbs=fft2(gaus,size(im,1),size(im,2));
它给了我[尝试访问X(2);因为数字(X)= 1]
,因此索引越界 %--------Start convert from build in to my own function of Fourier transformation of 1 D
gaus=gauss/sum(gauss(:));
for u=1:(gaus)
summ=0;
for x=1:1
w2=(-1*(sqrt(-1)))*2*pi*((u*x)/(gaus+1))
summ=summ+(gaus(x)*exp(w2));
end
PQ2(u)=summ;
end%
X=size(im,1);
for u=1:(X)
summ=0;
for x=1:1
w3=(-1*(sqrt(-1)))*2*pi*((u*x)/(X+1))
summ=summ+(X(x)*exp(w3));
end
PQ3(u)=summ;
end
BeforeAbs=[PQ2 PQ3];
有谁能告诉我为什么会出现这个错误?
答案 0 :(得分:0)
在您的代码中,语句
X=size(im,1);
返回变量im
沿其第一维的大小。这将返回标量值。但是,您有一个for
循环:
for x=1:2
...
summ=summ+(X(x)*exp(w3));
end
迭代值x = 1
和x = 2
。当您X(x)
时尝试评估x = 2
时,会收到错误,因为X
只有一个元素。
基本上,你正在做与此相同的事情:
X = 5
X(2)
此外,您{for循环u
:
for u=0:(X-1)
从u = 0
开始,但稍后您尝试设置
PQ3(u)=summ;
但是,MATLAB中的数组索引是基于 1的,因此PQ3(0)
会导致错误。您应该从1开始编制索引:PQ3(1) = summ
。