我是朱莉娅·朗(Julia-lang)的新手,我正在尝试多次在朱莉娅(Julia)中求解一个对称的tridiagonal系统,所以我将矩阵组装为
SymTridiagonal( e ,ones(L-4) )
我系统中的变化是右侧。因此,我尝试在此线程上使用Chris Rackauckas解决方案,我引用了:
只是做x = lufack(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}
所以我的问题是:什么是使Lufack提出的正确方法!功能
SymTridiagonal
矩阵的默认分解为ldlt(从 ldltfact
获得),而不是lu(从 lufact
获得)。如果您只想求解Ax=b
A
是SymTridiagonal
,则足以进行
x = Ab
和朱莉娅将派遣到ldltfact
解决问题。如果您想明确(或想将其用于其他因素),则可以使用
F = ldltfact(A) # or F = factorize(A) which will also return LDLt
x = Fb
如果特别需要Lu-Factorization,可以使用
F = lufact(Tridiagonal(A))
如注释中指出的那样,但是在这种情况下使用ldltfact
更有效。