【发布时间】:2016-09-24 18:42:36
【问题描述】:
我正在尝试使用 BLAS 函数 dtrmv 进行三角矩阵向量乘法。根据文档:
trmv!(ul, tA, dA, A, b) 返回 op(A)*b,其中 op 由 tA 确定(N 表示恒等式,T 表示转置 A,C 表示共轭转置 A)。仅使用 A 的 ul 三角形(U 为上,L 为下)。 dA 表示 A 是否为单位三角形(如果 U 假设对角线全为 1,则假设 N 为非单位)。乘法发生在 b 上。
我在实际使用它时遇到了麻烦。这是我的例子:
julia> BLAS.trmv('L','N','N',Mchol,Z)
ERROR: MethodError: `trmv` has no method matching trmv(::Char, ::Char, ::Char, ::LowerTriangular{Float64,Array{Float64,2}}, ::Array{Float64,1})
Closest candidates are:
trmv(::Char, ::Char, ::Char, ::Union{DenseArray{Float64,2},SubArray{Float64,2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}, ::Union{DenseArray{Float64,1},SubArray{Float64,1,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}})
trmv(::Char, ::Char, ::Char, ::Union{DenseArray{Float32,2},SubArray{Float32,2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}, ::Union{DenseArray{Float32,1},SubArray{Float32,1,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}})
trmv(::Char, ::Char, ::Char, ::Union{DenseArray{Complex{Float64},2},SubArray{Complex{Float64},2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}, ::Union{DenseArray{Complex{Float64},1},SubArray{Complex{Float64},1,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}})
...
julia> typeof(Mchol)
LowerTriangular{Float64,Array{Float64,2}}
julia> typeof(Z)
Array{Float64,1}
我无法解释错误。有人可以帮忙吗?
编辑:已解决 Mchol 由下式计算 Mchol=chol(M)' 不起作用,但 MChol 由 LAPACK.potrf!('L',Mchol) 作品
【问题讨论】: