DGBSV racuna rjesenje sistema realnih linearnih jednadzbi A * X = B, gdje je A trakasta matrica N*N sa KU naddijagonala i KL poddijagonala, a X i B su N*NRHS matrice.
npr.
[code:1]
|1 0 2 0 0 | |x1| |1|
|1 1 0 1 0 | |x2| |2|
A=|0 2 1 0 3 | X= |x3| B= |3|
|0 0 1 1 0 | |x4| |4|
|0 0 0 2 1 | |x5| |5|
[/code:1]
c-ovska deklaracija bi bila
[code:1]
void dgbsv_(int *n, int *kl, int *ku, int *nrhs, double *ab, int *ldab, int *ipiv, double *b, int *ldb, int *info);
[/code:1]
gdje argumenti predstavljaju sljedece
[code:1]
n = vodeca dimenzija matrice A, tj. N
kl = broj podddijagonala
ku= broj nadddijagonala
nrhs = broj stupaca matrica X i B, tj. NRHS
ab = Na ulazu matrica A u trakastoj formi dimenzija ldab*N, a na izlazu detalji provedene LU faktorizacije
ldab = vodeca dimenzija matrice A u trakastoj formi, ldab>=2*kl+ku+1 ***
ipiv = permutacijski vektor koristen pri rjesavanju sustava
b = Na ulazu matrica desne strane B dimenzija N*NRHS. Na izlazu, ako je info = 0, matrica rjesenja X.
ldb = vodeca dimenzija od matrice B, tj. N
info = 0 ako je sve odradjeno kako treba
[/code:1]
*** Zbog posebnog nacina rada s matricom i potrebne LU faktorizacije funkcija zahtijeva vece zauzimanje memorijskog prostora. zato imamo da je [b]ldab>=2*kl+ku+1[/b].
za detaljnija objasnjenja pogledati [b]man[/b] stranicu od [b]dgbsv[/b].
za gornji primjer argumenti bi bili sljedeci:
[code:1]
n=5
kl=1
ku=2
nrhs=1
|* * * * *|
|* * 2 1 3|
|* 0 0 0 0|
ab=|1 1 1 1 1|, elementi oznaceni * ne moraju se ispunjavati ***
|1 2 1 2 *|
ldab=2*1+ 2 + 1=5
ipiv = ne treba podesavati ( samo osigurati memoriju)
|1|
|2|
b=|3|
|4|
|5|
ldb=5
info = ne treba podesavati ( samo osigurati memoriju)
[/code:1]
*** Zbog uvjeta da je ldab>=2*kl+ku+1 dodali smo jedan redak vise na vrh matrice
funkciju bi sada pozvali na sljedeci nacin:
[code:1]
...
int n, kl, ku, nrhs, ldab, ldb, info, *ipiv;
double *ab, *b;
...
dgbsv_( &n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info);
...
[/code:1]
DGBSV racuna rjesenje sistema realnih linearnih jednadzbi A * X = B, gdje je A trakasta matrica N*N sa KU naddijagonala i KL poddijagonala, a X i B su N*NRHS matrice.
npr.
Kod: |
|1 0 2 0 0 | |x1| |1|
|1 1 0 1 0 | |x2| |2|
A=|0 2 1 0 3 | X= |x3| B= |3|
|0 0 1 1 0 | |x4| |4|
|0 0 0 2 1 | |x5| |5|
|
c-ovska deklaracija bi bila
Kod: |
void dgbsv_(int *n, int *kl, int *ku, int *nrhs, double *ab, int *ldab, int *ipiv, double *b, int *ldb, int *info);
|
gdje argumenti predstavljaju sljedece
Kod: |
n = vodeca dimenzija matrice A, tj. N
kl = broj podddijagonala
ku= broj nadddijagonala
nrhs = broj stupaca matrica X i B, tj. NRHS
ab = Na ulazu matrica A u trakastoj formi dimenzija ldab*N, a na izlazu detalji provedene LU faktorizacije
ldab = vodeca dimenzija matrice A u trakastoj formi, ldab>=2*kl+ku+1 ***
ipiv = permutacijski vektor koristen pri rjesavanju sustava
b = Na ulazu matrica desne strane B dimenzija N*NRHS. Na izlazu, ako je info = 0, matrica rjesenja X.
ldb = vodeca dimenzija od matrice B, tj. N
info = 0 ako je sve odradjeno kako treba
|
*** Zbog posebnog nacina rada s matricom i potrebne LU faktorizacije funkcija zahtijeva vece zauzimanje memorijskog prostora. zato imamo da je ldab>=2*kl+ku+1.
za detaljnija objasnjenja pogledati man stranicu od dgbsv.
za gornji primjer argumenti bi bili sljedeci:
Kod: |
n=5
kl=1
ku=2
nrhs=1
|* * * * *|
|* * 2 1 3|
|* 0 0 0 0|
ab=|1 1 1 1 1|, elementi oznaceni * ne moraju se ispunjavati ***
|1 2 1 2 *|
ldab=2*1+ 2 + 1=5
ipiv = ne treba podesavati ( samo osigurati memoriju)
|1|
|2|
b=|3|
|4|
|5|
ldb=5
info = ne treba podesavati ( samo osigurati memoriju)
|
*** Zbog uvjeta da je ldab>=2*kl+ku+1 dodali smo jedan redak vise na vrh matrice
funkciju bi sada pozvali na sljedeci nacin:
Kod: |
...
int n, kl, ku, nrhs, ldab, ldb, info, *ipiv;
double *ab, *b;
...
dgbsv_( &n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info);
...
|
_________________ The purpose of life is to end
Prosle su godine kolokviji bili laksi, zar ne?
|