Gauss-Jordan-metoden

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 9 juni 2021; kontroller kräver 2 redigeringar .

Gauss-Jordan- metoden (metod för fullständig eliminering av okända) är en metod som används för att lösa kvadratiska system av linjära algebraiska ekvationer , hitta inversen av en matris , hitta koordinaterna för en vektor i en given bas , eller hitta rangordningen av en matris . Metoden är en modifiering av Gaussmetoden . Uppkallad efter C. F. Gauss och den tyske lantmätaren och matematikern Wilhelm Jordan [1] .

Algoritm

  1. Välj den första vänstra kolumnen i matrisen , som har minst ett värde som inte är noll.
  2. Om det översta talet i denna kolumn är noll, ändra då hela den första raden i matrisen med en annan rad i matrisen där det inte finns någon noll i denna kolumn.
  3. Alla element i den första raden delas med det översta elementet i den valda kolumnen.
  4. Från de återstående raderna subtraheras den första raden, multiplicerad med det första elementet i motsvarande rad, för att få det första elementet i varje rad (förutom den första) noll.
  5. Därefter utförs samma procedur med matrisen som erhålls från den ursprungliga matrisen efter att den första raden och den första kolumnen tagits bort.
  6. Efter att ha upprepat denna procedur en gång erhålls en övre triangulär matris
  7. Subtrahera från den näst sista raden den sista raden, multiplicerad med lämplig koefficient, så att endast 1 på huvuddiagonalen återstår i den näst sista raden .
  8. Upprepa föregående steg för efterföljande rader. Som ett resultat erhålls en identitetsmatris och en lösning i stället för en fri vektor (det är nödvändigt att utföra alla samma transformationer med den).

En utökad algoritm för att hitta inversen av en matris

Låt ges :

Flytta framåt (algoritm för bildandet av nollor under huvuddiagonalen)

Vi får: Vi får: förutsatt att förutsatt att Vi får:

Flytta bakåt (algoritm för bildandet av nollor över huvuddiagonalen)

Vi använder formeln: , förutsatt att

Vi upprepar stegen för matrisen I, enligt formeln: , förutsatt att

Äntligen får vi:

Exempel

För att lösa följande ekvationssystem :

Vi skriver det i form av en 3 × 4 matris, där den sista kolumnen är en gratis medlem:

Låt oss göra följande:

Vi får:

I högerspalten får vi lösningen:

.

Implementering av algoritmen i programmeringsspråket C#

namnutrymme Gauss_Jordan_Method { klass matematik { /// <sammanfattning> /// Gauss-Jordan-metoden (invers matris) /// </sammanfattning> /// <param name="Matrix">Initial matris</param> /// <returns></returns> offentlig statisk dubbel [,] GaussJordan ( dubbel [,] Matrix ) { int n = Matris . GetLength ( 0 ); //Dimension av den initiala matrisen dubbel [,] xirtaM = ny dubbel [ n , n ]; //Identitetsmatris (önskad invers matris) för ( int i = 0 ; i < n ; i ++) xirtaM [ i , i ] = 1 ; dubbel [,] Matrix_Big = ny dubbel [ n , 2 * n ]; //Gemensam matris erhållen genom att sammanfoga den initiala matrisen och identiteten för ( int i = 0 ; i < n ; i ++) för ( int j = 0 ; j < n ; j ++) { Matrix_Big [ i , j ] = Matrix [ i , j ]; Matrix_Big [ i , j + n ] = xirtaM [ i , j ]; } //Flytta framåt (nollställa det nedre vänstra hörnet) för ( int k = 0 ; k < n ; k ++) //k-linjenummer { för ( int i = 0 ; i < 2 * n ; i ++) //i-kolumnnummer Matrix_Big [ k , i ] = Matrix_Big [ k , i ] / Matrix [ k , k ]; //Dela k-strängen med den första medlemmen !=0 för att konvertera den till en för ( int i = k + 1 ; i < n ; i ++) //i-talet på nästa rad efter k { dubbel K = Matrix_Big [ i , k ] / Matrix_Big [ k , k ]; //Koefficient för ( int j = 0 ; j < 2 * n ; j ++) //j-kolumnnummer för nästa rad efter k Matrix_Big [ i , j ] = Matrix_Big [ i , j ] - Matrix_Big [ k , j ] * K ; //Nollställning av matriselement under den första medlemmen omvandlas till ett } for ( int i = 0 ; i < n ; i ++) //Uppdatera, gör ändringar i den initiala matrisen för ( int j = 0 ; j < n ; j ++) Matrix [ i , j ] = Matrix_Big [ i , j ]; } // Flytta bakåt (nollställa det övre högra hörnet) för ( int k = n - 1 ; k > - 1 ; k --) //k-linjenummer { för ( int i = 2 * n - 1 ; i > - 1 ; i --) //i-kolumnnummer Matrix_Big [ k , i ] = Matrix_Big [ k , i ] / Matrix [ k , k ]; för ( int i = k - 1 ; i > - 1 ; i --) //i-numret på nästa rad efter k { dubbel K = Matrix_Big [ i , k ] / Matrix_Big [ k , k ]; för ( int j = 2 * n - 1 ; j > - 1 ; j --) //j-kolumnnummer på nästa rad efter k Matrix_Big [ i , j ] = Matrix_Big [ i , j ] - Matrix_Big [ k , j ] * K ; } } //Separera från den gemensamma matrisen för ( int i = 0 ; i < n ; i ++) för ( int j = 0 ; j < n ; j ++) xirtaM [ i , j ] = Matrix_Big [ i , j + n ]; returnera xirtaM ; } } }

Anteckningar

  1. Transkriptionen av namnet Jordan som "Jordanien" är felaktig, men det är allmänt accepterat och finns i de flesta ryskspråkiga källor.

Litteratur

  • Atkinson, Kendall A. (1989), An Introduction to Numerical Analysis (2nd ed.), 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 (2nd ed.), 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: Textbooks and Monographs, Marcel Dekker, ISBN 978-0-8247-7661-9 
  • Higham, Nicholas (2002), Accuracy and Stability of Numerical Algorithms (2:a upplagan), 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), Schaums översikt över teori och problem med linjär algebra , New York: McGraw-Hill , sid. 69–80, ISBN 978-0-07-136200-9  .
  • Press, W.H.; Teukolsky, SA; Vetterling, WT & Flannery, BP (2007), Avsnitt 2.2 , Numeriska recept: The Art of Scientific Computing (3:e upplagan), New York: Cambridge University Press, ISBN 978-0-521-88068-8 

Länkar