ŘEŠENÍ SOUSTAVY LINEÁRNÍCH ROVNIC
PROBLÉM
Určit řešení maticové rovnice A.*X.=B., kde * značí násobení matic, A. je čtvercová matice, B. je zadaný sloupcový vektor a X. je hledaný sloupcový vektor.
ALGORITMUS
Dále uvedený algoritmus
LUBKSB řeší soustavu
N lineárních rovnic
A.*X.=B., kde
A. označuje matici, která je vypočítána funkcí
LUDCMP. Pro zadanou čtvercovou matici
A. řádu
N a vektor
B. vyřeší dvojice příkazů:
call LUDCMP N; call LUBKSB N
|
maticovou rovnici A.*X.=B. a uloží řešení do vektoru B.
IMPLEMENTACE
Jednotka: vnitřní podprogram
Globální proměnné: vstupní čtvercová matice A. řádu N - LU rozklad; vstupní vektor Indx. - záznam permutace řádků. A. a Indx. jsou určeny funkcí LUDCMP
Parametry: přirozené číslo N
Výsledek: do vektoru B. je uloženo hledané řešení soustavy lineárních rovnic
Poznámka:
Matice A. a vektor Indx. nejsou výpočtem modifikovány. Můžeme je proto použít při dalším výpočtu se změněnou pravou stranou soustavy rovnic (s rozdílným sloupcovým vektorem B.).
LUBKSB: procedure expose A. B. Indx.
parse arg N
L = 0
do I = 1 to N
P = Indx.I; Sum = B.P; B.P = B.I
if L <> 0
then do
do J = L to I - 1
Sum = Sum - A.I.J * B.J
end
end
else if Sum <> 0 then L = I
B.I = Sum
end
do I = N to 1 by -1
Sum = B.I
do J = I + 1 to N
Sum = Sum - A.I.J * B.J
end
B.I = Sum / A.I.I
end
return
|
PŘÍKLAD
N=3
A.1.1 = 2; A.1.2 = -1; A.1.3 = -1; B.1 = 4
A.2.1 = 3; A.2.2 = 4; A.2.3 = -2; B.2 = 11
A.3.1 = 3; A.3.2 = -2; A.3.3 = 4; B.3 = 11
call LUDCMP N; call LUBKSB N
S = ""
do J = 1 to N; S = S B.J; end
say S
|
zobrazí
3 1 1
SOUVISLOSTI
Literatura
Press W.H., Teukolsky S.A., Vetterling W.T., Flannery B.P. Numerical Recipes in C : the art of scientific computing
- 2nd ed. University Press, Cambridge, 1992
Faddejev A.K., Sominskij J.S. Sbornik zadač po vyššej algebre
Nauka, Moskva 1964