Ř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
Soustava lineárních rovnic
     Determinant matice
     Inverze matic
     LU rozklad

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


Obálka Obsah Index Hlavní stránka

změněno 6. srpna 2000
Copyright © 2000-2001 Vladimír Zábrodský, RNDr.