Soru matematikçi olmayan herkesin kafa yorabileceği basitlikte ve amelelik kısmı bilgisayarlara kolayca yıkılabilecek yapıda olduğu için hemen kurcalama dürtüleri harekete geçti. Önce excel’de istenilen aralıklarda hangi sayının kaç adımda çözüldüğünü hesaplayan ufak bir makro yazdım (Buraya tıklayarak dosyayı indirebilirsiniz. Makro kısayolu Ctrl+Shift+A. Makro güvenlik ayarınız yüksekse sorun çıkarabilir. Çözümü için Excel versiyonunuzla birlikte google’da aratabilirsiniz. “Excel 2007 makro güvenlik” gibi. Ya da boşverin kim uğraşır.) Bu makroyla ilk 32.000 adımı hesaplatıp bir dağılım grafiği haline getirdim. (Excel 2007 en fazla 32.000 nokta için dağılım grafiği yapabiliyor) Sonuç şöyle bir şey çıktı:

Hemen olayı mistik bir tarafa çekmek çok doğru değil ama özellikle grafiğin sol tarafının şuna benzemesi ilginç bir tesadüf oldu:

(Gelmişken biraz da altın oran’a takılayım derseniz ve fotonun üzerine tıklayıp ayçiçeğinin tohumlarının mükemmel dizilişini tutturabilmek için tohumların dönüş oranını bulmaya çalışabilecek kadar sapıkça dürtüler içindeyseniz web sitesinde biraz oyalanabilirsiniz.)
İşin mistik boyutu bir tarafa, grafikte görülen pik değerler (27 sayısının 112 çözümü olması gibi komşularından aşırı yüksek değerler) belki de bu işin bir çözümü olabileceği hissini doğurdu. Eğer pik noktalar aşağıda mavi ile gösterildiği şekilde bir eğri oluşturuyorsa ve bu eğrinin belli bir eğimle devam ettiği gösterilebilirse belki de cevap bulunabilirdi. Eğer eğrinin eğimi yatay eksene paralele doğru gidiyorsa, bir noktadan sonra çözüm adedinin bir üst limiti olacağına ve o limitten fazla sayıda çözüm olamayacağına hükmedilebilirdi ya da eğri hiçbir zaman yataya paralel bir duruma ulaşmıyorsa çözümlerin sonsuza doğru gideceğine. Böylece her iki durumda da soruya bir cevap verilmiş olurdu.

Bunu doğrulamak içinse daha fazla veriye ve bu verilerle grafik oluşturabilmeye ihtiyacım vardı. Excel çok zorlanmadan 1 milyon hesaplamayı yapabiliyordu ama iş grafiğe gelince 32.000’den sonra kan kusturuyordu. Bu nedenle şuradaki yorumlarda aldığım gazla Python öğrenmeye çabaladım ve şu basit programı yazıp şu 100.000 lik grafiği çizdirdim (Program mathplotlib gerektirir, yani sanırım):

