Gauss-Jordan menetelmä

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 9.6.2021 tarkistetusta versiosta . tarkastukset vaativat 2 muokkausta .

Gauss-Jordan -menetelmä (tuntemattomien täydellisen eliminoinnin menetelmä) on menetelmä, jota käytetään lineaaristen algebrallisten yhtälöiden neliöjärjestelmien ratkaisemiseen , matriisin käänteisarvon löytämiseen, vektorin koordinaattien löytämiseen tietyssä kannassa tai järjestyksen löytämiseen. matriisista . Menetelmä on muunnos Gaussin menetelmästä . Nimetty C. F. Gaussin ja saksalaisen maanmittarin ja matemaatikon Wilhelm Jordanin mukaan [1] .

Algoritmi

  1. Valitse matriisin ensimmäinen vasen sarake , jossa on vähintään yksi nollasta poikkeava arvo.
  2. Jos tämän sarakkeen ylin luku on nolla, muuta matriisin koko ensimmäinen rivi toisella matriisin rivillä, jossa tässä sarakkeessa ei ole nollaa.
  3. Kaikki ensimmäisen rivin elementit jaetaan valitun sarakkeen ylimmällä elementillä.
  4. Jäljelle jäävistä riveistä vähennetään ensimmäinen rivi, joka kerrotaan vastaavan rivin ensimmäisellä elementillä, jotta jokaisen rivin (lukuun ottamatta ensimmäistä) ensimmäinen elementti saadaan nollaksi.
  5. Seuraavaksi sama toimenpide suoritetaan alkuperäisestä matriisista saadulle matriisille ensimmäisen rivin ja ensimmäisen sarakkeen poistamisen jälkeen.
  6. Kun tämä toimenpide on toistettu kerran, saadaan ylempi kolmiomatriisi
  7. Vähennä toiseksi viimeisestä rivistä viimeinen rivi kerrottuna sopivalla kertoimella, niin että vain 1 päälävistäjästä jää toiseksi viimeiselle riville .
  8. Toista edellinen vaihe seuraaville riveille. Tuloksena saadaan identiteettimatriisi ja ratkaisu vapaan vektorin tilalle (on tarpeen suorittaa kaikki samat muunnokset sen kanssa).

Laajennettu algoritmi matriisin käänteisarvon löytämiseksi

Anna annettu :

Siirto eteenpäin (algoritmi nollien muodostamiseksi päädiagonaalin alle)

Saamme: Saamme: edellyttäen että edellyttäen että Saamme:

Käänteinen liike (algoritmi nollien muodostukselle päädiagonaalin yli)

Käytämme kaavaa: , edellyttäen että

Toistamme vaiheet matriisille I kaavan mukaan: , edellyttäen, että

Lopulta saamme:

Esimerkki

Seuraavan yhtälöjärjestelmän ratkaisemiseksi :

Kirjoitamme sen 3 × 4 -matriisin muodossa, jossa viimeinen sarake on vapaa jäsen:

Toimitaan seuraavasti:

Saamme:

Oikeassa sarakkeessa saamme ratkaisun:

.

Algoritmin toteutus C#-ohjelmointikielellä

nimiavaruus Gauss_Jordan_Method { luokan matematiikkaa { /// <yhteenveto> /// Gauss-Jordan-menetelmä (käänteismatriisi) /// </summary> /// <param name="Matrix">Alkuperäinen matriisi</param> /// <palauttaa></palauttaa> julkinen staattinen tupla [,] GaussJordan ( double [,] Matrix ) { int n = Matriisi . GetLength ( 0 ); //Alkuperäisen matriisin mitat double [,] xirtaM = uusi tupla [ n , n ]; //Identiteettimatriisi (toivottu käänteimatriisi) for ( int i = 0 ; i < n ; i ++) xirtaM [ i , i ] = 1 ; double [,] Matrix_Big = uusi tupla [ n , 2 * n ]; //Yhteinen matriisi, joka saadaan yhdistämällä alkumatriisi ja identiteetti for ( int i = 0 ; i < n ; i ++) for ( int j = 0 ; j < n ; j ++) { Matriisi_Big [ i , j ] = Matriisi [ i , j ]; Matriisi_Suuri [ i , j + n ] = xirtaM [ i , j ]; } //Siirto eteenpäin (vasemman alakulman nollaus) for ( int k = 0 ; k < n ; k ++) //k-rivin numero { for ( int i = 0 ; i < 2 * n ; i ++) //i-sarakkeen numero Matriisi_iso [ k , i ] = Matriisi_Suuri [ k , i ] / Matriisi [ k , k ]; //K-merkkijonon jakaminen ensimmäisellä jäsenellä !=0 sen muuntamiseksi yhdeksi for ( int i = k + 1 ; i < n ; i ++) //k:n jälkeen seuraavan rivin i-numero { kaksinkertainen K = Matriisi_Suuri [ i , k ] / Matriisi_Suuri [ k , k ]; //Kerroin for ( int j = 0 ; j < 2 * n ; j ++) //j-sarakkeen numero k:n jälkeen seuraavan rivin Matriisi_Suuri [ i , j ] = Matriisi_Suuri [ i , j ] - Matriisi_Iso [ k , j ] * K ; //Matriisielementtien nollaus ensimmäisen jäsenen alapuolella muutettuna yhdeksi } for ( int i = 0 ; i < n ; i ++) //Päivitä, tee muutoksia alkuperäiseen matriisiin for ( int j = 0 ; j < n ; j ++) Matriisi [ i , j ] = Matriisi_Suuri [ i , j ]; } //Käänteinen siirto (oikean yläkulman nollaus) for ( int k = n - 1 ; k > - 1 ; k --) //k-rivin numero { for ( int i = 2 * n - 1 ; i > - 1 ; i --) //i-sarakkeen numero Matriisi_iso [ k , i ] = Matriisi_Suuri [ k , i ] / Matriisi [ k , k ]; for ( int i = k - 1 ; i > - 1 ; i --) //k:n jälkeen seuraavan rivin i-numero { kaksinkertainen K = Matriisi_Suuri [ i , k ] / Matriisi_Suuri [ k , k ]; for ( int j = 2 * n - 1 ; j > - 1 ; j --) //j - sarakkeen numero k:n jälkeen seuraavan rivin Matriisi_Suuri [ i , j ] = Matriisi_Suuri [ i , j ] - Matriisi_Iso [ k , j ] * K ; } } //Ero yhteisestä matriisista for ( int i = 0 ; i < n ; i ++) for ( int j = 0 ; j < n ; j ++) xirtaM [ i , j ] = Matriisi_Suuri [ i , j + n ]; paluu xirtaM ; } } }

Muistiinpanot

  1. Jordanian nimen transkriptio "Jordaniksi" on virheellinen, mutta se on yleisesti hyväksytty ja löytyy useimmista venäjänkielisistä lähteistä.

Kirjallisuus

  • Atkinson, Kendall A. (1989), An Introduction to Numerical Analysis (2. painos), New York: John Wiley & Sons , ISBN 978-0471624899  .
  • Bolch, Gunter; Greiner, Stefan; de Meer, Hermann & Trivedi, Kishor S. (2006), Queuing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications (2. painos), 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 , TILASTOTIEDOT: Oppikirjat ja monografiat, Marcel Dekker, ISBN 978-0-8247-7661-9 
  • Higham, Nicholas (2002), Accuracy and Stability of Numerical Algorithms (2. painos), SIAM , ISBN 978-0-89871-521-7  .
  • Katz, Victor J. (2004), A History of Mathematics, lyhyt versio , Addison-Wesley , ISBN 978-0-321-16193-2  .
  • Lipson, Marc & Lipschutz, Seymour (2001), Schaumin pääpiirteet lineaarisen algebran teoriasta ja ongelmista , New York: McGraw-Hill , s. 69–80, ISBN 978-0-07-136200-9  .
  • Press, W.H.; Teukolsky, SA; Vetterling, WT & Flannery, BP (2007), osio 2.2 , numeeriset reseptit: The Art of Scientific Computing (3. painos), New York: Cambridge University Press, ISBN 978-0-521-88068-8 

Linkit