三角行列ベクトル乗算にBLAS関数dtrmvを使用しようとしています。ドキュメントによると:!Julia三角行列ベクトルBLASラッパーBLAS.trmv
trmv(ULは、TaやDA、Aは、B)、OP(A)* opが転置AのためのTA(アイデンティティのためのN、Tによって決定されたBを、返し と共役転置AについてはC)。 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}
エラーの解釈に問題があります。誰も助けることができますか?
EDIT:あなたはMchol=chol(M)'
を使用することができます Mchol = CHOL(M)によって計算され Mcholを解決し」 は動作しませんが、MCholが LAPACK.potrfによって計算された!( 'L'、Mchol)