@@ -2,11 +2,11 @@ export AbstractLowRankOperator, LowRankOperator
2
2
3
3
abstract type AbstractLowRankOperator{T} <: Operator{T} end
4
4
5
- struct LowRankOperator{S<: Space ,T} <: AbstractLowRankOperator{T}
5
+ struct LowRankOperator{S<: Space ,T,O <: Operator{T} } <: AbstractLowRankOperator{T}
6
6
U:: Vector{VFun{S,T}}
7
- V:: Vector{Operator{T} }
7
+ V:: Vector{O }
8
8
9
- function LowRankOperator {S,T} (U:: Vector{VFun{S,T}} ,V:: Vector{Operator{T}} ) where {S,T}
9
+ function LowRankOperator {S,T} (U:: Vector{VFun{S,T}} , V:: Vector{O} ) where {S,T,O <: Operator{T} }
10
10
@assert all (isafunctional,V)
11
11
12
12
@assert length (U) == length (V)
@@ -19,19 +19,18 @@ struct LowRankOperator{S<:Space,T} <: AbstractLowRankOperator{T}
19
19
for k= 2 : length (U)
20
20
@assert space (U[k])== rs
21
21
end
22
- new {S,T} (U,V)
22
+ new {S,T,O } (U,V)
23
23
end
24
24
end
25
25
26
26
27
27
28
- LowRankOperator (U:: Vector{VFun{S,T}} ,V:: Vector{Operator{T}} ) where {S,T} = LowRankOperator {S,T} (U,V)
29
- LowRankOperator (U:: Vector{VFun{S,T1}} ,V:: Vector{Operator{T2}} ) where {S,T1,T2} =
30
- LowRankOperator (strictconvert (Vector{VFun{S,promote_type (T1,T2)}},U),
31
- strictconvert (Vector{Operator{promote_type (T1,T2)}},V))
32
- LowRankOperator (U:: Vector{FF} ,V:: Vector{FT} ) where {FF<: Fun ,FT<: Operator } =
33
- LowRankOperator (U,strictconvert (Vector{Operator{eltype (FT)}},V))
34
-
28
+ LowRankOperator (U:: Vector{VFun{S,T}} , V:: Vector{<:Operator{T}} ) where {S,T} = LowRankOperator {S,T} (U,V)
29
+ function LowRankOperator (U:: Vector{VFun{S,T1}} , V:: Vector{<:Operator} ) where {S,T1}
30
+ T2 = eltype (eltype (v))
31
+ T = promote_type (T1,T2)
32
+ LowRankOperator (strictconvert (Vector{VFun{S,T}},U), map (Operator{T}, V))
33
+ end
35
34
36
35
37
36
LowRankOperator (B:: AbstractVector ,S... ) = LowRankOperator (strictconvert (Vector{Operator{Float64}},B),S... )
@@ -54,11 +53,11 @@ rangespace(L::LowRankOperator) = space(first(L.U))
54
53
promoterangespace (L:: LowRankOperator ,sp:: Space ) = LowRankOperator (map (u-> Fun (u,sp),L. U),L. V)
55
54
promotedomainspace (L:: LowRankOperator ,sp:: Space ) = LowRankOperator (L. U,map (v-> promotedomainspace (v,sp),L. V))
56
55
57
- function Base. getindex (L:: LowRankOperator ,k:: Integer ,j:: Integer )
56
+ function Base. getindex (L:: LowRankOperator , k:: Integer ,j:: Integer )
58
57
ret= zero (eltype (L))
59
- for p= 1 : length (L. U)
60
- if k≤ ncoefficients (L. U[p])
61
- ret+= L. U[p]. coefficients[k] * L. V[p][j]
58
+ for p in eachindex (L. U)
59
+ if k ≤ ncoefficients (L. U[p])
60
+ ret += coefficient ( L. U[p], k) * L. V[p][j]
62
61
end
63
62
end
64
63
ret
0 commit comments