1
1
using MatrixAlgebraKit:
2
2
MatrixAlgebraKit,
3
- left_polar,
4
- lq_compact,
5
- qr_compact,
6
- right_polar,
3
+ left_orth_polar!,
4
+ left_orth_qr!,
5
+ left_orth_svd!,
6
+ left_polar!,
7
+ lq_compact!,
8
+ qr_compact!,
9
+ right_orth_lq!,
10
+ right_orth_polar!,
11
+ right_orth_svd!,
12
+ right_polar!,
7
13
select_algorithm,
8
- svd_compact
14
+ svd_compact!
9
15
10
- function MatrixAlgebraKit. left_orth (
16
+ function MatrixAlgebraKit. left_orth! (
11
17
A:: AbstractBlockSparseMatrix ;
12
18
trunc= nothing ,
13
19
kind= isnothing (trunc) ? :qr : :svd ,
@@ -19,30 +25,32 @@ function MatrixAlgebraKit.left_orth(
19
25
throw (ArgumentError (" truncation not supported for `left_orth` with `kind=$kind `" ))
20
26
end
21
27
if kind == :qr
22
- return left_orth_qr (A, alg_qr)
28
+ return left_orth_qr! (A, alg_qr)
23
29
elseif kind == :polar
24
- return left_orth_polar (A, alg_polar)
30
+ return left_orth_polar! (A, alg_polar)
25
31
elseif kind == :svd
26
- return left_orth_svd (A, alg_svd, trunc)
32
+ return left_orth_svd! (A, alg_svd, trunc)
27
33
else
28
34
throw (ArgumentError (" `left_orth` received unknown value `kind = $kind `" ))
29
35
end
30
36
end
31
- function left_orth_qr (A , alg)
32
- alg′ = select_algorithm (qr_compact, A, alg)
33
- return qr_compact (A, alg′)
37
+ function MatrixAlgebraKit . left_orth_qr! (A :: AbstractBlockSparseMatrix , alg)
38
+ alg′ = select_algorithm (qr_compact! , A, alg)
39
+ return qr_compact! (A, alg′)
34
40
end
35
- function left_orth_polar (A , alg)
36
- alg′ = select_algorithm (left_polar, A, alg)
37
- return left_polar (A, alg′)
41
+ function MatrixAlgebraKit . left_orth_polar! (A :: AbstractBlockSparseMatrix , alg)
42
+ alg′ = select_algorithm (left_polar! , A, alg)
43
+ return left_polar! (A, alg′)
38
44
end
39
- function left_orth_svd (A, alg, trunc:: Nothing = nothing )
40
- alg′ = select_algorithm (svd_compact, A, alg)
41
- U, S, Vᴴ = svd_compact (A, alg′)
45
+ function MatrixAlgebraKit. left_orth_svd! (
46
+ A:: AbstractBlockSparseMatrix , alg, trunc:: Nothing = nothing
47
+ )
48
+ alg′ = select_algorithm (svd_compact!, A, alg)
49
+ U, S, Vᴴ = svd_compact! (A, alg′)
42
50
return U, S * Vᴴ
43
51
end
44
52
45
- function MatrixAlgebraKit. right_orth (
53
+ function MatrixAlgebraKit. right_orth! (
46
54
A:: AbstractBlockSparseMatrix ;
47
55
trunc= nothing ,
48
56
kind= isnothing (trunc) ? :lq : :svd ,
@@ -55,32 +63,34 @@ function MatrixAlgebraKit.right_orth(
55
63
end
56
64
if kind == :qr
57
65
# TODO : Implement this.
58
- # return right_orth_lq(A, alg_lq)
59
- return right_orth_svd (A, alg_svd)
66
+ # return right_orth_lq! (A, alg_lq)
67
+ return right_orth_svd! (A, alg_svd)
60
68
elseif kind == :polar
61
- return right_orth_polar (A, alg_polar)
69
+ return right_orth_polar! (A, alg_polar)
62
70
elseif kind == :svd
63
- return right_orth_svd (A, alg_svd, trunc)
71
+ return right_orth_svd! (A, alg_svd, trunc)
64
72
else
65
73
throw (ArgumentError (" `right_orth` received unknown value `kind = $kind `" ))
66
74
end
67
75
end
68
- function right_orth_lq (A , alg)
76
+ function MatrixAlgebraKit . right_orth_lq! (A :: AbstractBlockSparseMatrix , alg)
69
77
alg′ = select_algorithm (lq_compact, A, alg)
70
- return lq_compact (A, alg′)
78
+ return lq_compact! (A, alg′)
71
79
end
72
- function right_orth_polar (A , alg)
73
- alg′ = select_algorithm (right_polar, A, alg)
74
- return right_polar (A, alg′)
80
+ function MatrixAlgebraKit . right_orth_polar! (A :: AbstractBlockSparseMatrix , alg)
81
+ alg′ = select_algorithm (right_polar! , A, alg)
82
+ return right_polar! (A, alg′)
75
83
end
76
- function right_orth_svd (A, alg, trunc:: Nothing = nothing )
77
- alg′ = select_algorithm (svd_compact, A, alg)
78
- U, S, Vᴴ = svd_compact (A, alg′)
84
+ function MatrixAlgebraKit. right_orth_svd! (
85
+ A:: AbstractBlockSparseMatrix , alg, trunc:: Nothing = nothing
86
+ )
87
+ alg′ = select_algorithm (svd_compact!, A, alg)
88
+ U, S, Vᴴ = svd_compact! (A, alg′)
79
89
return U * S, Vᴴ
80
90
end
81
- function right_orth_svd (A , alg, trunc)
82
- alg′ = select_algorithm (svd_compact, A, alg)
83
- alg_trunc = select_algorithm (svd_trunc, A, alg′; trunc)
84
- U, S, Vᴴ = svd_trunc (A, alg_trunc)
91
+ function MatrixAlgebraKit . right_orth_svd! (A :: AbstractBlockSparseMatrix , alg, trunc)
92
+ alg′ = select_algorithm (svd_compact! , A, alg)
93
+ alg_trunc = select_algorithm (svd_trunc! , A, alg′; trunc)
94
+ U, S, Vᴴ = svd_trunc! (A, alg_trunc)
85
95
return U * S, Vᴴ
86
96
end
0 commit comments