fix incorrect folder name for julia-0.6.x
Former-commit-id: ef2c7401e0876f22d2f7762d182cfbcd5a7d9c70
This commit is contained in:
294
julia-0.6.3/share/julia/base/linalg/linalg.jl
Normal file
294
julia-0.6.3/share/julia/base/linalg/linalg.jl
Normal file
@@ -0,0 +1,294 @@
|
||||
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
||||
|
||||
module LinAlg
|
||||
|
||||
import Base: \, /, *, ^, +, -, ==
|
||||
import Base: A_mul_Bt, At_ldiv_Bt, A_rdiv_Bc, At_ldiv_B, Ac_mul_Bc, A_mul_Bc, Ac_mul_B,
|
||||
Ac_ldiv_B, Ac_ldiv_Bc, At_mul_Bt, A_rdiv_Bt, At_mul_B
|
||||
import Base: USE_BLAS64, abs, big, broadcast, ceil, conj, convert, copy, copy!,
|
||||
ctranspose, eltype, eye, findmax, findmin, fill!, floor, full, getindex,
|
||||
hcat, imag, indices, inv, isapprox, kron, length, IndexStyle, map,
|
||||
ndims, oneunit, parent, power_by_squaring, print_matrix, promote_rule, real, round,
|
||||
setindex!, show, similar, size, transpose, trunc, typed_hcat
|
||||
using Base: promote_op, _length, iszero, @pure, @propagate_inbounds, IndexLinear,
|
||||
reduce, hvcat_fill, typed_vcat, promote_typeof
|
||||
# We use `_length` because of non-1 indices; releases after julia 0.5
|
||||
# can go back to `length`. `_length(A)` is equivalent to `length(linearindices(A))`.
|
||||
|
||||
export
|
||||
# Modules
|
||||
LAPACK,
|
||||
BLAS,
|
||||
|
||||
# Types
|
||||
RowVector,
|
||||
ConjArray,
|
||||
ConjVector,
|
||||
ConjMatrix,
|
||||
SymTridiagonal,
|
||||
Tridiagonal,
|
||||
Bidiagonal,
|
||||
Factorization,
|
||||
BunchKaufman,
|
||||
Cholesky,
|
||||
CholeskyPivoted,
|
||||
Eigen,
|
||||
GeneralizedEigen,
|
||||
GeneralizedSVD,
|
||||
GeneralizedSchur,
|
||||
Hessenberg,
|
||||
LU,
|
||||
LDLt,
|
||||
QR,
|
||||
QRPivoted,
|
||||
LQ,
|
||||
Schur,
|
||||
SVD,
|
||||
Hermitian,
|
||||
Symmetric,
|
||||
LowerTriangular,
|
||||
UpperTriangular,
|
||||
Diagonal,
|
||||
UniformScaling,
|
||||
|
||||
# Functions
|
||||
axpy!,
|
||||
bkfact,
|
||||
bkfact!,
|
||||
chol,
|
||||
cholfact,
|
||||
cholfact!,
|
||||
cond,
|
||||
condskeel,
|
||||
copy!,
|
||||
copy_transpose!,
|
||||
cross,
|
||||
ctranspose,
|
||||
ctranspose!,
|
||||
det,
|
||||
diag,
|
||||
diagind,
|
||||
diagm,
|
||||
diff,
|
||||
dot,
|
||||
eig,
|
||||
eigfact,
|
||||
eigfact!,
|
||||
eigmax,
|
||||
eigmin,
|
||||
eigs,
|
||||
eigvals,
|
||||
eigvals!,
|
||||
eigvecs,
|
||||
expm,
|
||||
eye,
|
||||
factorize,
|
||||
givens,
|
||||
gradient,
|
||||
hessfact,
|
||||
hessfact!,
|
||||
isdiag,
|
||||
ishermitian,
|
||||
isposdef,
|
||||
isposdef!,
|
||||
issymmetric,
|
||||
istril,
|
||||
istriu,
|
||||
kron,
|
||||
ldltfact!,
|
||||
ldltfact,
|
||||
linreg,
|
||||
logabsdet,
|
||||
logdet,
|
||||
logm,
|
||||
lu,
|
||||
lufact,
|
||||
lufact!,
|
||||
lyap,
|
||||
norm,
|
||||
normalize,
|
||||
normalize!,
|
||||
nullspace,
|
||||
ordschur!,
|
||||
ordschur,
|
||||
peakflops,
|
||||
pinv,
|
||||
qr,
|
||||
qrfact!,
|
||||
qrfact,
|
||||
lq,
|
||||
lqfact!,
|
||||
lqfact,
|
||||
rank,
|
||||
scale!,
|
||||
schur,
|
||||
schurfact!,
|
||||
schurfact,
|
||||
sqrtm,
|
||||
svd,
|
||||
svdfact!,
|
||||
svdfact,
|
||||
svds,
|
||||
svdvals!,
|
||||
svdvals,
|
||||
sylvester,
|
||||
trace,
|
||||
transpose,
|
||||
transpose!,
|
||||
transpose_type,
|
||||
tril,
|
||||
triu,
|
||||
tril!,
|
||||
triu!,
|
||||
vecdot,
|
||||
vecnorm,
|
||||
|
||||
# Operators
|
||||
\,
|
||||
/,
|
||||
A_ldiv_B!,
|
||||
A_ldiv_Bc,
|
||||
A_ldiv_Bt,
|
||||
A_mul_B!,
|
||||
A_mul_Bc,
|
||||
A_mul_Bc!,
|
||||
A_mul_Bt,
|
||||
A_mul_Bt!,
|
||||
A_rdiv_Bc,
|
||||
A_rdiv_Bt,
|
||||
Ac_ldiv_B,
|
||||
Ac_ldiv_Bc,
|
||||
Ac_ldiv_B!,
|
||||
Ac_mul_B,
|
||||
Ac_mul_B!,
|
||||
Ac_mul_Bc,
|
||||
Ac_mul_Bc!,
|
||||
Ac_rdiv_B,
|
||||
Ac_rdiv_Bc,
|
||||
At_ldiv_B,
|
||||
At_ldiv_Bt,
|
||||
At_ldiv_B!,
|
||||
At_mul_B,
|
||||
At_mul_B!,
|
||||
At_mul_Bt,
|
||||
At_mul_Bt!,
|
||||
At_rdiv_B,
|
||||
At_rdiv_Bt,
|
||||
|
||||
# Constants
|
||||
I
|
||||
|
||||
const BlasFloat = Union{Float64,Float32,Complex128,Complex64}
|
||||
const BlasReal = Union{Float64,Float32}
|
||||
const BlasComplex = Union{Complex128,Complex64}
|
||||
|
||||
if USE_BLAS64
|
||||
const BlasInt = Int64
|
||||
else
|
||||
const BlasInt = Int32
|
||||
end
|
||||
|
||||
# Check that stride of matrix/vector is 1
|
||||
# Writing like this to avoid splatting penalty when called with multiple arguments,
|
||||
# see PR 16416
|
||||
@inline chkstride1(A...) = _chkstride1(true, A...)
|
||||
@noinline _chkstride1(ok::Bool) = ok || error("matrix does not have contiguous columns")
|
||||
@inline _chkstride1(ok::Bool, A, B...) = _chkstride1(ok & (stride(A, 1) == 1), B...)
|
||||
|
||||
"""
|
||||
LinAlg.checksquare(A)
|
||||
|
||||
Check that a matrix is square, then return its common dimension.
|
||||
For multiple arguments, return a vector.
|
||||
|
||||
# Example
|
||||
|
||||
```jldoctest
|
||||
julia> A = ones(4,4); B = zeros(5,5);
|
||||
|
||||
julia> LinAlg.checksquare(A, B)
|
||||
2-element Array{Int64,1}:
|
||||
4
|
||||
5
|
||||
```
|
||||
"""
|
||||
function checksquare(A)
|
||||
m,n = size(A)
|
||||
m == n || throw(DimensionMismatch("matrix is not square: dimensions are $(size(A))"))
|
||||
m
|
||||
end
|
||||
|
||||
function checksquare(A...)
|
||||
sizes = Int[]
|
||||
for a in A
|
||||
size(a,1)==size(a,2) || throw(DimensionMismatch("matrix is not square: dimensions are $(size(a))"))
|
||||
push!(sizes, size(a,1))
|
||||
end
|
||||
return sizes
|
||||
end
|
||||
|
||||
function char_uplo(uplo::Symbol)
|
||||
if uplo == :U
|
||||
'U'
|
||||
elseif uplo == :L
|
||||
'L'
|
||||
else
|
||||
throw(ArgumentError("uplo argument must be either :U (upper) or :L (lower)"))
|
||||
end
|
||||
end
|
||||
|
||||
copy_oftype(A::AbstractArray{T}, ::Type{T}) where {T} = copy(A)
|
||||
copy_oftype(A::AbstractArray{T,N}, ::Type{S}) where {T,N,S} = convert(AbstractArray{S,N}, A)
|
||||
|
||||
include("conjarray.jl")
|
||||
include("transpose.jl")
|
||||
include("rowvector.jl")
|
||||
|
||||
include("exceptions.jl")
|
||||
include("generic.jl")
|
||||
|
||||
include("blas.jl")
|
||||
import .BLAS: gemv! # consider renaming gemv! in matmul
|
||||
include("matmul.jl")
|
||||
include("lapack.jl")
|
||||
|
||||
include("dense.jl")
|
||||
include("tridiag.jl")
|
||||
include("triangular.jl")
|
||||
|
||||
include("factorization.jl")
|
||||
include("qr.jl")
|
||||
include("hessenberg.jl")
|
||||
include("lq.jl")
|
||||
include("eigen.jl")
|
||||
include("svd.jl")
|
||||
include("symmetric.jl")
|
||||
include("cholesky.jl")
|
||||
include("lu.jl")
|
||||
include("bunchkaufman.jl")
|
||||
include("diagonal.jl")
|
||||
include("bidiag.jl")
|
||||
include("uniformscaling.jl")
|
||||
include("givens.jl")
|
||||
include("special.jl")
|
||||
include("bitarray.jl")
|
||||
include("ldlt.jl")
|
||||
include("schur.jl")
|
||||
|
||||
|
||||
include("arpack.jl")
|
||||
include("arnoldi.jl")
|
||||
|
||||
function __init__()
|
||||
try
|
||||
BLAS.check()
|
||||
if BLAS.vendor() == :mkl
|
||||
ccall((:MKL_Set_Interface_Layer, Base.libblas_name), Void, (Cint,), USE_BLAS64 ? 1 : 0)
|
||||
end
|
||||
catch ex
|
||||
Base.showerror_nostdio(ex,
|
||||
"WARNING: Error during initialization of module LinAlg")
|
||||
end
|
||||
end
|
||||
|
||||
end # module LinAlg
|
||||
Reference in New Issue
Block a user