~ubuntu-branches/ubuntu/wily/julia/wily

« back to all changes in this revision

Viewing changes to base/linalg/umfpack.jl

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot
  • Date: 2013-11-17 19:32:52 UTC
  • mfrom: (1.1.12)
  • Revision ID: package-import@ubuntu.com-20131117193252-tkrpclguqqebqa35
Tags: 0.2.0+dfsg-3
testsuite-i386.patch: loosen the numerical precision for yet another test.

Show diffs side-by-side

added added

removed removed

Lines of Context:
247
247
 
248
248
(\){T<:UMFVTypes}(fact::UmfpackLU{T}, b::Vector{T}) = solve(fact, b)
249
249
(\){Ts<:UMFVTypes,Tb<:Number}(fact::UmfpackLU{Ts}, b::Vector{Tb}) = fact\convert(Vector{Ts},b)
 
250
function (\){Tb<:Complex}(fact::UmfpackLU{Float64}, b::Vector{Tb})
 
251
    r = fact\[convert(Float64,real(be)) for be in b]
 
252
    i = fact\[convert(Float64,imag(be)) for be in b]
 
253
    Complex128[r[k]+im*i[k] for k = 1:length(r)]
 
254
end
250
255
At_ldiv_B{T<:UMFVTypes}(fact::UmfpackLU{T}, b::Vector{T}) = solve(fact, b, UMFPACK_Aat)
251
256
At_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(fact::UmfpackLU{Ts}, b::Vector{Tb}) = fact.'\convert(Vector{Ts},b)
 
257
At_ldiv_B{Tb<:Complex}(fact::UmfpackLU{Float64}, b::Vector{Tb}) = fact.'\b
252
258
Ac_ldiv_B{T<:UMFVTypes}(fact::UmfpackLU{T}, b::Vector{T}) = solve(fact, b, UMFPACK_At)
253
259
Ac_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(fact::UmfpackLU{Ts}, b::Vector{Tb}) = fact'\convert(Vector{Ts},b)
 
260
Ac_ldiv_B{Tb<:Complex}(fact::UmfpackLU{Float64}, b::Vector{Tb}) = fact'\b
254
261
 
255
262
### Solve directly with matrix
256
263
 
257
264
(\)(S::SparseMatrixCSC, b::Vector) = lufact(S) \ b
258
265
At_ldiv_B{T<:UMFVTypes}(S::SparseMatrixCSC{T}, b::Vector{T}) = solve(lufact(S), b, UMFPACK_Aat)
259
 
function At_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb})
260
 
    ## should be more careful here in case Ts<:Real and Tb<:Complex
261
 
    At_ldiv_B(S, convert(Vector{Ts}, b))
 
266
At_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb}) = At_ldiv_B(S, convert(Vector{Ts}, b))
 
267
function At_ldiv_B{Tb<:Complex}(S::SparseMatrixCSC{Float64}, b::Vector{Tb})
 
268
    F = lufact(S)
 
269
    r = solve(F, [convert(Float64,real(be)) for be in b], UMFPACK_Aat)
 
270
    i = solve(F, [convert(Float64,imag(be)) for be in b], UMFPACK_Aat)
 
271
    Complex128[r[k]+im*i[k] for k = 1:length(r)]
262
272
end
263
273
Ac_ldiv_B{T<:UMFVTypes}(S::SparseMatrixCSC{T}, b::Vector{T}) = solve(lufact(S), b, UMFPACK_At)
264
 
function Ac_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb})
265
 
    ## should be more careful here in case Ts<:Real and Tb<:Complex
266
 
    Ac_ldiv_B(S, convert(Vector{Ts}, b))
 
274
Ac_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb}) = Ac_ldiv_B(S, convert(Vector{Ts}, b))
 
275
function Ac_ldiv_B{Tb<:Complex}(S::SparseMatrixCSC{Float64}, b::Vector{Tb})
 
276
    F = lufact(S)
 
277
    r = solve(F, [convert(Float64,real(be)) for be in b], UMFPACK_At)
 
278
    i = solve(F, [convert(Float64,imag(be)) for be in b], UMFPACK_At)
 
279
    Complex128[r[k]+im*i[k] for k = 1:length(r)]
267
280
end
268
281
 
269
282
solve(lu::UmfpackLU, b::Vector) = solve(lu, b, UMFPACK_A)