Вы можете выяснить, какой метод вызывается с помощью @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-факторизация, с помощью которой решается линейная система.