在matlab上使用快速傅里叶变换?

时间:2015-03-11 16:12:37

标签: matlab fft

我在Matlab中使用光谱方法在一个方向上求解一个简单的二维泊松方程在另一方面的有限差分上存在一些困难。

我正在获得正确答案的缩放版本,但无法解决原因,尽管我认为它与波数有关。

非常感谢任何帮助,代码可以在下面看到。

N = 32;
x = ((0:N-1)/N)*2*pi;
y = ((0:N-1)/N)*2*pi;
dx = 2*pi/N;
k  =  fftshift(-N/2:N/2-1);
[X,Y] = meshgrid(x,y);
f = (-2)*cos(X).*sin(Y);
f_comparison = cos(X).*sin(Y);
checker = 10;
u = zeros(N,N);
u_new = zeros(N,N);
f_hat = fftn(f);
while checker > 1*10^(-7);
    u_new_hat = fftn(u_new);
    for aa = 1:N
        for a = 1:N
            q1 = a+1;
            q2 = a-1;
            if q2 == 0
                q2 = N;
            end
            if q1 == N+1
                q1 = 1;
            end
            denom = ((dx^2)*((k(aa))^2))+2;
            u_new_hat(a,aa) = (1/denom)*((u_new_hat(q1,aa))+(u_new_hat(q2,aa))-((f_hat(a,aa))*(dx^2)));
        end
    end
    u_new = real(ifftn(u_new_hat));
    for aa = 1:N
        for a = 1:N
            u_checker(a,aa) = abs(u_new(a,aa)-u(a,aa));
        end
    end
    compare = max(u_checker);
    checker = max(compare);
    for aa = 1:N
        for a = 1:N
            u(a,aa) = u_new(a,aa);
        end
    end
end
%calculate scaling discrepency
ddd = f_comparison./u;

0 个答案:

没有答案