@@ -19,56 +19,65 @@ a2real = randn(n,n)/2
1919a2img = randn (n,n)/ 2
2020
2121for eltya in (Float32, Float64, Complex64, Complex128, Int)
22- a = eltya == Int ? rand (1 : 7 , n, n) : convert (Matrix{eltya}, eltya <: Complex ? complex (areal, aimg) : areal)
23- a2 = eltya == Int ? rand (1 : 7 , n, n) : convert (Matrix{eltya}, eltya <: Complex ? complex (a2real, a2img) : a2real)
24- asym = a' + a # symmetric indefinite
25- apd = a' * a # symmetric positive-definite
26- ε = εa = eps (abs (float (one (eltya))))
22+ aa = eltya == Int ? rand (1 : 7 , n, n) : convert (Matrix{eltya}, eltya <: Complex ? complex (areal, aimg) : areal)
23+ aa2 = eltya == Int ? rand (1 : 7 , n, n) : convert (Matrix{eltya}, eltya <: Complex ? complex (a2real, a2img) : a2real)
24+ for atype in (" Array" , " SubArray" )
25+ if atype == " Array"
26+ a = aa
27+ a2 = aa2
28+ else
29+ a = sub (aa, 1 : n, 1 : n)
30+ a2 = sub (aa2, 1 : n, 1 : n)
31+ end
32+ asym = a' + a # symmetric indefinite
33+ apd = a' * a # symmetric positive-definite
34+ ε = εa = eps (abs (float (one (eltya))))
2735
28- debug && println (" \n type of a: " , eltya, " \n " )
36+ debug && println (" \n type of a: " , eltya, " \n " )
2937
30- debug && println (" singular value decomposition" )
31- usv = svdfact (a)
32- @test usv[:S ] === svdvals (usv)
33- @test usv[:U ] * (Diagonal (usv[:S ]) * usv[:Vt ]) ≈ a
34- @test full (usv) ≈ a
35- @test usv[:Vt ]' ≈ usv[:V ]
36- @test_throws KeyError usv[:Z ]
37- b = rand (eltya,n)
38- @test usv\ b ≈ a\ b
38+ debug && println (" singular value decomposition" )
39+ usv = svdfact (a)
40+ @test usv[:S ] === svdvals (usv)
41+ @test usv[:U ] * (Diagonal (usv[:S ]) * usv[:Vt ]) ≈ a
42+ @test full (usv) ≈ a
43+ @test usv[:Vt ]' ≈ usv[:V ]
44+ @test_throws KeyError usv[:Z ]
45+ b = rand (eltya,n)
46+ @test usv\ b ≈ a\ b
3947
40- if eltya <: BlasFloat
41- svdz = svdfact! (ones (eltya,0 ,0 ))
42- @test svdz[:U ] ≈ eye (eltya,0 ,0 )
43- @test svdz[:S ] ≈ real (zeros (eltya,0 ))
44- @test svdz[:Vt ] ≈ eye (eltya,0 ,0 )
45- end
48+ if eltya <: BlasFloat
49+ svdz = svdfact! (ones (eltya,0 ,0 ))
50+ @test svdz[:U ] ≈ eye (eltya,0 ,0 )
51+ @test svdz[:S ] ≈ real (zeros (eltya,0 ))
52+ @test svdz[:Vt ] ≈ eye (eltya,0 ,0 )
53+ end
4654
47- debug && println (" Generalized svd" )
48- a_svd = a[1 : n1, :]
49- gsvd = svdfact (a,a_svd)
50- @test gsvd[:U ]* gsvd[:D1 ]* gsvd[:R ]* gsvd[:Q ]' ≈ a
51- @test gsvd[:V ]* gsvd[:D2 ]* gsvd[:R ]* gsvd[:Q ]' ≈ a_svd
52- @test usv[:Vt ]' ≈ usv[:V ]
53- @test_throws KeyError usv[:Z ]
54- @test_throws KeyError gsvd[:Z ]
55- @test gsvd[:vals ] ≈ svdvals (a,a_svd)
56- α = eltya == Int ? - 1 : rand (eltya)
57- β = svdfact (α)
58- @test β[:S ] == [abs (α)]
59- @test svdvals (α) == abs (α)
60- u,v,q,d1,d2,r0 = svd (a,a_svd)
61- @test u ≈ gsvd[:U ]
62- @test v ≈ gsvd[:V ]
63- @test d1 ≈ gsvd[:D1 ]
64- @test d2 ≈ gsvd[:D2 ]
65- @test q ≈ gsvd[:Q ]
66- @test gsvd[:a ]. ^ 2 + gsvd[:b ]. ^ 2 ≈ ones (eltya,length (gsvd[:a ]))
55+ debug && println (" Generalized svd" )
56+ a_svd = a[1 : n1, :]
57+ gsvd = svdfact (a,a_svd)
58+ @test gsvd[:U ]* gsvd[:D1 ]* gsvd[:R ]* gsvd[:Q ]' ≈ a
59+ @test gsvd[:V ]* gsvd[:D2 ]* gsvd[:R ]* gsvd[:Q ]' ≈ a_svd
60+ @test usv[:Vt ]' ≈ usv[:V ]
61+ @test_throws KeyError usv[:Z ]
62+ @test_throws KeyError gsvd[:Z ]
63+ @test gsvd[:vals ] ≈ svdvals (a,a_svd)
64+ α = eltya == Int ? - 1 : rand (eltya)
65+ β = svdfact (α)
66+ @test β[:S ] == [abs (α)]
67+ @test svdvals (α) == abs (α)
68+ u,v,q,d1,d2,r0 = svd (a,a_svd)
69+ @test u ≈ gsvd[:U ]
70+ @test v ≈ gsvd[:V ]
71+ @test d1 ≈ gsvd[:D1 ]
72+ @test d2 ≈ gsvd[:D2 ]
73+ @test q ≈ gsvd[:Q ]
74+ @test gsvd[:a ]. ^ 2 + gsvd[:b ]. ^ 2 ≈ ones (eltya,length (gsvd[:a ]))
6775
68- # testing the other layout for D1 & D2
69- b = rand (eltya,n,2 * n)
70- c = rand (eltya,n,2 * n)
71- gsvd = svdfact (b,c)
72- @test gsvd[:U ]* gsvd[:D1 ]* gsvd[:R ]* gsvd[:Q ]' ≈ b
73- @test gsvd[:V ]* gsvd[:D2 ]* gsvd[:R ]* gsvd[:Q ]' ≈ c
76+ # testing the other layout for D1 & D2
77+ b = rand (eltya,n,2 * n)
78+ c = rand (eltya,n,2 * n)
79+ gsvd = svdfact (b,c)
80+ @test gsvd[:U ]* gsvd[:D1 ]* gsvd[:R ]* gsvd[:Q ]' ≈ b
81+ @test gsvd[:V ]* gsvd[:D2 ]* gsvd[:R ]* gsvd[:Q ]' ≈ c
82+ end
7483end
0 commit comments