Linear Algebra¶
Linear algebra functions in Julia are largely implemented by calling functions from LAPACK. Sparse factorizations call functions from SuiteSparse.
-
*(A, B)¶ Matrix multiplication
-
\(A, B)¶ Matrix division using a polyalgorithm. For input matrices
AandB, the resultXis such thatA*X == BwhenAis square. The solver that is used depends upon the structure ofA. A direct solver is used for upper- or lower triangularA. For HermitianA(equivalent to symmetricAfor non-complexA) the BunchKaufman factorization is used. Otherwise an LU factorization is used. For rectangularAthe result is the minimum-norm least squares solution computed by reducingAto bidiagonal form and solving the bidiagonal least squares problem. For sparse, squareAthe LU factorization (from UMFPACK) is used.
-
dot(x, y)¶ Compute the dot product
-
cross(x, y)¶ Compute the cross product of two 3-vectors
-
norm(a)¶ Compute the norm of a
Vectoror aMatrix
-
lu(A) → L, U, P¶ Compute the LU factorization of
A, such thatP*A = L*U.
-
lufact(A) → LU¶ Compute the LU factorization of
A, returning anLUobject for denseAor anUmfpackLUobject for sparseA. The individual components of the factorizationFcan be accesed by indexing:F[:L],F[:U], andF[:P](permutation matrix) orF[:p](permutation vector). AnUmfpackLUobject has additional componentsF[:q](the left permutation vector) andRsthe vector of scaling factors. The following functions are available for bothLUandUmfpackLUobjects:size,\anddet. ForLUthere is also aninvmethod. The sparse LU factorization is such thatL*Uis equal to``diagmm(Rs,A)[p,q]``.
-
lufact!(A) → LU¶ lufact!is the same aslufactbut saves space by overwriting the input A, instead of creating a copy. For sparseAthenzvalfield is not overwritten but the index fields,colptrandrowvalare decremented in place, converting from 1-based indices to 0-based indices.
-
chol(A[, LU]) → F¶ Compute Cholesky factorization of a symmetric positive-definite matrix
Aand return the matrixF. IfLUisL(Lower),A = L*L'. IfLUisU(Upper),A = R'*R.
-
cholfact(A[, LU]) → Cholesky¶ Compute the Cholesky factorization of a dense symmetric positive-definite matrix
Aand return aCholeskyobject.LUmay be ‘L’ for using the lower part or ‘U’ for the upper part. The default is to use ‘U’. The triangular matrix can be obtained from the factorizationFwith:F[:L]andF[:U]. The following functions are available forCholeskyobjects:size,\,inv,det. ALAPACK.PosDefExceptionerror is thrown in case the matrix is not positive definite.
-
cholfact(A[, ll]) → CholmodFactor Compute the sparse Cholesky factorization of a sparse matrix
A. IfAis Hermitian its Cholesky factor is determined. IfAis not Hermitian the Cholesky factor ofA*A'is determined. A fill-reducing permutation is used. Methods forsize,solve,\,findn_nzs,diag,detandlogdet. One of the solve methods includes an integer argument that can be used to solve systems involving parts of the factorization only. The optional boolean argument,lldetermines whether the factorization returned is of theA[p,p] = L*L'form, whereLis lower triangular orA[p,p] = diagmm(L,D)*L'form whereLis unit lower triangular andDis a non-negative vector. The default is LDL.
-
cholfact!(A[, LU]) → Cholesky¶ cholfact!is the same ascholfactbut saves space by overwriting the input A, instead of creating a copy.
-
cholpfact(A[, LU]) → CholeskyPivoted¶ Compute the pivoted Cholesky factorization of a symmetric positive semi-definite matrix
Aand return aCholeskyPivotedobject.LUmay be ‘L’ for using the lower part or ‘U’ for the upper part. The default is to use ‘U’. The triangular factors containted in the factorizationFcan be obtained withF[:L]andF[:U], whereas the permutation can be obtained withF[:P]orF[:p]. The following functions are available forCholeskyPivotedobjects:size,\,inv,det. ALAPACK.RankDeficientExceptionerror is thrown in case the matrix is rank deficient.
-
cholpfact!(A[, LU]) → CholeskyPivoted¶ cholpfact!is the same ascholpfactbut saves space by overwriting the input A, instead of creating a copy.
-
qr(A[, thin]) → Q, R¶ Compute the QR factorization of
Asuch thatA = Q*R. Also seeqrfact. The default is to compute a thin factorization.
-
qrfact(A)¶ Compute the QR factorization of
Aand return aQRobject. The coomponents of the factorizationFcan be accessed as follows: the orthogonal matrixQcan be extracted withF[:Q]and the triangular matrixRwithF[:R]. The following functions are available forQRobjects:size,\. WhenQis extracted, the resulting type is theQRPackedQobject, and has the*operator overloaded to support efficient multiplication byQandQ'.
-
qrfact!(A)¶ qrfact!is the same asqrfactbut saves space by overwriting the input A, instead of creating a copy.
-
qrp(A[, thin]) → Q, R, P¶ Compute the QR factorization of
Awith pivoting, such thatA*P = Q*R, Also seeqrpfact. The default is to compute a thin factorization.
-
qrpfact(A) → QRPivoted¶ Compute the QR factorization of
Awith pivoting and return aQRPivotedobject. The components of the factorizationFcan be accessed as follows: the orthogonal matrixQcan be extracted withF[:Q], the triangular matrixRwithF[:R], and the permutation withF[:P]orF[:p]. The following functions are available forQRPivotedobjects:size,\. WhenQis extracted, the resulting type is theQRPivotedQobject, and has the*operator overloaded to support efficient multiplication byQandQ'. AQRPivotedQmatrix can be converted into a regular matrix withfull.
-
qrpfact!(A) → QRPivoted¶ qrpfact!is the same asqrpfactbut saves space by overwriting the input A, instead of creating a copy.
-
sqrtm(A)¶ Compute the matrix square root of
A. IfB = sqrtm(A), thenB*B == Awithin roundoff error.
-
eig(A) → D, V¶ Compute eigenvalues and eigenvectors of A
-
eigvals(A)¶ Returns the eigenvalues of
A.
-
eigmax(A)¶ Returns the largest eigenvalue of
A.
-
eigmin(A)¶ Returns the smallest eigenvalue of
A.
-
eigvecs(A[, eigvals])¶ Returns the eigenvectors of
A.For SymTridiagonal matrices, if the optional vector of eigenvalues
eigvalsis specified, returns the specific corresponding eigenvectors.
-
eigfact(A)¶ Compute the eigenvalue decomposition of
Aand return anEigenobject. IfFis the factorization object, the eigenvalues can be accessed withF[:values]and the eigenvectors withF[:vectors]. The following functions are available forEigenobjects:inv,det.
-
eigfact!(A)¶ eigfact!is the same aseigfactbut saves space by overwriting the input A, instead of creating a copy.
-
hessfact(A)¶ Compute the Hessenberg decomposition of
Aand return aHessenbergobject. IfFis the factorization object, the unitary matrix can be accessed withF[:Q]and the Hessenberg matrix withF[:H]. WhenQis extracted, the resulting type is theHessenbergQobject, and may be converted to a regular matrix withfull.
-
hessfact!(A)¶ hessfact!is the same ashessfactbut saves space by overwriting the input A, instead of creating a copy.
-
schurfact(A) → Schur¶ Computes the Schur factorization of the matrix
A. The (quasi) triangular Schur factor can be obtained from theSchurobjectFwith eitherF[:Schur]orF[:T]and the unitary/orthogonal Schur vectors can be obtained withF[:vectors]orF[:Z]such thatA=F[:vectors]*F[:Schur]*F[:vectors]'. The eigenvalues ofAcan be obtained withF[:values].
-
schur(A) → Schur[:T], Schur[:Z], Schur[:values]¶ See schurfact
-
schurfact(A, B) → GeneralizedSchur Computes the Generalized Schur (or QZ) factorization of the matrices
AandB. The (quasi) triangular Schur factors can be obtained from theSchurobjectFwithF[:S]andF[:T], the left unitary/orthogonal Schur vectors can be obtained withF[:left]orF[:Q]and the right unitary/orthogonal Schur vectors can be obtained withF[:right]orF[:Z]such thatA=F[:left]*F[:S]*F[:right]'andB=F[:left]*F[:T]*F[:right]'. The generalized eigenvalues ofAandBcan be obtained withF[:alpha]./F[:beta].
-
schur(A, B) → GeneralizedSchur[:S], GeneralizedSchur[:T], GeneralizedSchur[:Q], GeneralizedSchur[:Z] See schurfact
-
svdfact(A[, thin]) → SVD¶ Compute the Singular Value Decomposition (SVD) of
Aand return anSVDobject.U,S,VandVtcan be obtained from the factorizationFwithF[:U],F[:S],F[:V]andF[:Vt], such thatA = U*diagm(S)*Vt. Ifthinistrue, an economy mode decomposition is returned. The algorithm producesVtand henceVtis more efficient to extract thanV. The default is to produce a thin decomposition.
-
svdfact!(A[, thin]) → SVD¶ svdfact!is the same assvdfactbut saves space by overwriting the input A, instead of creating a copy. Ifthinistrue, an economy mode decomposition is returned. The default is to produce a thin decomposition.
-
svd(A[, thin]) → U, S, V¶ Compute the SVD of A, returning
U, vectorS, andVsuch thatA == U*diagm(S)*V'. Ifthinistrue, an economy mode decomposition is returned.
-
svdvals(A)¶ Returns the singular values of
A.
-
svdvals!(A)¶ Returns the singular values of
A, while saving space by overwriting the input.
-
svdfact(A, B) → GeneralizedSVD Compute the generalized SVD of
AandB, returning aGeneralizedSVDFactorization object, such thatA = U*D1*R0*Q'andB = V*D2*R0*Q'.
-
svd(A, B) → U, V, Q, D1, D2, R0 Compute the generalized SVD of
AandB, returningU,V,Q,D1,D2, andR0such thatA = U*D1*R0*Q'andB = V*D2*R0*Q'.
-
svdvals(A, B) Return only the singular values from the generalized singular value decomposition of
AandB.
-
triu(M)¶ Upper triangle of a matrix
-
tril(M)¶ Lower triangle of a matrix
-
diag(M[, k])¶ The
k-th diagonal of a matrix, as a vector
-
diagm(v[, k])¶ Construct a diagonal matrix and place
von thek-th diagonal
-
diagmm(matrix, vector)¶ Multiply matrices, interpreting the vector argument as a diagonal matrix. The arguments may occur in the other order to multiply with the diagonal matrix on the left.
-
Tridiagonal(dl, d, du)¶ Construct a tridiagonal matrix from the lower diagonal, diagonal, and upper diagonal
-
Bidiagonal(dv, ev, isupper)¶ Constructs an upper (isupper=true) or lower (isupper=false) bidiagonal matrix using the given diagonal (dv) and off-diagonal (ev) vectors
-
Woodbury(A, U, C, V)¶ Construct a matrix in a form suitable for applying the Woodbury matrix identity
-
rank(M)¶ Compute the rank of a matrix
-
norm(A[, p]) Compute the
p-norm of a vector or a matrix.pis2by default, if not provided. IfAis a vector,norm(A, p)computes thep-norm.norm(A, Inf)returns the largest value inabs(A), whereasnorm(A, -Inf)returns the smallest. IfAis a matrix, valid values forpare1,2, orInf. In order to compute the Frobenius norm, usenormfro.
-
normfro(A)¶ Compute the Frobenius norm of a matrix
A.
-
cond(M[, p])¶ Matrix condition number, computed using the p-norm.
pis 2 by default, if not provided. Valid values forpare1,2, orInf.
-
trace(M)¶ Matrix trace
-
det(M)¶ Matrix determinant
-
inv(M)¶ Matrix inverse
-
pinv(M)¶ Moore-Penrose inverse
-
null(M)¶ Basis for null space of M.
-
repmat(A, n, m)¶ Construct a matrix by repeating the given matrix
ntimes in dimension 1 andmtimes in dimension 2.
-
kron(A, B)¶ Kronecker tensor product of two vectors or two matrices.
-
linreg(x, y)¶ Determine parameters
[a, b]that minimize the squared error betweenyanda+b*x.
-
linreg(x, y, w) Weighted least-squares linear regression.
-
expm(A)¶ Matrix exponential.
-
issym(A)¶ Test whether a matrix is symmetric.
-
isposdef(A)¶ Test whether a matrix is positive-definite.
-
istril(A)¶ Test whether a matrix is lower-triangular.
-
istriu(A)¶ Test whether a matrix is upper-triangular.
-
ishermitian(A)¶ Test whether a matrix is hermitian.
-
transpose(A)¶ The transpose operator (.’).
-
ctranspose(A)¶ The conjugate transpose operator (‘).
BLAS Functions¶
This module provides wrappers for some of the BLAS functions for
linear algebra. Those BLAS functions that overwrite one of the input
arrays have names ending in '!'.
Usually a function has 4 methods defined, one each for Float64,
Float32, Complex128 and Complex64 arrays.
-
copy!(n, X, incx, Y, incy)¶ Copy
nelements of arrayXwith strideincxto arrayYwith strideincy. ReturnsY.
-
dot(n, X, incx, Y, incy) Dot product of two vectors consisting of
nelements of arrayXwith strideincxandnelements of arrayYwith strideincy. There are nodotmethods forComplexarrays.
-
nrm2(n, X, incx)¶ 2-norm of a vector consisting of
nelements of arrayXwith strideincx.
-
axpy!(n, a, X, incx, Y, incy)¶ Overwrite
Ywitha*X + Y. ReturnsY.
-
syrk!(uplo, trans, alpha, A, beta, C)¶ Rank-k update of the symmetric matrix
Casalpha*A*A.' + beta*Coralpha*A.'*A + beta*Caccording to whethertransis ‘N’ or ‘T’. Whenuplois ‘U’ the upper triangle ofCis updated (‘L’ for lower triangle). ReturnsC.
-
syrk(uplo, trans, alpha, A)¶ Returns either the upper triangle or the lower triangle, according to
uplo(‘U’ or ‘L’), ofalpha*A*A.'oralpha*A.'*A, according totrans(‘N’ or ‘T’).
-
herk!(uplo, trans, alpha, A, beta, C)¶ Methods for complex arrays only. Rank-k update of the Hermitian matrix
Casalpha*A*A' + beta*Coralpha*A'*A + beta*Caccording to whethertransis ‘N’ or ‘T’. Whenuplois ‘U’ the upper triangle ofCis updated (‘L’ for lower triangle). ReturnsC.
-
herk(uplo, trans, alpha, A)¶ Methods for complex arrays only. Returns either the upper triangle or the lower triangle, according to
uplo(‘U’ or ‘L’), ofalpha*A*A'oralpha*A'*A, according totrans(‘N’ or ‘T’).
-
gbmv!(trans, m, kl, ku, alpha, A, x, beta, y)¶ Update vector
yasalpha*A*x + beta*yoralpha*A'*x + beta*yaccording totrans(‘N’ or ‘T’). The matrixAis a general band matrix of dimensionmbysize(A,2)withklsub-diagonals andkusuper-diagonals. Returns the updatedy.
-
gbmv(trans, m, kl, ku, alpha, A, x, beta, y)¶ Returns
alpha*A*xoralpha*A'*xaccording totrans(‘N’ or ‘T’). The matrixAis a general band matrix of dimensionmbysize(A,2)withklsub-diagonals andkusuper-diagonals.
-
sbmv!(uplo, k, alpha, A, x, beta, y)¶ Update vector
yasalpha*A*x + beta*ywhereAis a a symmetric band matrix of ordersize(A,2)withksuper-diagonals stored in the argumentA. The storage layout forAis described the reference BLAS module, level-2 BLAS at <http://www.netlib.org/lapack/explore-html/>.Returns the updated
y.
-
sbmv(uplo, k, alpha, A, x)¶ Returns
alpha*A*xwhereAis a symmetric band matrix of ordersize(A,2)withksuper-diagonals stored in the argumentA.
-
gemm!(tA, tB, alpha, A, B, beta, C)¶ Update
Casalpha*A*B + beta*Cor the other three variants according totA(transposeA) andtB. Returns the updatedC.
-
gemm(tA, tB, alpha, A, B)¶ Returns
alpha*A*Bor the other three variants according totA(transposeA) andtB.