Crout-algoritmus

A Wikipédiából, a szabad enciklopédiából
A lap aktuális változatát látod, az utolsó szerkesztést Xqbot (vitalap | szerkesztései) végezte 2020. április 22., 21:08-kor. Ezen a webcímen mindig ezt a változatot fogod látni. (Bot: Replace deprecated <source> tag and "enclose" parameter [https://lists.wikimedia.org/pipermail/wikitech-ambassadors/2020-April/002284.html])
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

A módszert Prescott Durand Crout alkotta meg. Lineáris egyenletrendszerek megoldásában játszik szerepet.

Az algoritmus alapja[szerkesztés]

A Crout-algoritmus az LU felbontás egyik lehetséges kivitelezése, mivel az A mátrixot egy alsó háromszögmátrixra (L) és egy felső háromszögmátrixra (U) bontja fel.

Tehát abból indulunk ki, hogy:

Példa: Három egyenletes egyenletrendszer esetén a következőképp fog kinézni:

Az algoritmus során a következő lépéseket követjük:

1) Végrehajtjuk az , i ϵ [1..n] értékadásokat

2) Minden egyes j ϵ [1..n] indexre a következő két lépést hajtjuk végre:

  a) ; ahol i ϵ [1..j]
  b) ; ahol i ϵ [j+1..n]

Az algoritmus biztosítja, hogy az egyenletek jobb oldalán szereplő, éppen felhasználásra kerülő l és u változók előzőleg már kiszámításra kerültek.

A módszer műveletigénye (), ami gyakorlatilag egy kiküszöbölést és két visszahelyettesítést jelent.

A Crout-algoritmus Python programozási nyelvben[szerkesztés]

def Crout(a,l,u):
    for i in range(n):
        l[i][i]=1
    for j in range(n):
        for i in range(j+1):
            u[i][j]=a[i][j]
            for k in range(i):            
                u[i][j]=u[i][j]-l[i][k]*u[k][j]

        for i in range(j+1,n):
            l[i][j]=a[i][j]
            for k in range(j):
                l[i][j]=l[i][j]-l[i][k]*u[k][j]
            l[i][j]=l[i][j]/u[j][j]
    return l, u

Források[szerkesztés]

Lázár Zsolt, Lázár József, Járai-Szabó Ferenc: Numerikus módszerek