LU felbontás és egy lehetséges alkalmazása


A segédprogramot Csík András írta.


A matematikai háttér:

Az alábbi szubrutin az LU felbontás segítségével megoldást ad az A*x=b egyenletre, ahol az A egy négyzetes mátrix, a b egy vektor, és az x is egy vektor. A és b adottak (ismertek), x a keresett (ismeretlen) vektor. Az egyenlet megoldásához elõször az A mátrixot felbontjuk L és U mátrixok szorzatára L*U=A alakban, ahol L az úgynevezett alsó háromszög, az U a felsõ háromszög mátrix. Ezt követõen kihasználva az A*x=(L*U)*x=L*(U*x)=b összefüggést, felírhatjuk az L*y=b, U*x=y egyenletrendszert. Ezt megoldva kapjuk eredményül x vektort.

A szubrutin használata:

A szubrutin elsõ sorában, nevezetesen a
subroutine lulu(n,a,b,c,l,u,x)
sorban a bemenõ paraméterek az n, az a és a b, a kimenõ paraméterek a c, az l, az u és az x. Az n (egész) az A (valós) mátrix sorainak száma, az a az A mátrix elemeit tartalmazza mátrixos formátumban, a b a b (valós) vektor. A c értéke 0 vagy 1 lehet. Ha 1, akkor az A mátrix szinguláris, ha 0, akkor nem szinguláris. Az l és u paraméterek az L és U mátrixokat, x pedig a keresett x vektort tartalmazza. Fontos: csak 10*10-es mátrixot és 10 elemû vektort használhatunk. (azaz n, a, b értéke max 10 lehet!!)

A szubrutin meghívása:

call lulu(n,a,b,c,l,u,x)
utasítással történik, melyet a leendõ program törzsében kell elhelyezni. Az utasításban szereplo változók a következok: az n, az a és a b a bemenõ paraméterek, a c, az l, az u és az x a kimenõ paraméterek. Az n (egész) az A (valós) mátrix sorainak száma, az a az A mátrix elemeit tartalmazza mátrixos formátumban, a b a b (valós) vektor. A c értéke 0 vagy 1 lehet. Ha 1, akkor az A mátrix szinguláris, ha 0, akkor nem szinguláris. Az l és u paraméterek az L és U mátrixokat, x pedig a keresett x vektort tartalmazza.

Példaprogram a használatra:

program teszt
real a, b, c, l, l, x
integer n
call lulu(n,a,b,c,l,u,x)

ide jön a letöltendõ segédprogram

ide pedig a végeredmény kiiratása

write (*,*)c, l, u, x
stop
end

 

A próbafuttatás:

n=2, a mátrix beírt elemei: A(1,1)=1, A(1,2)=2, A(2,1)=3, A(2,2)= 4, a vektor elemei: b vektor elsõ eleme = 1, a b vektor második eleme= 2

Ha ezeket beírod akkor a program kiírja az L és U elemeit illetve a keresett x eredményeket. Ha helyesen jártál el, akkor az x vektor elsõ elemére 0 a másodikra 0,5 jön ki. A kiiratásnál a második elem alatti szám a c-re utal, ami egy nagyon pici szám lett 10^-39-es nagyságrendû, azaz gyakorlatilag nulla, tehát az A mátrix nem szinguláris.

Innen töltheted le a segédprogramot: minner.for


[Vissza a fõoldalra]