【问题标题】:Julia-Lang how to solve tridiagonal systemJulia-Lang 如何求解三对角系统
【发布时间】:2018-02-13 06:47:45
【问题描述】:

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

SymTridiagonal( e ,ones(L-4) )

我的系统中发生的变化是右侧。所以我尝试在thread 上使用 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 进行归因的正确方法!功能

【问题讨论】:

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

标签: julia matrix-factorization


【解决方案1】:

SymTridiagonal 矩阵的默认分解是 LDLt(从 ldltfact 获得),而不是 LU(从 lufact 获得)。如果您只是想解决Ax=b 的系统ASymTridiagonal 就足够了

x = A\b

julia 会派人到ldltfact 解决问题。如果您想明确说明(或想将因式分解用于其他目的),您可以使用

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

如果特别需要 LU 分解,您可以使用

F = lufact(Tridiagonal(A))

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

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 2013-09-07
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多