1
1
module DiffTests
2
2
3
- using LinearAlgebra: det, norm, dot, tr
3
+ using LinearAlgebra: det, norm, dot, tr, Diagonal, LowerTriangular, UpperTriangular
4
+ using SparseArrays: sparse
4
5
using Statistics: mean
5
6
6
7
#=
249
250
const INPLACE_ARRAY_TO_ARRAY_FUNCS = (chebyquad!, brown_almost_linear!, trigonometric!,
250
251
mutation_test_1!, mutation_test_2!)
251
252
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
+
252
290
# #####################
253
291
# f(x::Array)::Array #
254
292
# #####################
@@ -274,6 +312,10 @@ const ARRAY_TO_ARRAY_FUNCS = (-, chebyquad, brown_almost_linear, trigonometric,
274
312
# f(::Matrix)::Matrix #
275
313
# ######################
276
314
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,)
278
320
279
321
end # module
0 commit comments