Gauss-Jordanova metoda

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 9. června 2021; kontroly vyžadují 2 úpravy .

Gauss-Jordanova metoda (metoda úplné eliminace neznámých) je metoda, která se používá k řešení čtvercových soustav lineárních algebraických rovnic , nalezení inverze matice , nalezení souřadnic vektoru v dané bázi nebo zjištění pořadí matice . Metoda je modifikací Gaussovy metody . Pojmenováno po C. F. Gaussovi a německém geodetu a matematikovi Wilhelmu Jordanovi [1] .

Algoritmus

  1. Vyberte první levý sloupec matice , který má alespoň jednu nenulovou hodnotu.
  2. Pokud je nejvyšší číslo v tomto sloupci nula, změňte celý první řádek matice za jiný řádek matice, kde v tomto sloupci není žádná nula.
  3. Všechny prvky prvního řádku jsou rozděleny horním prvkem vybraného sloupce.
  4. Od zbývajících řádků se odečte první řádek, vynásobí se prvním prvkem odpovídajícího řádku, aby byl první prvek každého řádku (kromě prvního) nula.
  5. Dále se stejný postup provede s maticí získanou z původní matice po smazání prvního řádku a prvního sloupce.
  6. Po zopakování tohoto postupu jednou se získá horní trojúhelníková matice
  7. Od předposledního řádku odečtěte poslední řádek vynásobený příslušným koeficientem tak, aby v předposlední řadě zůstala pouze 1 na hlavní diagonále .
  8. Opakujte předchozí krok pro další řádky. Výsledkem je matice identity a řešení na místě volného vektoru (je nutné s ním provádět všechny stejné transformace).

Rozšířený algoritmus pro nalezení inverzní matice

Nechat dáno :

Pohyb vpřed (algoritmus pro tvorbu nul pod hlavní diagonálou)

Dostaneme: Dostaneme: pokud pokud Dostaneme:

Zpětný pohyb (algoritmus pro tvorbu nul přes hlavní diagonálu)

Používáme vzorec: , za předpokladu, že

Opakujeme kroky pro matici I podle vzorce: , za předpokladu, že

Nakonec dostaneme:

Příklad

Chcete-li vyřešit následující soustavu rovnic :

Zapíšeme jej ve tvaru matice 3 × 4, kde poslední sloupec je volný člen:

Udělejme následující:

Dostaneme:

V pravém sloupci dostaneme řešení:

.

Implementace algoritmu v programovacím jazyce C#

jmenný prostor Gauss_Jordan_Method { třída Matematika { /// <shrnutí> /// Gauss-Jordanova metoda (inverzní matice) /// </summary> /// <param name="Matrix">Počáteční matice</param> /// <returns></returns> public static double [,] GaussJordan ( double [,] Matrix ) { int n = Matice . GetLength ( 0 ); //Rozměr počáteční matice double [,] xirtaM = new double [ n , n ]; //Matice identity (požadovaná inverzní matice) for ( int i = 0 ; i < n ; i ++) xirtaM [ i , i ] = 1 ; double [,] Matrix_Big = new double [ n , 2 * n ]; //Společná matice získaná spojením počáteční matice a identity for ( int i = 0 ; i < n ; i ++) for ( int j = 0 ; j < n ; j ++) { Matrix_Big [ i , j ] = Matrix [ i , j ]; Matrix_Big [ i , j + n ] = xirtaM [ i , j ]; } //Posun vpřed (vynulování levého dolního rohu) for ( int k = 0 ; k < n ; k ++) //číslo k-řádku { for ( int i = 0 ; i < 2 * n ; i ++) //číslo sloupce i Matrix_Big [ k , i ] = Matrix_Big [ k , i ] / Matrix [ k , k ]; //Dělení k-řetězce prvním členem !=0 pro převod na jeden for ( int i = k + 1 ; i < n ; i ++) //i-číslo dalšího řádku po k { double K = Matrix_Big [ i , k ] / Matrix_Big [ k , k ]; //Součinitel for ( int j = 0 ; j < 2 * n ; j ++) //číslo j-sloupce dalšího řádku po k Matrix_Big [ i , j ] = Matrix_Big [ i , j ] - Matrix_Big [ k , j ] * K ; //Nulování prvků matice pod prvním členem převedeno na jeden } for ( int i = 0 ; i < n ; i ++) //Aktualizovat, provést změny počáteční matice for ( int j = 0 ; j < n ; j ++) Matice [ i , j ] = Matice_Big [ i , j ]; } //Zpětný pohyb (vynulování pravého horního rohu) for ( int k = n - 1 ; k > - 1 ; k --) //číslo k-řádku { for ( int i = 2 * n - 1 ; i > - 1 ; i --) //číslo sloupce i Matrix_Big [ k , i ] = Matrix_Big [ k , i ] / Matrix [ k , k ]; for ( int i = k - 1 ; i > - 1 ; i --) //i-číslo dalšího řádku po k { double K = Matrix_Big [ i , k ] / Matrix_Big [ k , k ]; for ( int j = 2 * n - 1 ; j > - 1 ; j --) //číslo j-sloupce dalšího řádku po k Matrix_Big [ i , j ] = Matrix_Big [ i , j ] - Matrix_Big [ k , j ] * K ; } } //Oddělte od společné matice for ( int i = 0 ; i < n ; i ++) for ( int j = 0 ; j < n ; j ++) xirtaM [ i , j ] = Matrix_Big [ i , j + n ]; návrat xirtaM ; } } }

Poznámky

  1. Transkripce jména Jordánsko jako „Jordánsko“ je chybná, ale je obecně přijímána a nachází se ve většině ruskojazyčných zdrojů.

Literatura

  • Atkinson, Kendall A. (1989), Úvod do numerické analýzy (2. vydání), New York: John Wiley & Sons , ISBN 978-0471624899  .
  • Bolch, Gunter; Greiner, Stefan; de Meer, Hermann & Trivedi, Kishor S. (2006), Sítě řazení do fronty a Markovovy řetězce: Modelování a hodnocení výkonu s aplikacemi počítačových věd (2. vydání), Wiley-Interscience , ISBN 978-0-471-79156-0  .
  • Calinger, Ronald (1999), A Contextual History of Mathematics , Prentice Hall , ISBN 978-0-02-318285-3  .
  • Farebrother, RW (1988), Linear Least Squares Computations , STATISTICS: Učebnice a monografie, Marcel Dekker, ISBN 978-0-8247-7661-9 
  • Higham, Nicholas (2002), Přesnost a stabilita numerických algoritmů (2. vydání), SIAM , ISBN 978-0-89871-521-7  .
  • Katz, Victor J. (2004), A History of Mathematics, Stručná verze , Addison-Wesley , ISBN 978-0-321-16193-2  .
  • Lipson, Marc & Lipschutz, Seymour (2001), Schaumův nástin teorie a problémů lineární algebry , New York: McGraw-Hill , str. 69–80, ISBN 978-0-07-136200-9  .
  • Press, W.H.; Teukolsky, SA; Vetterling, WT & Flannery, BP (2007), oddíl 2.2 , Numerické recepty: Umění vědeckého počítání (3. vydání), New York: Cambridge University Press, ISBN 978-0-521-88068-8 

Odkazy