Skip to content

Commit 3771108

Browse files
authored
Merge pull request #11 from alyst/more_matrix_vector
Add f(x) = A*x, A\x
2 parents 32b8219 + 8af7790 commit 3771108

File tree

3 files changed

+52
-5
lines changed

3 files changed

+52
-5
lines changed

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ version = "0.1.1"
66

77
[deps]
88
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
9+
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
910
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1011

1112
[compat]
12-
julia="1"
13+
julia = "1"
1314

1415
[extras]
1516
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

src/DiffTests.jl

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module DiffTests
22

3-
using LinearAlgebra: det, norm, dot, tr
3+
using LinearAlgebra: det, norm, dot, tr, Diagonal, LowerTriangular, UpperTriangular
4+
using SparseArrays: sparse
45
using Statistics: mean
56

67
#=
@@ -249,6 +250,43 @@ end
249250
const INPLACE_ARRAY_TO_ARRAY_FUNCS = (chebyquad!, brown_almost_linear!, trigonometric!,
250251
mutation_test_1!, mutation_test_2!)
251252

253+
############################
254+
# f(x::VecOrMat)::VecOrMat #
255+
############################
256+
257+
diag_matrix(::Type{T}, n::Integer) where T<:Real =
258+
Diagonal(LinRange(convert(T, 0.01), convert(T, 100.0), n))
259+
diag_matrix(x::VecOrMat) = diag_matrix(Float64, size(x, 1))
260+
261+
lehmer_matrix(::Type{T}, n::Integer) where T<:Real =
262+
[convert(T, min(i, j)/max(i, j)) for i in 1:n, j in 1:n]
263+
lehmer_matrix(x::VecOrMat) = lehmer_matrix(Float64, size(x, 1))
264+
265+
test_matrix = lehmer_matrix
266+
267+
# left multiplication by a constant matrix
268+
diag_lmul(x::VecOrMat) = diag_matrix(x) * x
269+
dense_lmul(x::VecOrMat) = test_matrix(x) * x
270+
utriag_lmul(x::VecOrMat) = UpperTriangular(test_matrix(x)) * x
271+
ltriag_lmul(x::VecOrMat) = LowerTriangular(test_matrix(x)) * x
272+
sparse_lmul(x::VecOrMat) = sparse(test_matrix(x)) * x
273+
sp_utriag_lmul(x::VecOrMat) = UpperTriangular(sparse(test_matrix(x))) * x
274+
sp_ltriag_lmul(x::VecOrMat) = LowerTriangular(sparse(test_matrix(x))) * x
275+
276+
# left division by a constant matrix
277+
diag_ldiv(x::VecOrMat) = diag_matrix(x) \ x
278+
dense_ldiv(x::VecOrMat) = test_matrix(x) \ x
279+
utriag_ldiv(x::VecOrMat) = UpperTriangular(test_matrix(x)) \ x
280+
ltriag_ldiv(x::VecOrMat) = LowerTriangular(test_matrix(x)) \ x
281+
sparse_ldiv(x::VecOrMat) = sparse(test_matrix(x)) \ x
282+
sp_utriag_ldiv(x::VecOrMat) = UpperTriangular(sparse(test_matrix(x))) \ x
283+
sp_ltriag_ldiv(x::VecOrMat) = LowerTriangular(sparse(test_matrix(x))) \ x
284+
285+
const VECTOR_TO_VECTOR_FUNCS = (diag_lmul, dense_lmul, utriag_lmul, ltriag_lmul,
286+
sparse_lmul, sp_utriag_lmul, sp_ltriag_lmul,
287+
diag_ldiv, utriag_ldiv, ltriag_ldiv,
288+
sparse_ldiv, sp_utriag_ldiv, sp_ltriag_ldiv,)
289+
252290
######################
253291
# f(x::Array)::Array #
254292
######################
@@ -274,6 +312,10 @@ const ARRAY_TO_ARRAY_FUNCS = (-, chebyquad, brown_almost_linear, trigonometric,
274312
# f(::Matrix)::Matrix #
275313
#######################
276314

277-
const MATRIX_TO_MATRIX_FUNCS = (inv,)
315+
const MATRIX_TO_MATRIX_FUNCS = (inv,
316+
diag_lmul, dense_lmul, utriag_lmul, ltriag_lmul,
317+
sparse_lmul, sp_utriag_lmul, sp_ltriag_lmul,
318+
diag_ldiv, utriag_ldiv, ltriag_ldiv,
319+
sparse_ldiv, sp_utriag_ldiv, sp_ltriag_ldiv,)
278320

279321
end # module

test/runtests.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,16 @@ for f in DiffTests.ARRAY_TO_ARRAY_FUNCS
3434
@test isa(f(y), Array)
3535
end
3636

37+
for f in DiffTests.VECTOR_TO_VECTOR_FUNCS
38+
@test isa(f(y), Vector)
39+
end
40+
3741
for f in DiffTests.MATRIX_TO_MATRIX_FUNCS
38-
@test isa(f(A), Array)
42+
@test isa(f(A), Matrix)
3943
end
4044

4145
for f in DiffTests.BINARY_MATRIX_TO_MATRIX_FUNCS
42-
@test isa(f(A, B), Array)
46+
@test isa(f(A, B), Matrix)
4347
end
4448

4549
# f! returns Nothing

0 commit comments

Comments
 (0)