@@ -2,13 +2,13 @@ using BlockDiagonalMatrices
2
2
using LinearAlgebra
3
3
using SparseArrays
4
4
using StaticArrays
5
+ using Test
5
6
6
7
function get_random_sized_psdm (n)
7
8
b1 = rand (n,n);
8
9
Q = qr (b1). Q
9
10
B1 = Q* Diagonal ((rand (n) .+ 0.5 ))* Q'
10
- B1 = Symmetric (B1)
11
- return B1
11
+ return (B1 + B1' )/ 2
12
12
end
13
13
14
14
# ### Testing equal block sizes
@@ -39,6 +39,18 @@ SB = sparse(B)
39
39
@test B[1 ,1 ] == SB[1 ,1 ]
40
40
@test B[end ,end ] == SB[end ,end ]
41
41
42
+ B_dense = Matrix (B)
43
+ b1 = size (B. blocks[1 ],1 )
44
+ bn = size (B. blocks[end ],1 ) - 1
45
+ for func in (:log , :sqrt , :sin , :tan , :cos , :sinh , :tanh )
46
+ @eval begin
47
+ func_dense = ($ func)(B_dense)
48
+ func_block = ($ func)(B)
49
+ @test func_dense[1 : b1,1 : b1] ≈ func_block. blocks[1 ]
50
+ @test func_dense[end - bn: end ,end - bn: end ] ≈ func_block. blocks[end ]
51
+ end
52
+ end
53
+
42
54
43
55
# Make 3x3 blocks - But with StaticArrays for speedup
44
56
C = BlockDiagonal ([SMatrix {3,3,eltype(block)} (block) for block in B. blocks])
@@ -75,6 +87,17 @@ Xr = randn(size(Br,1),3)
75
87
@test A* Xr ≈ Br* Xr
76
88
@test A\ Xr ≈ Br\ Xr
77
89
90
+ A_dense = Matrix (Br)
91
+ r1 = size (Br. blocks[1 ],1 )
92
+ rn = size (Br. blocks[end ],1 ) - 1
93
+ for func in (:log , :sqrt , :sin , :tan , :cos , :sinh , :tanh )
94
+ @eval begin
95
+ func_dense = ($ func)(A_dense)
96
+ func_block = ($ func)(Br)
97
+ @test func_dense[1 : r1,1 : r1] ≈ func_block. blocks[1 ]
98
+ @test func_dense[end - rn: end ,end - rn: end ] ≈ func_block. blocks[end ]
99
+ end
100
+ end
78
101
79
102
# Testing logs, determinants, and variants
80
103
@test logdet (A) ≈ logdet (Br)
0 commit comments