Skip to content

Commit c25e53b

Browse files
Merge pull request #93 from vpuri3/addvector
fix addvector
2 parents fb444d8 + edb0489 commit c25e53b

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

src/matrix.jl

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ struct AffineOperator{T,AType,BType,bType,cType,F} <: AbstractSciMLOperator{T}
216216
typeof(cache),
217217
typeof(update_func),
218218
}(
219-
A, B, b, cache,
219+
A, B, b, cache, update_func,
220220
)
221221
end
222222
end
@@ -236,19 +236,26 @@ function AffineOperator(A::Union{AbstractMatrix,AbstractSciMLOperator},
236236
AffineOperator(A, B, b, cache, update_func)
237237
end
238238

239+
"""
240+
L = AddVector(b[; update_func])
241+
L(u) = u + b
242+
"""
239243
function AddVector(b::AbstractVecOrMat; update_func=DEFAULT_UPDATE_FUNC)
240244
N = size(b, 1)
241-
Z = NullOperator{N}()
242245
Id = IdentityOperator{N}()
243246

244-
AffineOperator(Id, B, b; update_func=update_func)
247+
AffineOperator(Id, Id, b; update_func=update_func)
245248
end
246249

250+
"""
251+
L = AddVector(B, b[; update_func])
252+
L(u) = u + B*b
253+
"""
247254
function AddVector(B, b::AbstractVecOrMat; update_func=DEFAULT_UPDATE_FUNC)
248255
N = size(B, 1)
249-
Z = NullOperator{N}()
256+
Id = IdentityOperator{N}()
250257

251-
AffineOperator(Z, B, b; update_func=update_func)
258+
AffineOperator(Id, B, b; update_func=update_func)
252259
end
253260

254261
getops(L::AffineOperator) = (L.A, L.B, L.b)
@@ -265,8 +272,7 @@ has_ldiv!(L::AffineOperator) = has_ldiv!(L.A)
265272

266273
function cache_internals(L::AffineOperator, u::AbstractVecOrMat)
267274
@set! L.A = cache_operator(L.A, u)
268-
@set! L.B = cache_operator(L.B, u)
269-
@set! L.b = cache_operator(L.b, u)
275+
@set! L.B = cache_operator(L.B, L.b)
270276
L
271277
end
272278

test/matrix.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,22 @@ end
9797
@test L \ u D \ (u - B * b)
9898
v=rand(N,K); @test ldiv!(v, L, u) D \ (u-B*b)
9999
v=copy(u); @test ldiv!(L, u) D \ (v-B*b)
100+
101+
L = AddVector(b)
102+
@test L * u u + b
103+
@test L \ u u - b
104+
v=rand(N,K); @test mul!(v, L, u) u + b
105+
v=rand(N,K); w=copy(v); @test mul!(v, L, u, α, β) α*(u + b) + β*w
106+
v=rand(N,K); @test ldiv!(v, L, u) u - b
107+
v=copy(u); @test ldiv!(L, u) v - b
108+
109+
L = AddVector(MatrixOperator(B), b)
110+
@test L * u u + B * b
111+
@test L \ u u - B * b
112+
v=rand(N,K); @test mul!(v, L, u) u + B * b
113+
v=rand(N,K); w=copy(v); @test mul!(v, L, u, α, β) α*(u + B * b) + β*w
114+
v=rand(N,K); @test ldiv!(v, L, u) u - B * b
115+
v=copy(u); @test ldiv!(L, u) v - B * b
100116
end
101117

102118
@testset "AffineOperator update test" begin

0 commit comments

Comments
 (0)