C# – Gauss Eliminasyon yöntemi

Lineer Denklem sistemlerini matris yöntemiyle çözme sırasında bize yardımcı olan bazı metotlar bulunmaktadır. Bu metotlardan birisi de Gauss Yok etme Metodudur.
Gauss Yok Etme metodunun uygulanabilmesi için denklem sayısının bilinmeyen sayısına eşit olması gerekir. Yani x,y,z şeklinde 3 tane bilinmeyen varsa, bizim bu denklemi Gauss Yok Etme Metodu ile çözebilmemiz için 3 tane denklemimiz bulunmalıdır. Değilse bu yöntemle çözüm uygulayamayız.

Gauss Yok Etme Metodunu uygularken Genişletilmiş Matris yapısını kullanırız. Çözüm için üst üçgen matris elde etmeliyiz. Bunun için de Elementer Satır İşlemleri konusundan yararlanırız.

Üst Üçgen Matris Nedir?

Üst üçgen matrisin ne olduğuna daha önce Matris Çeşitleri konusunda değinmiştik. Tekrar hatırlatmak gerekirse Bir matrisin köşegeninin alt tarafında kalan değerlerin hepsinin sıfır olması o matrisin üst üçgen matris olduğu anlamına gelmekteydi.
Peki matrisimiz Üst Üçgen değilse ne yaparız? Elementer Satır İşlemlerini boşuna öğrenmedik. Elementer Satır işlemleri yardımıyla matrisminizi üst üçgen matris haline getiririz. Üst üçgen matrisi elde ettikten sonra çözüm karşımıza çıkıyor.
Şimdi bu problemi C# dili ile çözmeye çalışalım, çözüm 4*4 matirsler için geçerli, Ama yazdığım algoritma sayesinde n*n şeklinde ki matrislerin de çözümlerine ulaşabiliyoruz.
İlk olarak form ekranını tasarımından başlayalım,

x1,x2,x3 ve x4 bilinmeyenlerinin kat sayılarını boş kutucuklara gireceğiz.  Daha sonra hesapla butonuna tıklayarak sonuçları sonuç listbox’unda göreceğiz.

Kod kısmı

İlk önce textbox’tan aldığımız sayıları değişkenlere eşitleyelim.

                float x11 = 0,x12=0,x13=0,x14=0,c1=0;

                 x11 = Convert.ToInt32(tx11.Text);//Convert=> alınan sayı string şeklinde alınıyor tam sayıya çevirmeye yarıyor!
                 x12 = Convert.ToInt32(tx12.Text);
                 x13 = Convert.ToInt32(tx13.Text);
                 x14 = Convert.ToInt32(tx14.Text);
                 c1 = Convert.ToInt32(txc1.Text);

                lx11.Text = x11.ToString();
                lx12.Text = x12.ToString();
                lx13.Text = x13.ToString();
                lx14.Text = x14.ToString();
                lc11.Text = c1.ToString();

                float x21 = 0, x22 = 0, x23 = 0, x24 = 0, c2 = 0;

                 x21 = Convert.ToInt32(tx21.Text);
                 x22 = Convert.ToInt32(tx22.Text);
                 x23 = Convert.ToInt32(tx23.Text);
                 x24 = Convert.ToInt32(tx24.Text);
                 c2 = Convert.ToInt32(txc2.Text);

                lx21.Text = x21.ToString();
                lx22.Text = x22.ToString();
                lx23.Text = x23.ToString();
                lx24.Text = x24.ToString();
                lc2.Text = c2.ToString();

                float x31 = 0, x32 = 0, x33 = 0, x34 = 0, c3 = 0;

                 x31 = Convert.ToInt32(tx31.Text);
                 x32 = Convert.ToInt32(tx32.Text);
                 x33 = Convert.ToInt32(tx33.Text);
                 x34 = Convert.ToInt32(tx34.Text);
                 c3 = Convert.ToInt32(txc3.Text);

                lx31.Text = x31.ToString();
                lx32.Text = x32.ToString();
                lx33.Text = x33.ToString();
                lx34.Text = x34.ToString();
                lc3.Text = c3.ToString();

                float x41 = 0, x42 = 0, x43 = 0, x44 = 0, c4 = 0;

                 x41 = Convert.ToInt32(tx41.Text);
                 x42 = Convert.ToInt32(tx42.Text);
                 x43 = Convert.ToInt32(tx43.Text);
                 x44 = Convert.ToInt32(tx44.Text);
                 c4 = Convert.ToInt32(txc4.Text);

                lx41.Text = x41.ToString();
                lx42.Text = x42.ToString();
                lx43.Text = x43.ToString();
                lx44.Text = x44.ToString();
                lc4.Text = c4.ToString();

                float[,] A = { { x11, x12, x13, x14 }, { x21, x22, x23, x24 }, { x31, x32, x33, x34 }, { x41, x42, x43, x44 } };
                float[] B = { c1, c2, c3, c4 };

Convert fonksiyonu ile alınan bilgileri float’a çevirdik, daha sonra yazmış olduğumuz gauss fonksiyonu ile çözüme ulaşalım

 void Gauss(float[,]matris , float[]deger , int boyut)
        {
            for (int i = 0; i < boyut; i++)
            {

                float geciciIlk = matris[i, i];// köşegen matrisin seçilmesi             
                    if (geciciIlk == 0)
                    {
                    float degisken;
                          for (int z=0; z<boyut;z++)
                            {
                              degisken = matris[i,z];                                                              
                                    matris[i, z] = matris[i+1 , z];
                                    matris[i + 1, z] = degisken;                       
                    }
                    degisken = deger[i];
                    deger[i] = deger[i + 1];
                    deger[i + 1] = degisken;
                    geciciIlk = matris[i, i];                   
                }

                for (int k = 0; k < boyut; k++)
                {
                    matris[i, k] /= geciciIlk;// mk1 
                }
                deger[i] /= geciciIlk; //mk1
                for (int j = i + 1; j < boyut; j++)//geçici ilkten sonraki elemandan başlıyor!
                {
                    float carpim = matris[j, i] / matris[i, i]; //mk1
                   
                    for (int l = 0; l < boyut; l++)
                    {            
                        matris[j, l] = matris[j, l] - (carpim * matris[i, l]); // satır eşelon
                    }
                    deger[j] = deger[j] - (carpim * deger[i]); //satır eşelon                    
                }             
            }  
            
            float[] sonuclar = new float[boyut];
            sonuclar[boyut - 1] = deger[boyut - 1];

            for (int i = boyut - 2; i >= 0; i--)
            {
                float toplam = 0;
                for (int j = i + 1; j < boyut; j++)
                {
                    toplam =toplam + matris[i, j] * sonuclar[j];
                }
                sonuclar[i] = deger[i] - toplam;
            }

            for (int i=0;i<boyut;i++)
            {
                string s = "";
                for(int j=0;j< boyut; j++)
                {
                    s = s + matris[i, j]+" ";
                }
                lb7.Items.Add(s);

                lb8.Items.Add(sonuclar[i]);
            }
        }

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir