泊松方程的FFT

问题描述 投票:0回答:1

我是傅里叶变换的新手,我需要用它来解决泊松方程

-u''(x)= f(x),其中f(x)= sin(2 * pi * x)在[0,1]中且u(0)= u(1)

我知道uhat_k=(fhat_k)/(k^2)对于每一个不同于0的k,并且对k=0我强加uhat_0=0.

所以,我要做的是

  • fhat_k计算fft
  • 通过上述公式每k计算uhat_k
  • 通过uhatu计算ifft

我的问题是,我不知道我的结果是否很好,而且最重要的是,我不知道我转换和反转换的方式是否正确,因为我也看到了this answer并且它写道在系数的计算中,我需要除以我没有的项。我很确定这是我的问题。

这是我的Python代码

import numpy as np
from numpy.fft import fft, ifft
import matplotlib.pyplot as plt
from math import pi

M=50
a=0
b=1
x=np.linspace(a,b,M+1)
x=x[0:-1]

def rhs(x):
    return np.sin(2*pi*x)

ghat=fft( rhs(x) )
k = (2*pi)/(b-a)*[0 : (m / 2 - 1) (- m / 2) : (-1)];

uhat=np.zeros(len(x))
for i in range(len(x)):
    if (k[i]==0):
        uhat[i]=0
    else:
        uhat[i]=ghat[i]/(k[i]**2)

u = ifft(uhat)
plt.plot(x,u,'-o')
plt.show()

编辑

我已经按照JackOlanter's答案中给出的MatLab实现更新了我的代码。我唯一更改的是k,但现在我不明白为什么它可以“运行”。我的意思是,为什么索引k(即傅立叶求和中的索引)必须以这种方式运行?

python numpy fft numeric
1个回答
0
投票

我对FFT不太了解;但是,如果您在stats.stackexchange上发布相同的问题,则可能会获得更多帮助,因为这是关于哪种统计方法/解释而不是如何以编程方式进行的问题。

对不起,我无法提供更多帮助!

© www.soinside.com 2019 - 2024. All rights reserved.