SageMath

Eğer bloğumu takip ediyorsanız, son birkaç haftadır Euler problemi çözümlerimi paylaştığımı biliyorsunuz. Euler Problemleri, programcılık problemleri olduğu kadar, matematik problemleri de sayılabilir. Bu yazıda, bu problemlerin çözümünde sıklıkla faydalandığım SageMath programından bahsedeceğim.

SageMath nedir?

SageMath websitesinde, tanımı şu şekilde yapılıyor.

SageMath is a free open-source mathematics software system licensed under the GPL. It builds on top of many existing open-source packages: NumPy, SciPy, matplotlib, Sympy, Maxima, GAP, FLINT, R and many more. Access their combined power through a common, Python-based language or directly via interfaces or wrappers.

Şu şekilde çevirebiliriz.

SageMath GPL lisanslı ücretsiz ve açık-kaynak bir matematik yazılımıdır. Birçok mevcut açık-kaynak paketin üzerine inşa edilmiştir: NumPy, SciPy, matplotlib,Sympy, Maxima, GAP, FLINT, R ve çok daha fazlası. Python-temelli bir dil aracılığıyla veya arayüzler ile doğrudan onların birleşmiş gücüne erişim sağlayın.

Görev tanımları şu şekilde; Magma, Mapple, Mathematica ve Matlab gibi yazılımlara güvenilir ücretsiz açık-kaynak bir alternatif oluşturmak.

Her ne kadar projenin geçmişi 2005 yılı kadar eski olsa da, bir ay kadar önce varlığından haberdar olup kullanmaya başladım. Öyle görünüyor ki, popülerlik olarak rakiplerinin gerisinde kalmış.

Tabi ki, rakipleri kadar popüler olmaması, SageMath'in diğerlerinden daha geride olduğu anlamına gelmez. Rakipleri ticari programlar olduğundan, çok daha iyi pazarlanıyor olmaları beklenir. Ayrıca, diğer yazılımların mazisi çok daha eskiye dayandığından, SageMath yarışa biraz daha geriden başlamış. Örneğin, Mathematica Revision History'e göre, Mathematica 1988 yılında piyasaya çıkmış, yani 30 yıllık bir geçmişi var.

Ancak, SageMath öldü mü diye düşünmeyin, SageMath Github Deposu düzenli olarak commit görüyor.

SageMath ile Neler Yapılabilir?

Aşağıda yazılan özelliklerin çok az bir kısmını kendim kullandım, ancak, Hamdi Murat Yıldırım'ın 2009 Akademik Bilişim Konferansı Sunumuna göre aşağıdaki konu başlıkları altında hesaplamalar yapabiliyor.

  • Aritmetik
  • Değişmeli Cebir
  • Lineer Cebir
  • Kriptosistemler
  • Tam sayıyı çarpanlara ayırma
  • Grup Teorisi
  • Kombinasyon Hesabı
  • Grafik Teorisi
  • Sayılar Teorisi
  • Kalkülüs
  • Sembolik Hesaplama
  • 2 ve 3 Boyutlu Grafik Çizimleri

SageMath arayüzü

SageMath'in komut satırı ve ipython-notebook arayüzü var. Ben notebook arayüzüne aşina olduğum için, komut satırı arayüzünü hiç denemedim. Notebook arayüzünü kullandım ve kullanışlı buldum. Eğer SageMath'i kendi bilgisayarınıza kurmayı tercih ederseniz (Cloud seçeneği de mevcut), masaüstünüzde SageMath Notebook kısayolu oluşuyor. Bu kısayolu tıkladığınızda, önce SageMath Server başlatılıyor, daha sonra internet tarayıcınızda http://localhost:8889/ adresi açılıyor. Açılan sayfanın Ipython-Notebook'dan görünür bir farkı yok. Sadece, yeni notebook oluşturma seçenekleri altına SageMath seçeneği eklenmiş.Buradan SageMath notebook'u oluşturursanız, SageMath'e özgü fonksiyonlar otomatik olarak yüklenmiş oluyor. Python 2 seçeneği ile klasik ipython-notebook elde ediyorsunuz.

