Julia-Lang如何解决三对角系统

时间:2017-09-05 04:34:08

标签: julia matrix-factorization

我是Julia-Lang的新人,我试图多次尝试在Julia中解决对称的三对角系统,所以我将矩阵组装成

SymTridiagonal( e ,ones(L-4) )

我的系统中的哪些变化是右侧。所以我尝试在这个thread上使用Chris Rackauckas解决方案,我引用:

  

做X = lufact(X)然后X \ b

事情是,当我这样做时,我得到了

ERROR: LoadError: MethodError: no method matching lufact!(::SymTridiagonal{Float64})

lufact!(!Matched::Union{Base.ReshapedArray{T<:Union{Complex{Float32}, Complex{Float64}, Float32, Float64},2,A,MI}

所以我的问题是:什么是制造输入的正确方法!功能

1 个答案:

答案 0 :(得分:1)

SymTridiagonal矩阵的默认分解是LDLt(从ldltfact获得),而不是LU(从lufact获得)。如果您只是想解决系统Ax=b,其中ASymTridiagonal,那就足够了

x = A\b

和朱莉娅会派遣到ldltfact来解决问题。如果你想明确它(或者想要将因子分解用于别的东西),你可以使用

F = ldltfact(A) # or F = factorize(A) which will also return LDLt
x = F\b

如果特别需要LU分解,您可以使用

F = lufact(Tridiagonal(A))

正如评论中所指出的那样,但在这种情况下使用ldltfact会更有效。