The equations are here 嗨!我尝试使用C ++中的FD方法求解3个pde方程,但我不知道为什么总是得到一半的准确答案。这些方程式是因变量。我对g(x,y)和g(y,x)有问题。当我在等式3中删除g(y,x)时,结果不变。但是,当我删除g(x,y)时,我得到零,所以我认为我们需要对依赖变量做一些事情。我不知道。我希望得到帮助
if(g[i][k][j]!=g[k][i][j] && i!=k)
u[i][k][j+1]=u[i][k][j]*(1.0 - 2.0*dt)
+(dt/(dx*dx))*(g[i+1][k][j]- 2.0*g[i][k][j]+g[i-1][k][j])
+(dt/(dx*dx))*(g[k+1][i][j]- 2.0*g[k][i][j]+g[k-1][i][j])
+(dt/(dy*dy))*(g[i][k+1][j]-2.0*g[i][k][j]+g[i][k-1][j])
+(dt/(dy*dy))*(g[k][i+1][j]-2.0*g[k][i][j]+g[k][i-1][j]); //(eq 1)
g[i][k][j+1]=g[i][k][j]*(1 - dt)
+dt*u[i][k][j]
+(dt/(dy*dy))*(v[i][k+1][j]-2*v[i][k][j]+v[i][k-1][j])
+(dt/(dx*dx))*(v[i+1][k][j]-2*v[i][k][j]+v[i-1][k][j]); //(eq 2)
v[i][k][j+1]=v[i][k][j]+(g[k][i][j] + g[i][k][j])*dt; //(eq 3)
答案 0 :(得分:2)
从您的图片和代码猜测,我认为您可能缺少一对牙套
if(i!=k && g[i][k][j]!=g[k][i][j]) {
u[i][k][j+1] = ...;
g[i][k][j+1] = ...;
v[i][k][j+1] = ...;
}
还要注意,如果类型为g[i][k][j]!=g[k][i][j]
或float
(或double
,complext<float>
等),则比较complex<double>
可能会失败,请参见{ {3}}。