Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

c++ 'ta matris


pontipati

Öne çıkan mesajlar

c++ bilmiyorum ama aradığın şey SVD ye benziyor. Diagonalize etmekten daha yaygın bir kullanım sanırım o. Aradaki fark nedir anlamadım ama. Sanırım SVD de 1. matris ve 3. matrisin ilişkili olması şart değil, seninkinde 1. 3. nün tersi olması gerekli (notasyonu yanlış anlamış ta olabilirim. -1 matris tersi di mi?)

Ama yine de SVD veya Singular Value Decomposition diye aratsan daha fazla şey bulabilirsin sanırım.
Yöntemi kullandığında 2. matris özdeğer matrisin oluyor ve bu özdeğerler de diagonal şekilde bulunuyor (ama 1. ve 3. matrisler diagonal değil, sadece 2. diagonal)
http://en.wikipedia.org/wiki/Singular_value_decomposition
Link to comment
Sosyal ağlarda paylaş

Normalde diagonalization, istenen şeydir lineer cebirde. Diagonal martislerle çalışmak kolaydır çünkü. Diagonal yapılamayan yerlerde de işte, yok yukarı üçgen mi deniyodu, o tarz martislerle çalışmaya çalışırsın da konu o diil zaten.

Şimdi birincisi yazılabilir evet, ama çok sıkıntılı olur. Hadi, diagonal yapılabilir bir matris olduğunu bile farzedelim baştan. Yine de bayağı zor. Ben C bilirim, C++ bilmem(OO yazılım da bilirim de C++ syntax'ı vs bilmiyorum). C'nin o hantal yazım tarzıyla hele hele işkence gibi olur muhtemelen.

İlk önce, det(M-xI)=0'ı bulacaksın. Daha sonra bu polinomun köklerini bulmak gerek; ki kök bulmak demek, factorisation demek. Factorisationsa (sayıları bölenleri ayırmak ayrıca zor, ama burada polinomu bölenlerine ayırmak var, o da çok zor) inanılmaz zor birşey.

Bir kere, gerçek bir faktörlere ayırma işlemi yapmak imkansız bilgisayarda. Faktörlerden biri pi sayısıysa örneğin, integer'ların bir sınırı olduğundan hiçbir zaman compute edemeyecektir. Şimdi baktım, Q'nun finite extensionları için(finite extension nedir bilmene gerek yok, örneğin Q için), bir factorization algoritması varmış. Bu kullanılabilir örneğin. Yani baştan diyeceksin ki, matrix'teki coefficientlarımın hepsi rasyonel olmak zorunda.

Bundan sonrası çok da zor değil aslında. Mv = xv işlemini çözeceksin her sonuç için. Matrisin boyutu kaçsa o kadar lineer denklem çıkar, onu da çözmek Gauss'un klasik metoduyla çok kolay olur(algoritmasını yazmak da kolay sayılır).

İşte sonra P,P^-1 matrislerini bulmak kalıyor bir tek, o da zaten biri direk eigenvector'lerden geliyor. Diğeri de onun terse çevrilmiş hali. Terse çevirme algoritmaları da Gauss metoduyla gayet kolay yazılabiliyorlar.

Dediğim gibi, zor birşey bu algoritmayı yazmak. O dediğim Q'dan coefficientlar seçersen yazılabiliyormuş derken de, şunu belirteyim: "float a=7/3;" diye yazarsan yine olmayacaktır. Çünkü C onu hesaplayıp 7/3'e yakın bir sayı tutacaktır aklında, tam olarak 7/3'ü değil. Bu yüzden her coefficient için bir de "int[2]={7,3};" tarzı tutman gerekecek sayıları vs vs(yoksa şu şuna eşit mi dediğinde, eşit olmasına rağmen C yuvarladığı için farklı sayılar bulabilir.). Uğraşılacak iş değil anlayacağın :P.

Bilmiyorum ödev mi, başka birşey mi de. Ödevse veren hocaya benden küfürler ilet. Çok çok fazla restriction getirilirse, matrise o zaman daha rahat yazılabilir tabi.

En son, özetle algoritmanın aynısını buldum internette yapıştıriim buraya. Ama bazı adımlarda çok çok büyük sorunlar var yukarıda dediğim gibi. Wall of text için de özür dilerim.
link

Ha unutmadan şunu söyleyeyim. C, C++, Java falan; matrisler, polinomlar gibi matematiksel ögelerle çalışmak için çok yavan kalıyorlar. Bunun için farklı diller var. Benim bir dönem kullandığım Maple'dı mesela, arada bugları da olsa çok iyi bir dildi. Tavsiye ederim, dil sıkıntı değilse.
Link to comment
Sosyal ağlarda paylaş

mesaj kutun dolu o yüzden buraya kopyaliim yazacağım şeyi :P

C++'ın, C'den benim bildiğim tek farkı ekstradan object'lerin olması. Hanoi kulelerinde object kullanacak bişey yok. İki dilin syntaxları da aynı, yani C++ comppiler'ına C kodu atsan çalıştırır onu da, sıkıntı olmaz.

Algoritmayı(hanoi) anlamak için de şurda çok güzel anlatmışlar, Java ama önemli diil. Object olmadığı sürece içinde Java da çok benziyor C'ye.
http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/13/hanoi.html
Link to comment
Sosyal ağlarda paylaş

p-adic sayılar diye bişey var işte. Şu an kullandığımız sayıları tamamen şansa kullanıyoruz matematiksel gelişim açısından. p-adic sayıları da kullanıyor olabilirdik teoride.
p-adic sayılarda yapılan bir construction, bizim bildiğimiz klasik complex sayılarda yapılamıyor öle dangoz gibi deneyince. biz de, ince eleyip sık dokuyarak o construction'ı yapmaya çalışıyoruz.

En somut olarak şöyle denir belki. Şu soruyu soruyoruz manyak tez hocamla: C^n'in unit disc'ininden "epsilon" kadar büyük bir kümede yakınsayan power serie'ler uzayı nasıl bir uzaydır?
Link to comment
Sosyal ağlarda paylaş

Sylow'larla, p-adic'lerin çok alakası yok gerçi ama neeeyse :P. Sylow'lar grup teorisinde, özel bazı alt gruplara deniyor. P-adic sayılarsa şu:

Q'daki boşlukları doldurarak R'yi elde ediyoruz ya biz. İşte onu nası yaptığımızı çok uzun süre bilemedik. Bilinçsizce yaptık. Cauchy diye bir matematikçinin tanımlarıyla daha sonra anladık nasıl yapmış olduğumuzu. Ama baktık ki sonra Cauchy'nin gösterdiği yöntemle(bizim bilmeden kullandığımız yöntemle) R'den başka kümelere de ulaşabilirmişiz, o diğer kümeler p-adic reel sayılar işte. R'yi kullanıyor olmamız matematik açısından tamamen şans yani. (Tabi içgüdüsel olarak baktığında çok normal orası ayrı :P.)
Daha sonra Tate p-adic sayılarla analitik fonksiyon kuramını geliştirmiş vs. Kısacası teorik olarak; p-adic sayılarla da fizik yapabilirmişiz, gibi görünüyor.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...