我是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}
所以我的问题是:什么是制造输入的正确方法!功能
答案 0 :(得分:1)
SymTridiagonal
矩阵的默认分解是LDLt(从ldltfact
获得),而不是LU(从lufact
获得)。如果您只是想解决系统Ax=b
,其中A
是SymTridiagonal
,那就足够了
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
会更有效。