Julia Lang如何求解三对角系统

Julia Lang如何求解三对角系统,julia,matrix-factorization,Julia,Matrix Factorization,我是Julia Lang的新手,我多次尝试在Julia中求解对称三对角系统,所以我,将我的矩阵组装为 SymTridiagonal( e ,ones(L-4) ) 我的系统中的变化在右边。所以我尝试使用Chris Rackauckas的解决方案,我引用: 只需执行X=lufact(X),然后执行X\b 问题是当我这么做的时候 ERROR: LoadError: MethodError: no method matching lufact!(::SymTridiagonal{Float64})

我是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}
错误:LoadError:MethodError:没有与lufact匹配的方法!(::符号三对角{Float64})

事实!(!Matched::Union{Base.reformedArray{T矩阵的默认因式分解是LDLt(从
ldltfact
获得),而不是LU(从
lufact
获得)。如果您只想求解系统
Ax=b
,其中
A
symtriadiagonal
,就足够了

x = A\b
julia将分派到
ldltfact
来解决这个问题。如果您想明确地说明这个问题(或者想对其他事情使用因式分解),您可以使用

F = ldltfact(A) # or F = factorize(A) which will also return LDLt
x = F\b
F = lufact(Tridiagonal(A))
如果特别需要LU分解,可以使用

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

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

使用
lufact!(三对角(X))
。显然,从对称到非对称三对角矩阵没有自动回退。或者更明确地说:
X=lufact(三对角(X))
然后
X\b
我认为三对角系统已经可以在线性时间内求解了。为什么需要因子分解呢?