Gauss-Jordan módszer

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. június 9-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

A Gauss-Jordan módszer (az ismeretlenek teljes kiküszöbölésének módszere) egy olyan módszer, amelyet lineáris algebrai egyenletrendszerek négyzetes rendszereinek megoldására , egy mátrix inverzének meghatározására , egy adott bázis vektor koordinátáinak vagy rangjának meghatározására használnak. egy mátrixból . A módszer a Gauss-módszer módosítása . C. F. Gaussról és Wilhelm Jordan német földmérőről és matematikusról nevezték el [1] .

Algoritmus

  1. Válassza ki a mátrix első bal oldali oszlopát , amelynek legalább egy nullától eltérő értéke van.
  2. Ha ebben az oszlopban a legfelső szám nulla, akkor változtassa meg a mátrix teljes első sorát a mátrix másik olyan sorával, ahol ebben az oszlopban nincs nulla.
  3. Az első sor összes eleme a kiválasztott oszlop felső elemével van osztva.
  4. A fennmaradó sorokból az első sort kivonjuk, megszorozzuk a megfelelő sor első elemével, hogy minden sor első eleme (az első kivételével) nulla legyen.
  5. Ezután ugyanezt az eljárást az első sor és az első oszlop törlése után az eredeti mátrixból nyert mátrixszal hajtjuk végre.
  6. Az eljárás egyszeri megismétlése után egy felső háromszög alakú mátrixot kapunk
  7. Vonja ki az utolsó előtti sorból az utolsó sort, megszorozva a megfelelő együtthatóval úgy, hogy a főátlón csak 1 maradjon az utolsó előtti sorban .
  8. Ismételje meg az előző lépést a következő sorokhoz. Ennek eredményeként egy identitásmátrixot és egy szabad vektor helyett egy megoldást kapunk (az összes transzformációt el kell végezni vele).

Kibővített algoritmus egy mátrix inverzének megtalálásához

Adva legyen :

Előrelépés (a főátló alatti nullák képzésének algoritmusa)

Kapunk: Kapunk: feltéve, hogy feltéve, hogy Kapunk:

Fordított mozgás (algoritmus nullák képzésére a főátló felett)

A képletet használjuk: , feltéve, hogy

Ismételjük meg a lépéseket az I mátrixra a következő képlet szerint: , feltéve, hogy

Végül megkapjuk:

Példa

A következő egyenletrendszer megoldásához :

3 × 4-es mátrixba írjuk, ahol az utolsó oszlop egy szabad tag:

Tegyük a következőket:

Kapunk:

A jobb oldali oszlopban a megoldást kapjuk:

.

Az algoritmus megvalósítása C# programozási nyelven

névtér Gauss_Jordan_Method { osztály matematika { /// <összefoglaló> Gauss-Jordan módszer (inverz mátrix) /// </summary> /// <param name="Matrix">Kezdeti mátrix</param> /// <returns></returns> nyilvános statikus kettős [,] GaussJordan ( double [,] Mátrix ) { int n = Mátrix . GetLength ( 0 ); //A kezdeti mátrix mérete double [,] xirtaM = new double [ n , n ]; //Identitásmátrix (kívánt inverz mátrix) for ( int i = 0 ; i < n ; i ++) xirtaM [ i , i ] = 1 ; double [,] Mátrix_Big = new double [ n , 2 * n ]; //A kezdeti mátrix és az azonosság összekapcsolásával kapott közös mátrix for ( int i = 0 ; i < n ; i ++) for ( int j = 0 ; j < n ; j ++) { Mátrix_Big [ i , j ] = Mátrix [ i , j ]; Mátrix_Big [ i , j + n ] = xirtaM [ i , j ]; } //Előrelépés (a bal alsó sarok nullázása) for ( int k = 0 ; k < n ; k ++) //k-sorszám { for ( int i = 0 ; i < 2 * n ; i ++) //i-oszlop száma Mátrix_Big [ k , i ] = Mátrix_Big [ k , i ] / Mátrix [ k , k ]; //A k-karakterlánc elosztása az első !=0 taggal, hogy eggyel konvertálja for ( int i = k + 1 ; i < n ; i ++) //a k után következő sor i-száma { double K = Mátrix_Big [ i , k ] / Matrix_Big [ k , k ]; //Együttható for ( int j = 0 ; j < 2 * n ; j ++) //j - a k után következő sor oszlopának száma Mátrix_Nagy [ i , j ] = Mátrix_Nagy [ i , j ] - Mátrix_Nagy [ k , j ] * K ; //Az első tag alatti mátrixelemek nullázása eggyé konvertálva } for ( int i = 0 ; i < n ; i ++) //Frissítés, a kezdeti mátrix módosítása for ( int j = 0 ; j < n ; j ++) Mátrix [ i , j ] = Mátrix_Big [ i , j ]; } //Visszamozgatás (a jobb felső sarok nullázása) for ( int k = n - 1 ; k > - 1 ; k -- ) //k sorszám { for ( int i = 2 * n - 1 ; i > - 1 ; i --) //i-oszlop száma Mátrix_Big [ k , i ] = Mátrix_Big [ k , i ] / Mátrix [ k , k ]; for ( int i = k - 1 ; i > - 1 ; i --) //a k után következő sor i-száma { double K = Mátrix_Big [ i , k ] / Matrix_Big [ k , k ]; for ( int j = 2 * n - 1 ; j > - 1 ; j --) //j - a k után következő sor oszlopszáma Mátrix_Nagy [ i , j ] = Mátrix_Nagy [ i , j ] - Mátrix_Nagy [ k , j ] * K ; } } //Elkülönül a közös mátrixtól for ( int i = 0 ; i < n ; i ++) for ( int j = 0 ; j < n ; j ++) xirtaM [ i , j ] = Mátrix_Big [ i , j + n ]; return xirtaM ; } } }

Jegyzetek

  1. A Jordan név „Jordánia” átírása hibás, de általánosan elfogadott, és a legtöbb orosz nyelvű forrásban megtalálható.

Irodalom

  • Atkinson, Kendall A. (1989), An Introduction to Numerical Analysis (2. kiadás), New York: John Wiley & Sons , ISBN 978-0471624899  .
  • Bolch, Gunter; Greiner, Stefan; de Meer, Hermann és Trivedi, Kishor S. (2006), Queuing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications (2. kiadás), Wiley-Interscience , ISBN 978-0-471-79156-0  .
  • Calinger, Ronald (1999), A matematika kontextuális története , Prentice Hall , ISBN 978-0-02-318285-3  .
  • Farebrother, RW (1988), Linear Least Squares Computations , STATISZTIKA: Tankönyvek és monográfiák, Marcel Dekker, ISBN 978-0-8247-7661-9 
  • Higham, Nicholas (2002), Accuracy and Stability of Numerical Algorithms (2. kiadás), SIAM , ISBN 978-0-89871-521-7  .
  • Katz, Victor J. (2004), A History of Mathematics, Brief Version , Addison-Wesley , ISBN 978-0-321-16193-2  .
  • Lipson, Marc & Lipschutz, Seymour (2001), Schaum vázlata a lineáris algebra elméletéről és problémáiról , New York: McGraw-Hill , p. 69–80, ISBN 978-0-07-136200-9  .
  • Press, W.H.; Teukolsky, SA; Vetterling, WT & Flannery, BP (2007), 2.2 . szakasz , Numerikus receptek: The Art of Scientific Computing (3. kiadás), New York: Cambridge University Press, ISBN 978-0-521-88068-8 

Linkek