public override Vector LtSolve(Vector x, bool UseDiagonal)
{
if (di.Length == x.Size)
{
Vector result = (Vector)x.Clone();
if (UseDiagonal)
{
int n = di.Length - shift_l[shift_l.Length - 1];
result[di.Length - 1] /= di[di.Length - 1];
for (int i = di.Length - 1; i >= n; i--)
{
for (int j = 0; j < shift_l.Length; j++)
result[i - shift_u[j]] -= al[i][j] * result[i];
result[i] /= di[i];
}
}
else
{
int n = di.Length - shift_l[shift_l.Length - 1];
for (int i = di.Length - 1; i >= n; i--)
for (int j = 0; j < shift_l.Length; j++)
result[i - shift_l[j]] -= au[i][j] * result[i];
}
return result;
}
else
throw new Exception("Диагональный формат: Несовпадение размерностей матрицы и вектора в прямом (T) ходе");
}