【问题标题】:Julia triangular matrix vector BLAS wrapper BLAS.trmvJulia 三角矩阵向量 BLAS 包装器 BLAS.trmv
【发布时间】: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) 作品

【问题讨论】:

    标签: julia blas


    【解决方案1】:

    您可以使用Mchol=chol(M)',但您必须先提取缓冲区,即BLAS.trmv('L','N','N',Mchol.data,Z)。但是,我建议您不要直接致电trmv。大多数情况下,您应该使用Ax_mul_Bx! 系列函数。在这种情况下,最有效的可能是计算

    Mchol = chol(M)
    Ac_mul_B!(Mchol,Z)
    

    当元素是四种 BLAS 元素类型之一时,这将调用 BLAS.trmv,但与 BLAS.trmv 相比,它仍然适用于例如BigFloat 元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      相关资源
      最近更新 更多