我实现了一个有限差分方案来求解 C 中二维网格中的泊松方程。我使用 Jacobi 迭代来求解系统。一切正常,直到我使用 while 循环检查是否该停止迭代(使用 for 循环很容易)。在我关注的笔记上写着我必须计算以下内容:
为了. 和作为当前的解决方案和上一次迭代。显然它们是二维数组。
我尝试执行以下操作:
// Iterations
double delta=(tau+1), temp_delta;
#ifdef _OPENMP
wt1=omp_get_wtime();
#endif
do {
for(i=1;i<y-1;i++) {
for(j=1;j<x-1;j++) {
uNew[i*x+j] = 0.25 * (u[(i-1)*x+j] + u[i*x+(j+1)] + u[i*x+(j-1)] + u[(i+1)*x+j] - dx*dy*func(i,j,dx,dy));
}
}
// Boundary conditions using g(x,y)
for(j=0;j<x;j++) {
uNew[j] = gunc(0,j,dx,dy);
uNew[(y-1)*x+j] = gunc(y-1,j,dx,dy);
}
for(i=0;i<y;i++) {
uNew[i*x] = gunc(i,0,dx,dy);
uNew[i*x+(x-1)] = gunc(i,x-1,dx,dy);
}
// Check if to terminate Jacobi iteration
for(i=1;i<y-1;i++) {
for(j=1;j<x-1;j++) {
temp_delta = abs(uNew[i*x+j]-u[i*x+j]);
printf("%f ", temp_delta);
if (delta <= temp_delta) {
delta = temp_delta;
}
}
}
// Update solution
for(i=0;i<y;i++) {
for(j=0;j<x;j++) {
u[i*x+j] = uNew[i*x+j];
}
}
} while(delta > tau);
在哪里是公差,是上式的结果,用于找到最大值和和只是包含网格点处解的矩阵。问题是它不起作用。有人可以给我一个提示吗?