朱莉娅·朗(Julia-Lang)如何解决三角形系统



我是朱莉娅·朗(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 ASymTridiagonal,则足以进行

x = Ab

和朱莉娅将派遣到ldltfact解决问题。如果您想明确(或想将其用于其他因素),则可以使用

F = ldltfact(A) # or F = factorize(A) which will also return LDLt
x = Fb

如果特别需要Lu-Factorization,可以使用

F = lufact(Tridiagonal(A))

如注释中指出的那样,但是在这种情况下使用ldltfact更有效。

相关内容