线性求解器实现

时间:2015-05-18 05:00:14

标签: java linear-programming fluid-dynamics

我遇到了线性求解器的以下实现,用于实现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。但是在这段代码中似乎没有任何向量,只有矩阵。

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

0 个答案:

没有答案