C++ 全零Neumann边界条件下poisson方程的快速Fourier-cosine变换

C++ 全零Neumann边界条件下poisson方程的快速Fourier-cosine变换,c++,math,fft,differential-equations,C++,Math,Fft,Differential Equations,我试图用FFTW3库中的快速傅里叶余弦变换在矩形域中求解泊松方程 四边的边界条件为零Neumann边界条件 方程d^u/dx^2+d^2u/dy^2=-f 随着f=cos(x)+cos(y),域[-pi-pi-pi] 精确解是u=f 函数f满足Neumann边界条件 通过使用傅里叶变换驱动方程,我们得到: U=F/(lamda(i)+lamda(j)) 这里lamda(k)=2*(1-cos(i/(n0-1))) 然后对U进行逆变换,得到较小的U 然而,和精确解相比,我仍然得到了错误的结果

我试图用FFTW3库中的快速傅里叶余弦变换在矩形域中求解泊松方程

四边的边界条件为零Neumann边界条件

  • 方程
    d^u/dx^2+d^2u/dy^2=-f
  • 随着
    f=cos(x)+cos(y)
    ,域
    [-pi-pi-pi]
  • 精确解是
    u=f
  • 函数
    f
    满足Neumann边界条件
  • 通过使用傅里叶变换驱动方程,我们得到:
  • U=F/(lamda(i)+lamda(j))
  • 这里
    lamda(k)=2*(1-cos(i/(n0-1)))
  • 然后对
    U
    进行逆变换,得到较小的
    U
然而,和精确解相比,我仍然得到了错误的结果


你能帮帮我吗?非常感谢你

这是我的密码

#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int n0=64;
int n1=64;
int N=n0*n1;
双pi=3.14159265359;
双L=2.*π;
双dx=L/(n0);
双精度*in1=新双精度[N];
双精度*in2=新双精度[N];
双精度*out1=新双精度[N];
双精度*out2=新双精度[N];
double*X=新的double[N];
双精度*Y=新双精度[N];
fftw_计划p,q;
int i,j;
p=fftw_平面图_r2r_2d(n0、n1、in1、out1、fftw_REDFT00、fftw_REDFT00、fftw_估计);
q=fftw_平面图_r2r_2d(n0、n1、in2、out2、fftw_REDFT00、fftw_REDFT00、fftw_估计);

对于(i=0;我能请你帮我吗?1.写下你是如何为我们这些懒得在没有背景知识的情况下分析你的代码的人解决这个问题的。2.你所说的快速傅立叶余弦变换是什么意思?DFCT不是DFFT。3.你想要的解决方案输出是什么?想要一组点、函数还是什么作为输出.哪些数据已知,哪些数据未知?