обратный слэш (\) (\) левое матричное деление.

## Синтаксис

    X = A \ B

## Описание

Обратный слэш означает левое матричное деление. `X=A\B` является решением для `A*X=B`.

Если `A` - квадратная и невырожденная, то `X=A\B` (уникально определённая) эквивалентно `X=inv(A)*B` в точном арифметическом смысле, однако вычисления гораздо точнее и дешевле в арифметике с плавающей запятой. Следовательно, чтобы вычислить решение линейной системы уравнений `A*X=B`, следует использовать оператор "обратный слэш", а функцию `inv` не следует использовать.

В случае, когда `A` - квадратная матрица, решение `X` может быть вычислено либо через LU-разложение, либо через программу линейного решения по методу наименьших квадратов. Если число обусловленности матрицы `A` меньше, чем `1/(10*%eps)` (то есть, если `A` хорошо обусловлена), то используется LU-разложение с перестановками строк матрицы. Если нет (то есть, если `A` плохо обусловлена), то `X` является решением с минимальной нормой, которое минимизирует `||A*X-B||` используя полное ортогональное разложение `A` (то есть `X` - это решение линейной задачи по методу наименьших квадратов).

Если `A` не квадратная, то `X` является решением наименьших квадратов, т.е. `norm(A*X-B)` является минимальной (эвклидова норма). Если ранг матрицы `A` полный, то решение наименьших квадратов, `X=A\B`, является уникально определённым (есть уникальное `X`, которое минимизирует `norm(A*X-B)`). Если ранг матрицы `A` неполный, то решение наименьших квадратов не является уникальным, и `X=A\B`, в общем, не является решением с минимальной нормой (решение минимальной нормы равно `X=pinv(A)*B`).

`A.\B` является матрицей с `(i,j)`-тым элементом, равным `A(i,j)\B(i,j)`. Если `A` (или `B`) является скаляром, то `A.\B` эквивалентно `A*ones(B).\B` (или `A.\(B*ones(A))`.

`A\.B` является оператором без предопределённого значения. Он может использоваться для определения нового оператора (см. перегрузку) с тем же самым приоритетом что и `*` или `/`.

## Примеры

    A=[
       9.   -36.    30.
      -36.   192.  -180.
       30.  -180.   180.
    ];
    b=[
       3.
      -24.
       30.
    ];
    x=A\b
    A*x-b // близко к нулю

    A=rand(3,2);
    b=[1;1;1];
    x=A\b;
    y=pinv(A)*b;
    x-y
    A=rand(2,3);b=[1;1];
    x=A\b;
    y=pinv(A)*b;
    x-y, A*x-b, A*y-b

    // если ранг неполный
    A=rand(3,1)*rand(1,2);
    b=[1;1;1];
    x=A\b;
    y=pinv(A)*b;
    A*x-b, A*y-b
    A=rand(2,1)*rand(1,3);
    b=[1;1];
    x=A\b;
    y=pinv(A)*b;
    A*x-b, A*y-b

    // Проверка эффективности нескольких программ решения систем линейных уравнений

    [A,descr,ref,mtype] = ReadHBSparse(SCI+"/modules/umfpack/demos/bcsstk24.rsa");

    b = zeros(size(A,1),1);

    tic();
    res = umfpack(A,'\',b);
    mprintf('\nвремя, необходимое для решения системы с помощью umfpack: %.3f\n',toc());

    tic();
    res = linsolve(A,b);
    mprintf('\nвремя, необходимое для решения системы с помощью linsolve: %.3f\n',toc());

    tic();
    res = A\b;
    mprintf('\nвремя, необходимое для решения системы с помощью оператора ""обратный слэш"": %.3f\n',toc());

## Смотрите также

- slash
- inv
- pinv
- linsolve
- umfpack
- kron .\.
- overloading

## История

5.5.0 Пороговый уровень, который переключает при вычислении A\B между исключением по методу Гаусса и перестановкой строк матрицы, уменьшен от sqrt(eps) до eps.