public void solve(double[] b, double[] x) // b input and x output
{
int i, ii = 0, ip, j;
double sum;
if (b.Length != n || x.Length != n)
throw new Exception("Bad sizes, must be square");
for (i = 0; i < n; i++)
x[i] = b[i];
for (i = 0; i < n; i++)
{
ip = indx[i];
sum = b[ip];
x[ip] = x[i];
if (ii != 0) for (j = ii - 1; j < i; j++) sum -= lu[i, j] * x[j];
else if (sum != 0.0) ii = i + 1;
x[i] = sum;
}
for (i = n - 1; i >= 0; i--)
{
sum = x[i];
for (j = i + 1; j < n; j++)
sum -= lu[i, j] * x[j];
x[i] = sum / lu[i, i];
}
}