From 0df153b66ceba0c340425764508533555c515b8d Mon Sep 17 00:00:00 2001 From: Douglas Bates Date: Thu, 1 Mar 2018 13:46:22 -0600 Subject: [PATCH] Test on nightly only, start documentation switch --- .gitignore | 1 + .travis.yml | 1 - src/generics.jl | 45 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dfbde7c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +docs/build diff --git a/.travis.yml b/.travis.yml index f06f4ab..de163e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ os: - linux - osx julia: - - 0.6 - nightly notifications: email: false diff --git a/src/generics.jl b/src/generics.jl index 2c0dc4d..5436779 100644 --- a/src/generics.jl +++ b/src/generics.jl @@ -28,16 +28,59 @@ pdadd(a::Matrix{T}, b::AbstractPDMat{S}) where {T<:Real, S<:Real} = pdadd!(simil ## whiten and unwhiten - whiten!(a::AbstractPDMat, x::StridedVecOrMat) = whiten!(x, a, x) unwhiten!(a::AbstractPDMat, x::StridedVecOrMat) = unwhiten!(x, a, x) +""" + whiten(a::AbstractPDMat, x::StridedVecOrMat) + whiten!(a::AbstractPDMat, x::StridedVecOrMat) + whiten!(r::StridedVecOrMat, a::AbstractPDMat, x::StridedVecOrMat) + unwhiten(a::AbstractPDMat, x::StridedVecOrMat) + unwhiten!(a::AbstractPDMat, x::StridedVecOrMat) + unwhiten!(r::StridedVecOrMat, a::AbstractPDMat, x::StridedVecOrMat) + +Allocating and in-place versions of the `whiten`ing transform (or its inverse) defined by `a` applied to `x` + +If the covariance of `x` is `a` then the covariance of the result will be `I`. +The name `whiten` indicates that this function transforms a correlated multivariate random +variable to "white noise". + +```jldoctest +julia> using PDMats + +julia> X = vcat(ones(4)', (1:4)') +2×4 Array{Float64,2}: + 1.0 1.0 1.0 1.0 + 1.0 2.0 3.0 4.0 + +julia> a = PDMat(X * X') +PDMat{Float64,Array{Float64,2}}(2, [4.0 10.0; 10.0 30.0], Cholesky{Float64,Array{Float64,2}}([2.0 5.0; 10.0 2.23607], 'U', 0)) + +julia> W = whiten(a, X) +2×4 Array{Float64,2}: + 0.5 0.5 0.5 0.5 + -0.67082 -0.223607 0.223607 0.67082 + +julia> W * W' +2×2 Array{Float64,2}: + 1.0 0.0 + 0.0 1.0 +``` +""" whiten(a::AbstractPDMat, x::StridedVecOrMat) = whiten!(similar(x), a, x) unwhiten(a::AbstractPDMat, x::StridedVecOrMat) = unwhiten!(similar(x), a, x) ## quad +""" + quad(a::AbstractPDMat, x::StridedVecOrMat) + +Return the value of the quadratic form defined by `a` applied to `x` + +If `x` is a vector the quadratic form is `x' * a * x`. If `x` is a matrix +the quadratic form is applied column-wise. +""" function quad(a::AbstractPDMat{T}, x::StridedMatrix{S}) where {T<:Real, S<:Real} @check_argdims dim(a) == size(x, 1) quad!(Array{promote_type(T, S)}(uninitialized, size(x,2)), a, x)