From a4ce8de6616429a427850b6634a5c5d43d69e83d Mon Sep 17 00:00:00 2001 From: Qingyu Qu <2283984853@qq.com> Date: Fri, 25 Apr 2025 17:15:57 +0800 Subject: [PATCH] Default to QR with BandedMatrix{BigFloat} --- ext/LinearSolveBandedMatricesExt.jl | 10 ++++++++-- test/adjoint.jl | 4 ++-- test/banded.jl | 6 ++++++ test/defaults_loading.jl | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ext/LinearSolveBandedMatricesExt.jl b/ext/LinearSolveBandedMatricesExt.jl index 3941b0864..deb85e25a 100644 --- a/ext/LinearSolveBandedMatricesExt.jl +++ b/ext/LinearSolveBandedMatricesExt.jl @@ -16,6 +16,11 @@ function defaultalg(A::BandedMatrix, b, oa::OperatorAssumptions{Bool}) end end +function defaultalg( + A::BandedMatrix{T}, b, oa::OperatorAssumptions{Bool}) where {T <: BigFloat} + return DefaultLinearSolver(DefaultAlgorithmChoice.QRFactorization) +end + function defaultalg(A::Symmetric{<:Number, <:BandedMatrix}, b, ::OperatorAssumptions{Bool}) return DefaultLinearSolver(DefaultAlgorithmChoice.CholeskyFactorization) end @@ -42,8 +47,9 @@ for alg in (:SVDFactorization, :MKLLUFactorization, :DiagonalFactorization, end end -function init_cacheval(::LUFactorization, A::BandedMatrix, b, u, Pl, Pr, maxiters::Int, - abstol, reltol, verbose::Bool, assumptions::OperatorAssumptions) +function init_cacheval(::LUFactorization, A::BandedMatrix{T}, b, u, Pl, Pr, maxiters::Int, + abstol, reltol, verbose::Bool, assumptions::OperatorAssumptions) where {T} + (T <: BigFloat) && return qr(similar(A, 0, 0)) return lu(similar(A, 0, 0)) end diff --git a/test/adjoint.jl b/test/adjoint.jl index b31c447e8..8fd9e163c 100644 --- a/test/adjoint.jl +++ b/test/adjoint.jl @@ -45,8 +45,8 @@ db12 = ForwardDiff.gradient(x -> f(eltype(x).(A), x), copy(b1)) @test db1 ≈ db12 # Test complex numbers -A = rand(n, n) + 1im*rand(n, n); -b1 = rand(n) + 1im*rand(n); +A = rand(n, n) + 1im * rand(n, n); +b1 = rand(n) + 1im * rand(n); function f3(A, b1, b2; alg = KrylovJL_GMRES()) prob = LinearProblem(A, b1) diff --git a/test/banded.jl b/test/banded.jl index 89c104966..0c61905eb 100644 --- a/test/banded.jl +++ b/test/banded.jl @@ -52,3 +52,9 @@ A = AlmostBandedMatrix(BandedMatrix(fill(2.0, n + 2, n), (1, 1)), fill(3.0, 2, n A[band(0)] .+= 1:n @test_nowarn solve(LinearProblem(A, b)) + +# Workaround for no lu from BandedMatrices +A = BandedMatrix{BigFloat}(ones(3, 3), (0, 0)) +b = BigFloat[1, 2, 3] +prob = LinearProblem(A, b) +@test_nowarn solve(prob) diff --git a/test/defaults_loading.jl b/test/defaults_loading.jl index a7b456f41..a7c54f934 100644 --- a/test/defaults_loading.jl +++ b/test/defaults_loading.jl @@ -31,4 +31,4 @@ prob = LinearProblem(mat, rhs) using Sparspak sol = solve(prob).u -@test sol isa Vector{BigFloat} \ No newline at end of file +@test sol isa Vector{BigFloat}