2

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

SymTridiagonal( e ,ones(L-4) )

我的系统中的变化是右手边。所以我尝试在这个线程上使用 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}

所以我的问题是:什么是对 lufact 进行归因的正确方法!功能

4

1 回答 1

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在这种情况下使用效率更高。

于 2017-09-05T11:30:45.963 回答