Yazan : Şadi Evren ŞEKER
Bir matrisin tersini almak çarpma işlemine göre tersini almak anlamındadır. Örneğin A ve B matrislerinin çarpımından C matrisi çıkıyorsa; C matrisi ile A matrisinin tersi B matrisini vermelidir. Bunu bir nevi bölme olarak düşünmek de mümkündür.
2 boyutlu bir matrisin tersini bulmak içn öncelike determinantı hesaplanır ardından aşağıda gösterildiği üzere elemanları yer değiştirilir:
Yukarda, ilk satırda verilen A matrisinin determinantı hesaplanmış ( |A| ) ve gösterilen yerdeğiştirmiş matris ile skalar (scalar) çarpım yapılmıştır.
Sonuçta elde edilen matris, orjinal A matrisinin tersidir.
Matris 3×3 boyutlarında olsaydı bu hesaplama aşağıdaki şekilde yapılmalıydı:
Görüldüğü üzere matrisin boyutunun değişmesi halinde ters alma işlemi de değişmektedir. Yukarıdaki mantık ile örneğin 4×4’lük bir matris’in tersi alınırken önce 3×3 alt matrislerinin yazılması ardından her bir alt matrisin determinantının yukarıdakine benzer şekilde yerleştirilmesi gerekir.
4×4’lük matrisin tersinin alınması (Utku Bey’in isteği üzerine yazıyorum)
matris tersi alınırken, matrisin boyutunun önemi olunmaksızın determinant alınarak işlem yapılır. Örneğin matris boyutu nxn ise bu matriste (n-1)x(n-1) boyutlarındaki alt matrislerin determinantlarının yer değiştirmiş halleri hesaplanır ve 1/|A| değeri ile skalar çarpım yapılır.
Örneğin matrisimiz aşağıdaki şekilde 4×4 boyutlarında bir matris olsun
Yukarıdaki bu matrisin tersini almak için öncelikle determinantını hesaplayalım:
Ters alma işlemi için determinant sıfırdan farklı olmalıdır. Ardından matrisin tersini alalım:
Buradaki kapalı şekilde yazılan b değerleri ters alma işleminden sonra yapılan yer değiştirmeyi göstermektedir. Yani örneğin b11 değeri, 1. satır ve 1. sütundaki değerleri kapanmış halde matrisin determinantının alınması ile bulunur.
Benzer şekilde b23 değeri için, orjinal matriste bulunan 2. satır ve 3. sütundaki sayılar dışında kalan sayılardan (ki bu sayılar 3×3 boyutlarında bir matris oluşturur) elde edilen determinant değeridir.
Buradaki b değerleri, matrisin verilen satır ve sütun için kofaktörüdür (cofactor).
Bu değerleri açık şekilde yazacak olursak:
şeklinde sayıları sıralayabiliriz.
Yukarıdaki ters alma işlemi kısaca olay iki parçadan oluşuyor, birinci aşamada determinant almanız gerekiyor (nxn boyutundaki bir matris determinantı bilgisayar kullanarak en kolay leibniz yöntemi ile alınır)
ikinci adımda b terimlerini hesaplamanız gerekiyor. Bu terimlerin hesabı için hangi koordinat hesaplanacaksa, o koordinatın satır ve sütunu kapatılıp geri kalan elemanlar bir sarmal şeklinde çarpılır. Bu durumu linkteki örnekten açıkça görebilirsiniz. Örneğin b21 için 2. satır ve 1. sütun kapatılıp kalan elemanlar bir sarmal şeklinde çarpılıp toplanmıştır. Burada mod işlemi ile sarmallık sağlanabilir.
Gauss Jordan Yöntemi
Gelen bir soru üzerine, Gauss Jordan yöntemini adım adım anlatan yeni bir bölüm ekliyorum. Öncelikle yukarıdaki kodda, Gauss Jordan metodunu kullanıyoruz. Bu metotta amaç bir matrisin tersini almak için tersi olan matris ile çarpımını, birim matrise dönüştürmektir.
A x A-1 = I
işlemine göre şayet A matrisinin tersi isteniyorsa
A x B = I , şeklinde yazdığımız B matrisi, A matrisinin tersidir ve
I = A x B , şeklinde yazılabilir.
Buradaki B matrisini elde ederken aslında birim matris üzerinde işlem yapılarak A matrisinin tersi alınmış olur.
Örneğin aşağıdaki matrisi ele alalım:
101
021
111
Bu matrisin tersini alırken öncelikle yanına bir çizgi çekip birim matrisi yazıyoruz:
101|100
021|010
111|001
Buradaki amacımız sol ve sağ tarafta aynı işlemleri yaparak sol tarafta birim matrisi elde etmektir. Böylelikle sağ tarafta matrisin tersi oluşacaktır. Bu satırlar üzerinde yapılan işlemlerre yalın satır işlemleri (elementary row operations) ismi verilir. Bu işlemler aşağıdaki şekilde sıralanabilir:
- bir satırın bir sabit ile çarpılması
- Bir satırın diğer bir satır ile yer değiştirmesi
- Bir satırın diğer bir satırdan çıkarılması
Elbette yukarıdaki bu işlemler, çizginin iki tarafına da uygulanacaktır. Buradaki işlemler aslında bir matriste bir denklemin tutulması durumunda denklemler üzerine yapılan işlemlere benzetilebilir. Örneğin 3 bilinmeyenli 3 denklem ele alınırsa bir denklemin diğer denklemin çözümünde kullanılırken yapılan işlemler gibidir.
Şimdi matrisin tersini alma işlemi ile devam edelim. Amacımız ilk sütunu birim matrise benzetmek. İlk sütunda 3. satırda bulunan 1 tek farklı sayıdır. Dolayısıyla 3. satırın ilk terimini 0 yapabilmek için ilk satırı, 3. satırdan çıkarabiliriz.
101|100
021|010
010|-101
yukarıdaki işlem sonucunda görüldüğü üzere çizginin solundaki ilk satır 3. satırdan ve çizginin sağındaki ilk satır yine çizginin sağındaki 3. satırdan çıkarılmıştır.
çizginin solunda elde edilen 3. satır aslında birim matrisin ikinci satırıdır. O halde 3. satır ile 2. satırı yer değiştirirsek matrisin sol tarafından birim matrise daha çok yaklaşılmış olunur.
101|100
010|-101
021|010
Yine 3. satırı birim matrise benzetmek için bu sefer 2. satırın 2 mislini, 3. satırdan çıkarmak yeterlidir.
101|100
010|-101
001|21-2
Yukarıda görüldüğü üzere çizginin iki yanında da ikinci satır 2 ile çarpılmış ve 3. satırdan çıkarılmıştır.
Sırada ilk satırı birim matrise benzetmek var. Bu işlem için ilk satırdan 3. satırı çıkarmak yeterlidir:
100|-1-12
010|-101
001|21-2
Görüldüğü üzere çizginin sol tarafından birim matri elde edildi. Bu durumda matrisin sağ tarafında elde ettiğimiz matris, ilk matrisin tersidir.
1-12
-101
21-2
sonucunu bulmuş oluruz.
Programlama
Matrisin tersinin alınması işleminin bilgisayarlar marifetiyle yapılması için algoritmik bir yaklaşıma ihtiyaç vardır. Bu bağlamda matrisin boyu ve içeriğinden bağımsız olarka matrisin tersini almak için aşağıdaki yaklaşımı kullanabiliriz.
Bir matrisin tersi, matrisin kendisi ile çarpıldığına birim matrisi veren matristir. Birim matris (identity matrix) ise diyagonu 1 ve diğer elemanları 0 olan matristir.
Öyleyse bir matrisi gerekli işlemleri yaparak birim matrise dönüştürürsek ve bu işlemler sırasında her elemana yapılan değişimi tutarsak sonuçta elde ettiğimiz bu değişim matrisi, orjinal matrisimizin tersi olacaktır.
Aşağıda bu işlemleri adım adım yapan C kodunu yazıp açıklamaya çalışalım.
İlk adımda matris boyutunu ve içeriğini dolduralım.
Kodun ilk kısmında görüldüğü üzere 4×4 boyutlarında bir matris tanımlanmış ve bu matrisin içeriği ekrana bastırılmıştır. Yukarıdaki tanım itibariyle matrisimizin içeriği aşağıdaki şekildedir:
Şimdi bu matrisin tersini alma işlemi sırasında kullanacağımız birim matrisi döngüler ile oluşturabiliriz:
Yukarıdaki kod, köşegeninde (diagon) 1 olan ve diğer elemanları 0 olan bir matris inşa etmektedir. Bu işlem için matrisin satır ve sütun koordinatlarını tutan i ve j döngü değişkenlerinin eşit olması durumu 1, diğer durumlar 0 olarak döngülerde kodlanmıştır.
Şu anda, tersi alınması istenen matris a dizisinde, birim matris ise b dizisinde tutulmaktadır. Yapılaması gereken, a matrisini b matrisine dönüştürmektir.
Yukarıda görüldüğü üzere kodun 24-27. satırları arasında matrisin diyagonu olan değerleri 1 yapacak değerler bulunmaktadır. Bir sayının kendisine bölümü 1’dir. Dolayısıyla matrisin tersi olan sonuç matrisimizdeki, ki şu an itibariyle birim matristir, diyagon değerleri, orjinal matrisin diyagon değerlerine bölünmüştür.
Ardından diyagon olmayan değerler için dönene ve 28. satırda başlayan ikinci döngü ile diyagonda olmayan elemanlardan, diyagondaki elemanla çarpımları çıkarılmaktadır. (kodun 32. satırındaki k değişkeni o satırdaki diyagon değerini vermektedir. Bu değer orjinal matristeki değer ile çarpılıp yine aynı satır ve sütundaki değerden çıkarılmaktadır)
Bu işlem hem orjinal matris hem de sonuç matrisinde bire bir yapılır ve sonuçta sonuç matrisimiz b değişkeni içinde oluşur. Bu değeri bastırmak için aşağıdaki şekilde bir döngü yazılması yeterlidir.
Kodumuzun çalışan hali aşağıda verilmiştir:
iyi günler. acaba benim için 4×4 bir matrisinde tersini yazabilir misiniz buradaki gibi? Bir de 3x3lük matrisin tersini alırken alıcağımız determinantları neye göre yerleştiricez.
teşekkürler.
elbette, yazının içerisine ekleme yapıyorum sanırım birazdan yayınlarım.
umarım yardımcı olur
başarılar
Algoritmanin mantigi cok güzel anlatilmis,tesekkürler.
gauss jordan daha gusel bu iş biraz uzun onuda yazarsanız güzel katkı olur
coooook iwime yarada tewekkur ederim
C’yi bilmediğim için bunu soruyorum. File/New/Project dedikten sonra hangisini seçeceğiz?
Hangi editörü kullanıyorsunuz? C bir dildir ve pekçok farklı ortamda kodlanabilir. Aşağıda bazı C editörlerinin nasıl kullanıcağına dair daha önceden yayınladığım yazılara bağlantı veriyorum.
Visual Studio 2010 ile C++ için
http://www.bilgisayarkavramlari.com/2010/09/27/visual-c-2010/
Dev-CPP Projelerini Visual Studio ile açmak için
http://www.bilgisayarkavramlari.com/2010/05/01/dev-cpp-projelerinin-visual-studio-ile-acilmasi/
Dev-CPP ve Visual Studio giriş için
http://www.bilgisayarkavramlari.com/2008/10/06/c-ile-kodlama/
Pardus üzerinde Dev-CPP çalıştırmak için
http://www.bilgisayarkavramlari.com/2009/10/18/pardus-uzerinde-dev-cpp/
2×2 lik bir kare matrisin terisini bulan programı yazabilir misiniz hocam,,şu an dersteyim ve bunu vermeden çıkartmıyor hocamız:))yardımcı olursanız çok sevinirim..
acaba rica etsem n*n matrisin hesaplanmasını da yapabilirmisiniz…
yukarıdaki koda zaten istenilen boyuttaki matrisin tersini alabiliyor. Tek yapmanız gereken 4×4 boyutundaki matris yerine farklı bir matris yazıp 4 değerini bu yeni matrisin boyutu ile değiştirmeniz.
başarılar
merhaba.. benimde ödevim bu konu..oturup gauss jordan yöntemiyle kod yazmaya çalıştım ama sürekli access violation hatasını veriyo nerde yanlışş yapıyorum yardımcı olursanız sevinirim..:
for(int i=0;i
kodunuzdaki değişkenlerde problem var büyük ihtimalle. örneğin sutun ve satir değişkenleri, matrisin boyutlarını tutan değişkenlerse, kodunuzdaki 2*sutun ibaresi hatalı olur. Sebebi matrisin dışında bir sutuna erişmeye çalışıyor olmanızdır.
başarılar
meraba ben ödevimde 4×4 matrisin tersini bulmak ama turbo pascalda yardımcı olursanız sevinirimm
Yaaa bu çok açıklayıcı ve güzel olmuş ama bana fonksiyonlu ve Cofactor, determinant hesaplamalı lazım
Uğarştı ama bi türlü işin içinden çıkamadım acaba yardımcı olabilir misiniz?
Merhaba ödevim dolayısıyla ben bu programı c’de çalıştırmaya kalktım ancak açılmadı. c’de çalışması için ne yapmam lazım? Yardımcı olursanız çok sevinirim..
merhaba benım porje odevım war konuları dev cpp ta matrıs tersı bulma ve dağılım fonksıyonunda ustel dagılım bu dersı gecmem buna baglı yardımcı olablrmısınız?
Burak Bey, nasıl bir yardıma ihtiyacınız olduğunu anlayamıyorum. Kodu yukarıda yazdık ve yayınladık zaten DEV-CPP ortamında çalışıyor bundan daha fazla ne yapılabilir ki?
kusura bakmayın tekrardan rahatsız edıyorum daha once soledıgım gıbı matrıs tersı odevımdı.hocamız matrıs tersını ana menulu sekılde ıstıyor.
#include
#include
#include
#include
void dagilimtablolarimenusu();
void normaldagilimtablosumenusu();
main()
{
dagilimtablolarimenusu();
}
void dagilimtablolarimenusu()
{
char c;
system(“cls”);
konum(5,20); printf(“==============================”);
konum(6,20); printf(“= DAGILIM TABLOLARI MENUSU =”);
konum(7,20); printf(“==============================”);
konum(8,20); printf(“1) Poisson Dagilim”);
konum(9,20); printf(“2) Normal Dagilim”);
konum(10,20); printf(“3) F Dagilimi”);
konum(11,20); printf(“4) T Dagilimi”);
konum(12,20); printf(“5) Binom Dagilimi”);
konum(13,20); printf(“6) Ustel Dagilim”);
konum(14,20); printf(“7) Cikis”);
konum(15,20); printf(“==============================”);
c= ‘ ‘;
while (c!=’7’)
{
konum(16,20); printf(“seciminiz:”);
c= getch();
switch(c)
{
case ‘1’ : printf(” bu ogrencinin konusu dahilinde degil”); break;
case ‘2’ : printf(” bu ogrencinin konusu dahilinde degil”); break;
case ‘3’ : printf(” bu ogrencinin konusu dahilinde degil”); break;
case ‘4’ : normaldagilimtablosumenusu(); exit(0);
case ‘5’ : printf(” bu ogrencinin konusu dahilinde degil”); break;
case ‘6’ : printf(” bu ogrencinin konusu dahilinde degil”); break;
}}
}
void normaldagilimtablosumenusu()
{
char c;
system(“cls”);
konum(5,20); printf(“=================================”);
konum(6,20); printf(“= NORMAL DAGILIM TABLOSU MENUSU =”);
konum(7,20); printf(“=================================”);
konum(8,20); printf(“1) P(Xx)”);
konum(10,20); printf(“3) P(a
Burak Bey;
Yolladığınız ilk kodun, konu ile ilgisi yok. İkinci kodda bulunan case ‘1’ için yukarıdaki yazıda yayınlanan kodları yazmanız yeterli. İstediğiniz problemin çözümünü yapan kod zaten yayınlanmış durumda tek yapmanız gereken, yazıda yayınlanan bu kodu menu altına yerleştirmek.
başarılar
Merhabalar benim proje konumda dağılımlar.Yukarıdaki kodu yazdım fakat konum(5,20);printf(“===========================”);satırında hata veriyor yardımcı olursanız sevinirim.
MERHABA 3 GUN SONRA TESLİM ETMEM GEREKEN ÖDEV ŞÖYLE:
>>BOYUTU 10*10 ‘A KADAR DISARDAN GİRİLEN BİR KARE MATRİSİN TERSİNİ BULDURAN VE EKRANA YAZDIRAN CPP PROGRAMI YAZINIZ<< HOCAMIZ HANGİ YÖNTEMLE BULUNMASI GEREKTİĞİNİ BİZE BIRAKTI COK UGRAŞTIM ANCAK TAM OLARAK YAPAMADIM YARDIMCI OLABİLİRSENİZ COK SEVİNİRİM..TEŞEKKURLER
merhaba.ödevim şu şekilde: dağılım tabloları anamenüsü oluşturuyorum ->
Poisson Dagilim
Normal Dagililim
F Dagilimi
T Dagilimi
Binom Dagilimi
Ustel Dagilim
benim konum t dağılımı onu seçiyorum.t dağılım menüsü oluşturuyorum.
“= t DAGILIM TABLOSU MENUSU =”);
P(Xx)
P(a
gelen sorular üzerine normal dağılım ve poisson dağılımını anlatan ve istediğiniz kodlamaları içeren yazıları siteye ekledim, diğer dağılımları benzer şekilde kodlayabeceğinizi düşünüyorum, umarım yardımcı olur.
başarılar
http://www.bilgisayarkavramlari.com/2011/06/08/poisson-dagilimi-poisson-distribution/
http://www.bilgisayarkavramlari.com/2011/06/08/normal-dagilim-normal-distribution-gauss-distribution/
merhaba bem bırsey sormak ıstıyorum.determınatı sıfır olan bır matrısın tersını alamıyoruz ama bunu sanal olarak tersını alabılıyoruz ya.onun nasıl olduguna daır bır fıkrım yok.4gun sonra sınavım var.yardımcı olabılır mısınız.sımdıden verecegınız cevap ıcın tesekur ederım.
sorunuz bir matrisin (masfuf) tersi olup olmaması ile ilgili. Bakın kare olmayan matrislerin, örneğin nxm boyutundaki bir matrisin (n≠m şartı ile) tersi yoktur. Sadece bazı özel durumlarda sol tersi (left inverse) veya sağ tersi (right inverse) olabilir, ancak bu bizim anladıımız ters değildir.
Geriye sadece kare matrisler kalıyor. Bir kare matrisin tersinin olabilmesi için tekil masfuf (singular matrix) olmaması gerekir (bazı kaynaklarda dejenere (degenerate) (yeniden üretilmiş) tabiri de geçmektedir). Bir kare matrisin tekil olması ise ancak determinantının sıfır olması ile mümkündür. Yani determinantı sıfır olan matrisler singular matristri ve tersi yoktur.
Peki biz determinantı sıfır olan bir matrisin tersini almaya çalışırsak ve yukarıda geçen yöntemleri denersek ne olur??
Kofaktör yöntemi ile (cofactor) ters almaya çalışırsak 1/det(A) terimi ile karşılaşırız. Bildiğiniz üzere şayet det(A) = 0 durumu varsa, 1/0 belirsizdir.
Şayet gauss jordan yöntemi ile ters almaya çalışırsanız ve yine det(A) = 0 durumu varsa, bu durumda satır sadeleştirmesi yapılamaz (diğer bir deyişle satırlar arası bağlantı yetersizdir), sonsuza kadar satır sadeleşmeye uğraşırsınız ama bir sonuca varamazsınız.
Benim nacizane bilgim bu yönde, ama siz “sanal olarak tersini almak”‘tan bahsetmişsiniz, benim böyle bir bilgim yok, şayet daha fazla bilgi verir veya hangi kaynakta geçtiğini belirtirseniz çalışıp burada paylaşmaya gayret ederim.
başarılar
Hocam 6×6 lık matrisin terisini alıyorum verdigiz algortmaya göre yalnız sonuçta soyle birsey cıkıyor
-1.#ınd00 -1.#ınd00 -1.#ınd00 -1.#ınd00 -1.#ınd00 ….
yardımcı olrsnız cok sevnrm
tersi alınamayan bir matrisin tersini almaya çalışıyor olabilir misiniz?
yok hocam hangi degeri girersem giriym bu degerleri veryr hep aynı sonuç çıkıyor,yukardakı 4×4 luk matrisn aynısın aldm 4 leri 6 yaptm
Anlamadım, 4×4’lük matrisin aynısını alıp 4’leri 6 yaparsanız zaten çalışmaz ki, 6×6 matrisin tersini alan kodu 4×4 matris üzerine uyguluyorsunuz demektir. Bir matrisin tersi olup olmadığını kontrol edin ya da en iyisi siz tersini almak istediğiniz matrisi buraya yazın ben bir deneyeyim belki bir yerde hata vardır.
Başarılar
yk hocam matrisi 6×6 lık yaptım,bide hocam ilk indisi ben 1 den baslatmak ıstyrm kendisi normalde sıfırdan basltyr ya onun için s[7][7] yaptm tanmlarken..
matrisinizi yazarsanız ben de deneyip durumu incleyebilirim. Çalışmayan ve hata veren matrisinizi yazabilir misiniz?
Hocam merhaba benım odevım 2*2 ve 3*3 tipindeki matrislerinin çarpma işlemine göre tersinin bulunması bana biraz acıklayabılırmısınız ödevim cok onemli
benim ödevimi pazartesi gününe kadar hocaya vermem lazım ödevim şu şekilde 2×2 ve3x3 matrisinin tersi. araştırdım da net bir bilgi bulamadım yardımcı olursanız çok sevinirim şimdiden teşekkürler…
Yukarıdaki yazıda sorunuzun cevabı açık ve net bir şekilde zaten anlatılmış. Yazıda cofactor yöntemi ve gauss jordan yöntemi kullanılarak iki farklı şekilde nasıl alınacağı gösterilmiş ve kodu verilmiş, anlayamadığınız nokta neresi sorarsanız belki yardımcı olabiliriz.
Başarılar
Hocam benim bildiğim kadarıyla 3×3 matrisin tersi yanlış. Sen eminsen sorun yok ama.
Lütfen hatalı olduğunu düşündüğünüz kısmını açıklayınız, tekrar kontrol edip hata varsa düzelteyim.
Teşekkürler
turbo pascalda bir kare matrisin aynadan yansımasını weren program kodunu lütfen biri paylasabilir mi?
Usta çok teşekkür ederim uzun zamandır bu konuyu araştırıyordum. Eline, emeğine sağlık
Yalnız ufak bir sorun var. Matrisin 1×1 elemanı 0 olduğu zaman hata veriyor
d = a[i][i]
buradan, d 0 geldiği için.
Bunu nasıl çözeriz?
Yukarıdaki yorumlarda da cevaben yazdığım üzere, determinantı 0 olan matrisin tersi yoktur.
Başarılar
Kastettiğim o değildi hocam,
1.satır 1.sütun elemanı 0 olan matrisin tersini alamıyor
d = a[i][i] ataması yaptığımız için
Bunu sormuştum
BU durumdaki bir matrisin tersi yoktur. Bakın matrisin tersinin olabilmesi için matrisin tam derece (full rank) özelliğinin bulunması gerekir. Bunun anlamı, bir matisteki satırlar arasında doğrusal bağlantı bulunmaması (linear independent) gerektiğidir. Aksi halde matrisin tersi alınamaz. Şayet diyagon üzerindeki herhangi bir değer 0 olursa, bu durumda matrisin tersi yoktur.
Benzer durum aşağıdaki örnek matris için de geçerlidir
Yukarıdaki matriste satırlar arasında x2 bağlantısı bulunduğu için (ikinci satır, ilk satırın iki mislidir) bu matrisin derecesi 1 olacak ve yine tam derece (full rank) olmadığı için tersi alınamayacaktır. Tam derece ile anlatılmak istenen bir matrisin satır sayısının, birbirinden doğrusal olarak bağımsız satır sayısına eşit olması durumudur. Örneğin yukarıda, aralarında doğrusal bağlantı bulunmayan tek satır olduğu için derecesi 1 olmuştur.
(5*5 matrisin tersi derecesi ve transpozesini bulan proğram proje ödevim büyük bir oran da etkisi var C# dilinde yazılacak) ve çok sıkıştım yardımlarınızı bekliyorum hiç bir bilgim yok
ilgili kod zaten ilgili konu altında var. Transpoze yani matris ters yüz eden kodu aşağıdaki bağlantıda bulabilirsiniz:
http://www.bilgisayarkavramlari.com/2008/12/29/matris-tersyuz-matrix-transpose/
Burada 3×3 boyutunda bir matris için C dilinde kod verilmiş ancak C# diline çevirmeniz ve 5×5 için uyarlamanız oldukça kolay (döngüleri ve matris boyutlarını, kısacası kodda 3 gördüğünüz her yeri 5 yapmanız yeterli)
Başarılar
hocam teşekkür ederim..
Bir sorum daha olacaktı yardımlarınıza ihtiyacım var ..
5*5 matris in( transpoz, determinant, tersi, derecesi) ini C# dilinde yazınız bu benim proje ödevim.
–> Derecesini bulduramadım yardımcı olabilirseniz çok sevinirim.
Şimdi bu derece kelimesi çok problemli bir kelime 🙂
Birincisi bu dereceyi (degree) her disiplin kendisi için kullanır. Örneğin network çalışanlar için matris bir şekli (graph) ifade ettiği için ve matriste komşuluk matrisini (adjacency matrix) tuttukları için aslında kast ettikleri bir düğümün en fazla kaç komşusu olduğudur. Bunu en yüksek sayısal değeri bularak hesaplarsınız.
Polinom matris kullananlar, her satırda bir polinom değeri tuttuğu için bu değerlerden en yüksek üste sahip olanını bulmak isterler (örneğin bir satırdaki en yüksek değer x3 ise bu durumda matrisin o satırının derecesi 3 ve bütün satırlar arasındaki en yüksek değer de üç ise matrisin derecesi 3 bulunur.
Rasyonel sayı matrisi tutanlar, en yüksek paydayı bulmak isterler.
Bu liste uzar gider. Ama şayet kast ettiğiniz ve Türkçede yine derece ile anlatılan matrix rank ise o basit.
Tanım itibariyle doğrusal olarak bağımsız satır sayısı (linearly independent row) anlamına gelir. Bunun için kademe dönüşümü (echelon transformation) alınır (daha özel olarak satır kademe dönüşümü (row echelon transformation)) ve ardından sıfır olmayan satırlar sayılır.
Aslında bu konuyu da anlatan bir yazı siteye eklesem iyi olur ama basit bir doğrusal cebir kitabını (linear algebra) açarsanız bu tip bilgileri bulabilirsiniz, daha detaylı açıklamayı en kısa sürede eklemeye çalışacağım.
{EDIT}
İlgili yazıları siteye ekledim:
http://www.bilgisayarkavramlari.com/2012/04/16/matrisin-derecesi-matrix-rank/
http://www.bilgisayarkavramlari.com/2012/04/16/row-echelon-matrix-satir-kademe-matrisi/
{/EDIT}
Başarılar
şuan bende sizin gibi şaşırdım hocam
— >5*5 bir matrisin derecesi =(5 – köşegen matris üzerindeki sıfırların sayısı) ,
Hocamızın sadece bunu istiyor olabileceğini düşünmüyorum :-S
Eh bunu yapmak gayet basit değil mi:
hocam 4*4 matrisin tersini bulma işlemi için verdiğiniz yukarıdaki komutları 5*5 matrisin tersini bulma işlemi için sadece döngü lerde gördüğüm 4 leri 5 yapmam yeterlimidir ?
Evet yeterlidir. Test etmedim ama hata olmaması gerek, yine de bir problem yaşarsanız mesaj atın.
Başarılar
matrisin kullanım alanları nelerdir acil bilgi gerekiyor yardımcı olur musunuz
Hocam Çift boyutlu dizi kullanarak Textbox tan matris değerlerini almak istiyorum 2 – 3 gündür uğraşıyorum ama tek tek girerek yapabildim yardımcı olabilimisiniz C# ta
teşekkür ederim
hocam hata olmadı sadece determinantı yapamadım determinant komutlarını paylaşabilirmisiniz rica etsem
…
Teşekkür ederim
hocam determinant için yardımcı olabılırmısınz
determinant komutu ile neyi kastediyorsunuz? haızr bir komut bilmiyorum, ancak kodundan bahsediyorsanız. bunun için bir yazı yazıp birazdan yayınlarım.
Başarılar
ewet hocam determinant kodundan bahsediyorum. Hocam tersine de ugrasıyorum da sizin girdiginiz degerler ile aynı sonucu bulamıyorum. bununla da ilgili ne yapabiliriz. Tesekkur ederım
Hocam Tersini bulma işlemi için sizin yazdığınız programı alttaki gibi yazdım.Değerleri formda 16 textbox ve bir button la oluşturup c# a uyarladım ama çıktıda bir sorun var..Sanırım 2.kısımdaki programı yani tersi alma kısmındaki kodları algılamıyo yaardımcı olursanız sevinirm.
teşekkürler..
çıktı :
1000
0100
0010
0001
yaptım hocam sonunda hepsi(tersi transpozesi determinantı derecesi) calıştı bitirdim projemi teşekkür ederim.
4×4′lük matrisin tersinin alınması (Utku Bey’in isteği üzerine yazıyorum)
Bölümde determinant alırken a12 ile başlayan sütünu yazarken galiba bir gözden kaçma olmuş. Eğer yanılıyorsam kusura bakmayın. İyi çalışmalar
Ben de determinantı anlatan yazıyı ancak ekledim ama sanırım siz zaten problemi çözmüşsünüz. Yine de birilerinin işine yarar belki:
http://www.bilgisayarkavramlari.com/2012/05/01/matrisin-determinanti-matrix-determinant/
merhaba hocam NxN lık bır matrıste satır ve sutun yer degıstırmesını bulan program lazım yardımcı olursanız sevınırım
esra hanım matrisin transpozunu alan ana kod hocamızın belirttiği gibi http://www.bilgisayarkavramlari.com/wp-content/uploads/matris_ters5.jpg ‘tir.
öncelikle NxN matrisinde bu işlemi yapmanız için iki yöntem vardır.
Birinci yöntem kullanıcıdan N değerlerini ve matrisin içerisini dolduran verileri alıp transpoze etmek.
ikinci yöntem bütün değerleri Random fonksiyonu yardımı ile alıp transpoze etmek.
bu iki yöntemi yukarıda ki ana fonksiyonuda programınıza dahil edip uygulayınız.Eğer bir çözüm yolu bulamazsanız sorununuzu tekrar yazarsınız.
iyi çalışmalar
merhaba ben c# ta 2x2lik matrisin tersini nasıl alabilirim. yardımcı olursanız sevinirim..
Hocam merhabalar kodda bir eksiklikmi var acaba aynı kodu yazdım sizinkiyle aynı sonucu alamadım ayrıca c matrisini hiç kullanmamışız burda tanımlama yapmışız ama
Kodu kontrol ettim çalışıyor belki aldığınız hatayı yazarsanız yardımcı olabilirim. Bu arada c matrisi konusunda haklısınız kullanılmıyor.
Klavyeden girilen N değeri ile NxN lik bir matris oluşturulacaktır. Köşegeni (aii) 1 lerden, köşegenin altı
(-1 ile -9 arası) rasgele sayılardan, köşegenin üstü ise (1 ile 9) arası rasgele sayılardan meydana
gelmelidir
kolay gelsin hocam.. acaba elinizde singüler matrislerle ilgili veri var mı_? varsa paylaşım yapabilir misiniz mail yoluyla?
“Singüler matrisler ile ilgili veri” ile neyi kastediyorsunuz? Biraz daha açık yazarsanız yardımcı olmaya çalışayım. Yani singular matrix konusunu anlatan bir yazıya mı ihtiyacınız var? Basitçe determinantı 0 olan matrislere singular matrix denir ama sizin ihtiyacınız tam olarak nedir?
y.lisans öğrencisiyim ve ödev konum singüler matrislerin ters alma yöntemleri.. birkaç literatür çalışması yaptım hocam ama yeterli değil.. öncelikli ihtiyacım singüler matris nedir, nasıl ve nerelerde kullanılır gibi basit soruları cevaplayacak ders notları, makaleler vs. sonraki önceliğim ise bu matrisin ters alma yöntemleri ile ilgili veriler… elinizde var mı bilmiyorum hocam ama varsa paylaşımda bulunabilir misiniz..
Vakit bulabilirsem birşeyler yazıp yayınlamaya çalışırım, ne yazık ki hazır bir kaynak bilmiyorum. Çok kısaca yardımcı olmaya çalışayım. Singular matrisler tanım itibariyle tersi olmayan matrislerdir (det = 0 olduğu için) ancak bir singular matris non-singular hale çevrilebilir ve bundan sonra tersi alınabilir. Ayrıca matris tersinin daha genel tanımını müsvette ters (pseudo inverse) için aşağıdaki kaynak yararlı olabilir
http://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_pseudoinverse
Burada da bahsedilen yöntemlerden birisi olan SVD (tekil değer ayrışımı – singular value decomposition) için aşağıda bağlantısını verdiğim bir yazı yayınlamıştım:
http://www.bilgisayarkavramlari.com/2008/12/29/tekil-deger-ayrisimi-singular-value-decomposition/
Basitçe bir matrisi çarpanlarına ayırma yöntemidir ve çarpanlarına ayrılan bir matrisin (SVD yönteminde bir matris, 3 ayrı matrisin çarpımı olarak yazılabilir) tersi (reciprocal) bu çarpanlar üzerinde işlem yapılarak bulunabilir.
Ayrıca buna benzer çok sayıda yöntem bulunuyor ama dediğim gibi hepsinin toparlandığı bir kaynak ne yazık ki bilmiyorum, vakit bulabilirsem toparlayıp birşeyler yayınlamaya çalışacağım.
Başarılar
Selamun aleyküm rica etsem bir matrisin önce alt üçgen sonra üst üçgenini sıfırlama işlemini Gauss – Jordan yöntemiyle küçük bi örnek yapabilirmisiniz. C# dilinde ve lütfen console dan olmasın ilgilenirseniz sevinirim.
çok t.ederim hocam hakkınızı helal edin .)
Peki matris içerisinde kosegenler üzerinde sıfır değeri varsa d degeri de sıfır oluyor. Bölme işlemi geçersiz oluyor ? yani matris kosegeninde 0 değeri varsa sonuc uretmiyor
Sorunuzu tam olarak anlayamadığımı sanıyorum ancak tekrar ediyorum determinant 0 ise tersi yoktur. Köşegende 0 olması, determinantının 0 olmasını gerektirmez.
Hocam iyi gunler.
Konu olarak LU ayrıştırma yöntemiyle çok bilinmeyenli denklemlere çözüm arıyorum.
fakat nasıl nerden başlayacağıma dair bile karar veremedi.
başlamak açısından fikirlerinizi paylaşırsanız çok memnun olurum. teşekkur ederim.
Bu konu çoğu linear algebra kitabında var diye biliyorum bu kitapları okudunuz mu? Genelde lisans seviyesinde anlatılıyor zaten.
Konu olarak okudum fakat C d nasil yazilicagina dair hicbir fikrim yok malesef hocam.
Nerden nasil baslanir tikandim kaldim resmen
Hocam LU ayrıştırma yöntemiyle çok bilinmeyenli denklem çözümünü sormuştum size konuyu hatmettim fakat C bilgim yeterli olmadığı için C de yazmakta çok zorlanıyorum bana yardımcı olursanız çok sevinirim.
teşekkür ederim.
bir matrisin minörünü bulan fonksiyon nasıl yazılabilir.
Merhaba, yukarıda şöyle demişsiniz :
“Geriye sadece kare matrisler kalıyor. Bir kare matrisin tersinin olabilmesi için tekil masfuf (singular matrix) olması gerekir (bazı kaynaklarda dejenere (degenerate) (yeniden üretilmiş) tabiri de geçmektedir). Bir kare matrisin tekil olması ise ancak determinantının sıfır olMAması ile mümkündür”
http://mathworld.wolfram.com/SingularMatrix.html
Bu tanımın yanlış olduğunu düşünüyorum. Matrisin tersinin olabilmesi için tekil matris olması değil olmaması gerekir. Tekil(Süngular) matrislerin tersi yoktur , matrisin tekil olması için de determinantının söylediğinizin aksine sıfır olması gerekir. Yukarıdaki tanım insanları yanlış yönlendirebilir diye belirtmek isitiyorum ..
Saygılarımla, iyi günler
Mehmet Bey,
İlginiz için çok teşekkür ediyorum. Yorumlarda bahsettiğiniz gibi çelişik bir durum oluşmuş. Hatayı düzelttim. Tekrar teşekkürler.
arkadaşlar bir 5 e 5lik bir matris düşünün bunun her 2 köşegenini de çizince ortaya x harfi çıkıyor ya bu x harfinin üst dilimindeki sayilarla alt dilimindeki sayıların ayrıca sağdaki ve soldaki dilimin sayilarını simetrik olarak değiştiren programı yazmamda yardımcı olurmusunuz
n*n matrisinin inversinin alınması hoca bu ödevi verdi işin içinden çıkamadım yarın teslim etmem gerekiyor lütfen yardımcı olurmusunuz..
Yukarıdaki yazı ve yorumların neredeyse tamamına yakını n*n matrisin tersinin (inverse) alınması ile ilgili iken, tam olarak nasıl bir yardıma ihtiyacınız var?
3 x3luk matriste dışardan belirlenen satır ve sutunlarin yeri değişecek ve degisenler farklı renkte çıktı verecek c# da bunu nasıl yazabilirim
Kirchhoff ile yapılan bir soruyu matrisle çözmem gerekiyor ama 5×5 lik bir matrisin tersi alınması lazım yardıImci olabilir misiniz? Teşekkürler.
Hocam dediğiniz kodu yazdım 3×3 ama çalışmadı kod şu şekilde bi bakabilrimsinz??
Boyutu kullanıcı tarafından belirlenen bir matrisin echelon matris kuralı ile tersini alma nasıl olabilir en son sizin yaptığınız gibi C# dilinde yapıcam ama kullanıcı giricek boyutunu o zmn matris içindeki değerleri rassal fonksiyonunu mu kullanmam gerek
hocam bu tersini hesapladığımız matrisi mesela 2×2 tipinde bi matrisle nasıl çarpa biliriz? yani mesela ilk önce 2×2 tipinde matrisi tanımlattık daha sonra diğer matrisi tanımlattık ama başka matrisin tersi olarak en son bunları nasıl çarparız c programında. yardımcı olursanız çok sevinirim
Merhaba, çalışmanız için teşekkürler. Bir de MATLAB ile çözüm eklerseniz çok güzel olur hocam.
C++ da 4*4 metris determinantı yapmak istiyorum. Metrisin değerleri {0,2,1,0,0,3,1,1,-1,0,3,1,3,1,2,0} olacak şekilde olmalı.Teşekkürler.
Merhaba ben bir c# projesi geliştiriyorum ve matris tersine ihtiyacım vardı. kodlarınızdan faydalanarak matris tersi alan fonksiyon yazdım ancak problem su ki dogru calısmıyor. Fonksiyonu test etmek için bir test fonksiyonu yazdım. Sonucun birim matris cıkması gerekiyor. Cıktı büyük ölcüde birim matrise yakın olsa da hatalı. Bit satırda tamamen -0.4 gbi degerler var (0 olması gerekiyor.) Bir satır 1 ile baslıyor (0 olması gerekiyor.) Ve köşegen üzerinde bir tane 0.9 degeri var.
Sorunun ne oldugunu bilmiyorum. Bence kodlarınız mantıklı ancak dogru sonuc vermiyor. Tavsiyesi veya alternatif cözümü olan var mı?
Not:Bu fonksiyonun amacı matlab’deki inv(Matris) fonksiyonunun c# modellemesini yapmak.
Hocam iyi günler
Matrisin tersini alma olayını Visual Basic kodlarıyla da yayınlayabilir misiniz 🙁
hocam yarın sınavım var 3×3 matrisin tersi nasıl nasıl yapılıyor bana yardımcı olursanız çok sevinirim
sin(x)=x-(x^3)/3!+(x^5)/5!-………..x^N/N!=
hocam yarın sınavım var bu soruyu çözer misiniz c ile