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.