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