JuliaApproximation / ApproxFun.jl

Julia package for function approximation
http://juliaapproximation.github.io/ApproxFun.jl/
Other
540 stars 70 forks source link

QR failed for InterlaceOperator in segment of multi-union domain. #663

Open Jiaqi-knight opened 5 years ago

Jiaqi-knight commented 5 years ago

A is a multi-union interlaceOperator: such like that ~~InterlaceOperator : [Chebyshev(the segment [-2.5 - 0.5im,-1.5 - 0.5im])]⨄[Chebyshev(the segment [-1.5 + 0.5im,-0.5 + 0.5im])]⨄[Chebyshev(the segment [-0.5 - 0.5im,0.5 - 0.5im])]⨄[Chebyshev(the segment [0.5 + 0.5im,1.5 + 0.5im])] julia> ApproxFun.qr([A]) ERROR: ArgumentError: range must be non-empty Stacktrace: [1] maximum at ./range.jl:572 [inlined] [2] getindex(::ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}}, ::UnitRange{Int64}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/LinearAlgebra/helper.jl:592 [3] BandedMatrices.BandedMatrix(::ApproxFunBase.SubOperator{Complex{Float64},ApproxFunBase.InterlaceOperator{Complex{Float64},1,PiecewiseSpace{NTuple{5,JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.ArraySpace{PiecewiseSpace{NTuple{5,Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},1,DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{Int64,Int64}},Tuple{UnitRange{Int64},UnitRange{Int64}},Tuple{Int64,Int64},Tuple{Int64,Int64}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/general/InterlaceOperator.jl:339 [4] Type at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/Operator.jl:780 [inlined] [5] defaultgetindex at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/Operator.jl:228 [inlined] [6] getindex(::ApproxFunBase.InterlaceOperator{Complex{Float64},1,PiecewiseSpace{NTuple{5,JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.ArraySpace{PiecewiseSpace{NTuple{5,Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},1,DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{Int64,Int64}}, ::UnitRange{Int64}, ::UnitRange{Int64}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/Operator.jl:208 [7] #CachedOperator#244(::Bool, ::Type, ::ApproxFunBase.InterlaceOperator{Complex{Float64},1,PiecewiseSpace{NTuple{5,JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.ArraySpace{PiecewiseSpace{NTuple{5,Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},1,DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{Int64,Int64}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Caching/almostbanded.jl:52 [8] Type at ./none:0 [inlined] [9] #cache#156 at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/general/CachedOperator.jl:55 [inlined] [10] #cache at ./none:0 [inlined] [11] #qr#219(::Int64, ::Function, ::ApproxFunBase.InterlaceOperator{Complex{Float64},1,PiecewiseSpace{NTuple{5,JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.ArraySpace{PiecewiseSpace{NTuple{5,Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},1,DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{Int64,Int64}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/qr.jl:105 [12] qr(::ApproxFunBase.InterlaceOperator{Complex{Float64},1,PiecewiseSpace{NTuple{5,JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.ArraySpace{PiecewiseSpace{NTuple{5,Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},1,DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{Int64,Int64}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/qr.jl:102 [13] qr(::Array{ApproxFunBase.InterlaceOperator{Complex{Float64},2,PiecewiseSpace{NTuple{5,JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},PiecewiseSpace{NTuple{5,Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{NTuple{5,Segment{Complex{Float64}}},Complex{Float64}},Float64},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{NTuple{5,FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{NTuple{5,FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{Int64,Int64}},1}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/qr.jl:113 [14] top-level scope at none:0

Jiaqi-knight commented 5 years ago

For example: using ApproxFun, SingularIntegralEquations g1(x,y) = 0.5 N=3 r=0.1 cr = exp.(im(0:N-1)/N) crl,crr = (1-2imr)cr,(1+2imr)cr dom=Circle(cr[1],r) ∪ Circle(cr[2],r)∪ Circle(cr[3],r) #work

dom = ∪(Segment.([-2.5-.5im,-1.5+.5im,-.5-.5im,.5+.5im,1.5-.5im],[-1.5-.5im,-.5+.5im,.5-.5im,1.5+.5im,2.5-.5im])...)#error! with debug ~ERROR: ArgumentError: range must be non-empty

@show sp = Space(dom) cwsp = CauchyWeight(sp⊗sp,0) ⨍ = DefiniteLineIntegral(dom) @time G = GreensFun(g1,cwsp;method=:Cholesky) A=⨍[G] ApproxFun.qr([A])