Gazı çok fena almış olmalıyım ki 100 milyonların grafiğini çizmeyi beklerken bilgisayarın 1 milyonu bile kaldıramaması, Python’un kösülüp kalması biraz hayal kırıklığı oldu. Muhtemelen el yordamıyla karanlıkta yol bulmaya çalışırmış gibi yazdığım programın acemiliği yüzünden olmuştu ama olsundu, 2-3 günde böyle bir şey yazabilecek kadar Python öğrenmek de bir şeydi (Yoksa değil miydi?)
En sonunda kafayı iyice kırıp, pik değerleri Excel’in ulaşabileceği en yüksek sayılarda 1000’lik aralıklarla el yordamıyla aramaya karar verdim. Meğersem excel’in ulaşabileceği en büyük sayı boru değilmiş. Söz konusu sayı 10^300 ler civarında olduğundan, 1000 rakam uzunluğunda bir değnekle pik sayıda çözümü olan sayıları aramak, samalıkta iğne aramak demekmiş. En nihayetinde uzun uğraşlar sonucunda çözüm adedi 2000’in üzerine çıkan rakamlara ancak ulaşabildim. Ancak sanırım işlemcim yanmak üzere olduğundan (Bilgisayarınki değil) dosyayı kaydetmeyi unutmuş olmam anlayışla karşılanabilir diye düşünüyorum. Yine de denemek isteyen fetişistler olursa devasa boyuttaki Excel dosyası şurada. (İndirmeye niyetlendiyseniz önce dosya uzantısını rar yapıp unziplemek gibi bir garipliğe katlanmanız gerekiyor. Zira 30 mb falan kendileri. Baş edemedim mahlukatla.)
Evet ve sonunda pes ettim. Bu benim istediğim değildi, buradan da pek ileriye gidecek gibi durmuyordu ama benim yine de inancım vardı. Belki azimli Türk gençliği bu çalışmayı alacak ve elinden tutarak matematikteki bir gizemi daha aydınlatırken başlangıç noktası bu nafile çabalarım olacaktı. Ya da olmayacaktı, bu vesileyle sadece ben Visual Basic’le makro yazmaya ve python’la program yazıp onunla grafik çizdirebilmeye bir giriş yapmış olacaktım. Olsundu, varsındı, bu da bana yeterdi.
Bonus: Asal sayı hesaplatma makrosu. Hazır VB makroya girişmişken o da aradan çıksın. Bu işle bir ilgileri var gibi bu sayıların ama hayırlısı. O da başka bir kurcalamaya vesile olur belki ileride. Aynı uzantı değiştirip unzipleme uygulamasının yapılması gerekiyor. 1.250.000 e kadarki asal sayılar hazır hesaplanmış durumda içinde.
Not: Collatz probleminin benim için en büyük gizemi kuralın tersten uygulandığında işlememesi. Yani 1 den başlayıp süreci tersine çevirdiğinizde tek bir rotada gidiyorsunuz, ama 1 e ulaşırken herhangi bir sayıdan başlayabiliyorsunuz. (1'den başlayamıyorsunuz aslında. 2-3 basamak geriden diyelim.) Bu da bir kenara yazılmış olsun.
COLLATZ SANISI ÇÖZÜMSÜZ
YanıtlaSilGARİP AMA GERÇEK
Collatz sanısı: m = tek sayı ve x= sıfırdan büyük pozitif tam sayı(1,2,3,4,....k) olmak koşulu ile (2^x)*m)-1 şeklinde yazılan herhangi bir n tek sayısı için bir işlem (3n+1)/2 olarak alındığında, (2^x)*m)-1=n şeklinde yazılan bir sayı için (x) defa (3n+1)/2 şeklinde işlem yapılmak zorunda kalınır. Çünkü (x-1) defa işlem tek sayı çıkar. (x) inci ilem yapıldığında sayı çift sayı olur. Ama yinede bu hesap gözünüzü korkutmasın. İşlem sonucu (2^x)*m)-1=n şeklinde yazılan bir tek sayı (3n+1)/2 şeklinde x. inci işlem yapıldığında (3^x)*m)-1 olarak çift sayı olur. Bu kendi bulduğum formül sayesinde collatz sanısı için çözümün olmadığı bir sayının olabileceğini ispatlıyorum.
Collatz sanısı çözümsüz
ispat: test edeceğimiz tek sayıyı (2^x)*m)-1=n olacak halde yazdığımızda her tek sayı için uygulanan (3n+1)/2 işlemi ile ilk çift sayı (x) inci işlemin sonunda oluşur x= sonsuz olduğunda ise çözüm yoktur. Çünkü işlem sonsuz eksi bir defa tek sayı çıkacaktır. Sonsuzuncu işlem yapılsa idi, çift sayı çıkacak idi. ayrıca sonsuz eksi bir ifadesini veren sayı yoktur. Ama sonlu bir sayıyı ifade etmek amacı ile bu terim kullanılır.
Örnek verecek olursak:
(2^x)*m)-1=n denkleminde
x=3 ve m=7 olarak alacak olursak
(2^3)*7)-1 = n
(8)*7) -1= n
(56)-1=n olur
n=55olur
Normal hesaplama ile bu işlemi yaparsak işlemin x defa yapıldığını göreceksiniz. (x)=3 olduğuna göre 3 defa işlem yapacağız. yani kısaca (x) sayısı herhangi bir çift sayıyı tek sayı çıkana kadar ardarda iki ile böldüğümüzde kaç defa 2 ile bölüne bildiğini gösterir.
Biz test edeceğimiz tek sayıya 1 eklediğimizde sayı çift sayı olur. Bu çift sayıyı (2^x)*m ) haline getirip 1 çıkarırsak oluşan sayı yine bizim test yaptığımız tek sayı olur. Son hali ile test sayımız (2^x)*m)-1=n şeklinde olur. Şimdi örneğimizi bu halde yazalım.
55+1=56 Bu sayının kaç defa iki ile tam olarak bölündüğünü ve en son 2 ile bölümünden sonra çıkan tek sayıyı bulalım. Yani (x) ve (m) sayılarımızı bulalım. Test sayımız zaten belli, yani n=55
55+1=56 dan
1) 56/2=28
2) 28/2=14
3) 14/2=7
x=3 ve m=7
tek sayımız son hali ile (2^3)*7)-1=55 oldu tek sayı için uyguladığımız collatz işlemi (3n+1)/2 idi
1) işlem (55*3+1)/2=83
2) işlem (83*3+1)/2=125
3) işlem (125*3+1)/2=188
(x) Defa (3n+1)/2 şeklinde yapılan ardışık işlemlerin sonunda oluşan çift sayı (3^x)*m)-1 olacaktır.
Tek sayımız (2^x)*m)-1=n idi. Değerler yerine konulduğunda (2^3)*7)-1=55 şeklinde olur. Yine aynı şekilde değerleri ilk çift sayının kaç olduğunu bulmak için formülümüzde yerine koyarsak
(3^x)*m)-1 = (3^3)*7)-1 olur
(3^3)*7)-1= (27)*7)-1=188 sonuç bu şekilde de bulunur
Bu formül (2^x)*m)-1=n haline getirilmiş bütün tek sayılar için geçerlidir. Her tek sayı da bu halde yazılır zaten.
İrfan Aydoğan
doktor0906@hotmail.com
Bu yorum yazar tarafından silindi.
YanıtlaSil