我是傅里叶变换的新手,我需要用它来解决泊松方程
-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
uhat_k
uhat
从u
计算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
(即傅立叶求和中的索引)必须以这种方式运行?
我对FFT不太了解;但是,如果您在stats.stackexchange上发布相同的问题,则可能会获得更多帮助,因为这是关于哪种统计方法/解释而不是如何以编程方式进行的问题。
对不起,我无法提供更多帮助!