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
- Välj den första vänstra kolumnen i matrisen , som har minst ett värde som inte är noll.
- 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.
- Alla element i den första raden delas med det översta elementet i den valda kolumnen.
- 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.
- 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.
- Efter att ha upprepat denna procedur en gång erhålls en övre triangulär matris
- 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 .
- 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)
- Dividera den första raden i matris A med , vi får: , j är en kolumn i matris A.
- Vi upprepar stegen för matris I, enligt formeln: s är en kolumn av matris I
Vi får:
- Vi kommer att bilda 0 i den första kolumnen:
- Vi upprepar stegen för matris I, enligt formlerna:
Vi får:
- vi fortsätter att utföra liknande operationer med formlerna:
förutsatt att
- Vi upprepar stegen för matris I, enligt formlerna:
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:
- Till rad 2 lägg till: −4 × Rad 1.
- Till rad 3 lägg till: −9 × Rad 1.
Vi får:
- Till rad 3 lägg till: −3 × Rad 2.
- Rad 2 delas med −2
- Till rad 1 lägg till: −1 × Rad 3.
- Till rad 2 lägger vi till: −3/2 × Rad 3.
- Till rad 1 lägg till: −1 × Rad 2.
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
- ↑ 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
Metoder för att lösa SLAE |
---|
Direkta metoder |
|
---|
Iterativa metoder |
|
---|
Allmän |
|
---|