Julia Lang如何求解三对角系统
我是Julia Lang的新手,我多次尝试在Julia中求解对称三对角系统,所以我,将我的矩阵组装为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})
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
我认为三对角系统已经可以在线性时间内求解了。为什么需要因子分解呢?