SageMath örnekleri

Aşağıdaki örnekler, SageMath'in benim kullandığım özelliklerine dair. Bundan çok daha fazlasını yapabildiğini, internetteki çeşitli kaynaklar gösteriyor.

Çarpanlara Ayırma

Çarpanlara ayırma işlemi factor fonksiyonu ile yapılıyor. Çarpanlara ayırma işlemi sonucunda, IntegerFactorization objesi dönüyor. Bunu örnekteki şekilde listeye çevirebiliyorsunuz.

Bölenleri Bulma

Bölenleri bulmak için divisors fonksiyonu kullanılıyor. Bölenlerin sayısını bulmak için number_of_divisors fonksiyonu kullanılabilir.

Asal Sayılar

Primes çağrısı ile asal sayılar kümesisini temsil eden bir nesne elde ediyoruz. Bu nesne üzerinden, asal sayı oluşturma ve asal sayı kontrolü işlemleri gerçekleştirebiliyoruz.

Denklem Çözme ve Denklem Sadeleştirme

SageMath sembolik matematik konusunda hayatımı çok kolaylaştırdı. var komutu ile sembolik matematik fonksiyonlarında kullanacağınız değişkenleri tanımladıktan sonra, yukarıdaki örnekte görüldüğü şekilde denklem tanımlıyorsunuz. Bu denklemleri kullanarak, çözüm kümesi bulma, denklemi belli bir değişken cinsinden yeniden düzenleme, sadeleştirme vb. işlemler yapabiliyorsunuz. Ayrıca, örnekte In [6] satırında görüldüğü gibi, çok bilinmeyenli denklemleri de çözebiliyorsunuz. SageMath basit denklemleri kendiliğinden sadeleştirirken, logaritmik, üslü ve köklü ifadeler içeren denklemleri sadeleştirmek için canonicalize_radical metodunu kullanabilirsiniz.

Türev Alma

Türev almak için, diff fonksiyonunu kullanıyoruz. f fonksiyonunun x'e göre birinci dereceden türevini almak için diff(f,x), ikinci dereceden türevini almak için diff(f, x, x) vb. şekillerde kullanabilirsiniz.

Grafik Çizme

Çizgi grafiği çizmek için plot fonksiyonu kullanılıyor. Grafiğini çizmek istediğiniz denklemi ve x-ekseni aralığını belirtmeniz yeterli. Birden fazla grafiği + sembolü ile üstüste bindirebiliyoruz.

Serpilme Diyagramı

Serpilme diyagramı çizmek için, (x,y) koordinatlarından oluşan bir liste kullanıyoruz.

Histogram Oluşturma

Histogram çizmek için, histogram fonksiyonu kullanılıyor. En sık kullanılacak argümanlar şu şekilde;

  • normed: Histogramı normalleştirilmiş olarak çiziyor. Olasılık dağılımı elde etmiş oluyorsunuz.
  • cumulative: Histogramı grupları toplayarak çiziyor. En son sütun, verinin tümüne karşılık geliyor.
  • bins: Sütun sayısını belirtir.

SageMath Dersleri

Malesef SageMath konusunda Türkçe kaynak neredeyse yok. Bulabildiğim tek kaynak, Sage Turu'nun bir çevirisi İnglizce kaynaklardan öğrenmek isteyenler için, Sage for Undergraduates ve Computational Mathematics with SageMath isimli iki ücretsiz kitap mevcut. Kitapların ikisine de yeterince detaylı görünüyor.

Nasıl Destek Alabilirim

Ask Sage isimli bir Soru-Cevap siteleri var. StackOverflow kadar aktif değil, yine de sorularınız cevapsız kalmıyor.

Nasıl Destek Olabilirim

SageMath geliştirme çabaları trac ve mail listesi üzerinden organize ediliyor. Şu an için en faydalı iş belgeleri Türkçeleştirmek olabilir.