2

我遇到了以下线性求解器的实现,它用于实现 Jos Stam 的稳定流体方法:

/**
 * Iterative linear system solver using the Gauss-sidel
 * relaxation technique. Room for much improvement here...
 **/
void linearSolver(int b, float[] x, float[] x0, float a, float c)
{
    for (int k = 0; k < 20; k++)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                x[I(i, j)] = (a * ( x[I(i-1, j)] + x[I(i+1, j)]
                                +   x[I(i, j-1)] + x[I(i, j+1)])
                                +  x0[I(i, j)]) / c;
            }
        }
        setBoundry(b, x);
    }
}

(来自http://www.multires.caltech.edu/teaching/demos/java/FluidSolver.java的实现)

我已经能够收集xx0是矩阵,其中I只是一个简单的数组索引函数,并且b只是一个要设置边界条件的标志。

但我不确定这段代码到底在做什么。我认为线性求解器通常会尝试x计算Ax = b. 但是这段代码中似乎没有任何向量,只有矩阵。

有谁知道这段代码是如何工作的?我试图通过预处理共轭梯度的方法使其更有效。但我不明白这里的参考实现。

4

0 回答 0