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