Что делает оператор обратной косой черты (\) Джулии на двух матрицах? - PullRequest
1 голос
/ 11 октября 2019

В контексте матриц, если у нас есть A\B, какая математическая операция выполняется на A и B. Документация, кажется, утверждает, что это деление, но я думал, что деление было недопустимой операцией для матриц.

Ответы [ 2 ]

2 голосов
/ 12 октября 2019

Вы можете выяснить, какой метод вызывается с помощью @which (или @edit)

A = randn(10,2)
b = randn(10)
@which A\b

, что приводит к реализации

function (\)(A::AbstractMatrix, B::AbstractVecOrMat)
    require_one_based_indexing(A, B)
    m, n = size(A)
    if m == n
        if istril(A)
            if istriu(A)
                return Diagonal(A) \ B
            else
                return LowerTriangular(A) \ B
            end
        end
        if istriu(A)
            return UpperTriangular(A) \ B
        end
        return lu(A) \ B
    end
    return qr(A,Val(true)) \ B
end

, где вы можете видеть, чтоКакой метод используется, зависит от структуры матриц. При отсутствии какой-либо полезной структуры выполняется QR-факторизация, с помощью которой решается линейная система.

2 голосов
/ 11 октября 2019

В документации Юлии по линейной алгебре есть объяснение здесь . «Для входных матриц A и B результат X таков, что A * X == B».

В контексте квадратной матрицы A, A\B возвращает inverse(A) * B.

...