top of page

Matematiksel Programlama: SymPy | Python

Güncelleme tarihi: 20 Eyl 2023


SymPy kütüphanesi hakkında 2005 yılının Çek Cumhuriyetinde, Charles üniversitesinde fizik lisans derecesini bitirmeye son 1 yıl kalmış olan Ondřej Čertík, günümüzde Python programlama dili için en popüler projelerden biri olacak olan sembolik matematiksel programlama projesine girişti. Bu sıralar 2006 yılında lisans eğitimi bittikten sonra aynı üniversitede 2 yıl sürecek olan teorik fizik alanında yüksek lisans eğitimine başladı. Bu projeyi geliştirme sürecinde bir röportajında şunları demiştir; “…Sanırım, programlamayı öğrenmek için bilgisayar bilimi derslerine ihtiyacım olacağını hiç hissetmedim. Bence programlamayı öğrenmenin en iyi yolu oturup programlamaya başlamak… Bunun gerçekten çok büyük bir potansiyel olduğunu fark ettim. Okula gidiyordum ve eve geldiğimde; bilirsin, bütün gece boyunca çalıştım.” Ardından yüksek lisans sürecinde proje ilk olarak 2007’de yayınlandı. Daha sonra katılımcıların artmasıyla büyüdü. Ardından Ondřej Čertík liderliği 2011’de Aaron Meurer’e devretti. (Şuan ki geliştirici sayısı 1160)


Python oldukça dinamik bir programlama dilidir. İçerisinde bir sürü kütüphaneyi ve modülleri barındırır. Sembolik matematik programlamada en popüler kütüphane SymPy kütüphanesidir. SymPy, açık kaynak kodlu bir Python kütüphanesidir. Yani dünyanın her yerinden kullanıcılar, SymPy kütüphanesine katkı sunabilir veya onu dilediği gibi kullanabilir. SymPy kütüphanesi; temel cebir, kalkülüs(türev, integral…), soyut matematik, sayısal hesaplama, matrisler, geometri, grafikler(2d, 3d), istatistik ve olasılık ve fizik(klasik mekanik, kuantum mekaniği…) konu başlıklarını ve alt başlıklarını kapsar. Kütüphaneyi kullanabilmek için Python dilini yüklemek veya Python dilinin kullanılabileceği web adreslerinde çalıştırmak gerekecektir. Biz buradaki örneklerimizde yine fizik eğitimi alan Fernando Pérez(Kolombiya-Amerika) ve Brian Granger tarafından etkileşimli bilgi işleme sahip, geliştirdikleri Jüpyter Projesinde, Jüpyter defteri kullanacağız.


Sembolik programlama nedir

Sembolik hesaplama alanı özellikle bilgisayar ve matematik ile ilgilidir. Bu alanın gelişmesine önemli katkıları olan Stephen Wolfram (WolframAlpha cevap motoru) 1980’li yılların başında Caltech(Pasadena, California) fizik bölümünde önemli gelişmeler elde etti. [Not: Neden bu kadar fazla fizik veya matematik eğitimi almış kişiler bilgisayarların gelişmesine özellikle de yazılımlara, programa dillerinin oluşmasına katkı yapmıştır? Bunun için en altta ki yorumu (Geleneğin devamı kısmı) okuyabilirsiniz]


Sembolik programlamayı şu şekilde anlamaya başlayabiliriz: Sözcük fonksiyonları adlı görsele bakınız. Açık gri rengine boyanmış kısımlar günümüz matematiksel ifadelerinin notasyonudur. Bu haliyle bu notasyonu olduğu gibi bilgisayara girmek her zaman mümkün değildir. Bu notasyonu olduğu gibi direkt girmek yerine, sözcüklerden oluşan “kalıpları” kullanırız. Bu kalıplar örneğimizde olduğu gibi İngilizce kökenlidir. Şu şekilde genel bir yapıyı takip eder: sözcük(ifade , (değişkenler, sınırlar veya mertebeler)) parantez; içinde ifade edilecek bir gövdeyi oluştururken, virgüller; sınırları veya değişkenleri belirtmeye yarar. Örneğimizde de gözüktüğü üzere her bir ifade renklerle gösterilmiştir.

Görsel – sözcük fonksiyonları


Bu sayede bilgisayarla daha kolay iletişim kurarak, sözcüklerle istediğimiz matematiksel işlemleri tanımlar ve onların sonuçlarını elde ederiz. Bu yapıların ardında birer algoritma veya işlem ağacı yer alır. Çoğu sembolik hesaplamada bu yapılar kullanılır. SymPy kütüphanesi de bu şekilde yapılarla matematiksel işlemleri tanıtmaya ve çözmeye imkan sağlar.

(8 – 6) × (3+1) işlemi için bir işlem ağacı temsili


SymPy kütüphanesine giriş

Eğer matematik veya fizik bölümlerinde öğrenim görmüşseniz muhtemelen bir veya birkaç sembolik hesaplama programı kullanmış olabilirsiniz. Bunlar genelde Matlab veya Maple’dır. Matlab ve Maple direkt paket halinde hesaplamaya yönelmiş indirilebilir uygulamalardır. SymPy ise kullanılabilir kütüphanedir. Bu bir eksiklikten ziyade SymPy için bir tercihtir. Burada, SymPy’nin içinde ki her bölümden bahsetmek oldukça zordur. Sadece temel işlemlerden, denklem çözümlerinden, limit, türev, integral, matrisler, diferansiyel denklem çözümlerinden ve grafiklerden bahsedeceğim. (Bu örneklerde Jüpyter defteri kullanılmıştır. Ayrıca temel Python bilginizin olduğu varsayılmıştır.)

Kod-1 çıktısında oluğu gibi kütüphaneyi çağırdık. Burada ki from sympy import * kısmında ki “yıldız *” kütüphanede ki “_” alt çizgi içermeyen tüm kullanılabilir fonksiyonları belirtir. ‘#’ koyduğumuz kısımlar ise kod olarak çalışmaz onlar sadece bilgi vermek içindir.

Kod-1, kütüphaneyi çağırmak ve sembolleri tanıtmak


Kod-2 çıktısında birkaç temel örnek verilmiştir. Burada çarpma işlemi için ‘*’ sembolü, bölme işlemi için ‘/’ sembolü, çıkartma ve toplama işlemi için aynı ‘+ ve –‘ sembolleri, üs alma için ‘**’ sembolü ve karekök için ‘sqrt(…)’ sözcüğü, üstel fonksiyon için ‘exp(…)’ sözcüğü kullanılmıştır. Bunlar bilgisayarlarla sözcükler veya semboller üzerinden iletişim kurmak için kullanılan temel matematiksel operatörlerdir. Burada ilk başta SymPy kütüphanesini çağırmasaydık ve sembolleri tanıtmasaydık sqrt, exp ve ‘x’ için hata alacaktık. Çünkü bunları hiçbir şekilde tanıtmadık. +, - ,*, / işlemleri Python’un kendisinde gömülü halde geldiği için bunlarda herhangi bir hata yaşanmazdı.

Kod-2, temel işlemler


Kod-3 çıktısında gözüktüğü üzere birkaç denklem ve eşitsizlik çözümü verilmiştir. Solve sözcüğü İngilizce de ‘çözmek’ anlamına gelir. Solve sözcük fonksiyonunu kullandık ve gövdesine yani parantez içlerine çözeceğimiz ifadeyi ve çözmek istediğimiz değişkeni tanımladık.

Kod-3, denklem ve eşitsizlik çözümleri


Kod-4 çıktısına bakınız. sin(x)/x fonksiyonuna x, sıfıra giderken sağdan (+) yaklaşımı belirtiyor. Aynı ifadeyi ‘L’ baş harfi büyük “Limit” yazdığımızda girdiğimiz ifadenin matematiksel gösterimini verdi. SymPy’de bazı ifadelerin büyük harfiyle değişimi direkt matematiksel gösterimini verecektir.

Kod-4, limit yaklaşımı


Kod-5 örneğinde gözüktüğü üzere verilen fonksiyonun, x değişkenine göre türevini aldık. Aynı şekilde Derivative yani Türkçesi ‘Türev’ olan ifadeyi büyük harfle yazdığımızda matematiksel gösterimini verecektir.

Kod-5, türev örneği


Kod-6 çıktısında da gözüktüğü üzere üstte ki işlemlere benzer bir yaklaşım ile birkaç saniyede istediğimiz ifadeyi tanımlayıp, değişkeni ve sınırları belirterek sonucu görüntüleyebiliriz.

Kod-6, integral örneği


Kod-7 çıktısında gözüktüğü üzere bir matris tanımladık ve onun determinantını aldık. Tanımladığımız matris üzerinden .det() fonksiyonunu belirtmemiz yeterli oldu. Matrisi [e11, e12], [e21, e22] şeklinde elemanları tanımladığımıza dikkat ediniz. Bu şekilde istediğiniz boyutta matris tanımlar ve üzerinde birçok işlem yapabilirsiniz. Burada sadece determinant gösterilmiştir.

Kod-7, matris örneği

Kod-8 çıktısında bir diferansiyel denklem örneği vardır. Lakin 14. satırda bir hata olmuş ve y(x)’in ne olduğunu tanıyamamış. 15.satırda, y adlı bir fonksiyon olduğunu belirtiyor ve daha sonra işlemi tekrarlıyoruz. Böylece çıktıyı elde ediyoruz.

Kod-8, diferansiyel denklem örneği


Kod-9 da iki boyutlu grafik örneği gösterilmiştir. ‘Mathpath Console’ adlı programdan alt konu başlığında bahsedilecektir. Bu programın da grafik görüntüsü SymPy kütüphanesinden gelmektedir.

Kod-9, 2 boyutlu grafik örneği


Kod-10 da üç boyutlu grafik örneği gösterilmiştir. Bu grafik de aynı programdan gösterilmiştir.

Kod-10, 3 boyutlu grafik örneği


Genel olarak SymPy kütüphanesi bu şekildedir. Burada fazla örneğe ve anlatıma yer verilmese de SymPy kütüphanesinin dokümantasyonu oldukça zengin ve bolca örnek vardır. Bunun için referanslara bakabilirsiniz.


Geleneğin devamı

Üstte şöyle bir soru vardı; “neden bu kadar fazla fizik veya matematik eğitimi almış kişiler bilgisayarların gelişmesine özellikle de yazılımlara, programa dillerinin oluşmasına katkı yapmıştır?” Aslında bunun nedeni basittir: Bilgisayarlar matematiğin ve fiziğin müthiş birer somut uygulaması niteliğindedir. Oluşturulan her yapı veya algoritma matematiğin mantıklı dizgesinin bir ürünüdür. Depolanan her veri hücresi fiziğin uygulamalarıdır. Bu nedenle, bu alanda eğitim almaya yolculuğa çıkan heyecanlı ve üretken genç doğa bilimcilerin her zaman dikkatini çekmiştir. Çünkü alan oldukça somut ve hızlıdır. Bilgisayar ve programlama dilleri tarihinde de bu alanlarda eğitim almış kişilerin katkıları çok açıktır. (Bunun için bilgisayar tarihi yazısı okunabilir) Aynı şekilde biz de fizik lisans eğitimi sırasında kaçınılmaz olarak bu somut uygulamanın cazibesine kapıldık ve bölümden bir arkadaşımla bu tür bir uygulama geliştirmeye başladık. Okul derslerin yoğunluğu nedeniyle bu uygulamaya daha sonra tek devam etmeye (özellikle mobil cihazlar için) başladıktan sonra oldukça iyi bir uygulamayı çıkartmayı başardık. Üstte ki kod-9 ve kod-10 çıktısı uygulamamızın masaüstü versiyonundan bir görüntü. Uygulamamız Python dili ile geliştirilmekle birlikte SymPy ve birkaç diğer matematik kütüphanesini kullanır.


Uygulamamızın mobil görüntüleri – 1


Uygulamamız bu ileri seviye çözümleri yapmak için herhangi bir internet bağlantısına ihtiyaç duymaz. Basitleştirilmiş tasarımı ve SymPy’nin sadeleştirilmesiyle problemi tanıtmak oldukça basit hale getirilmiştir. İşlem kapasitesi oldukça fazla ve çözüm hızı yüksektir.



Uygulamamızın mobil görüntüleri – 2


Uygulama tamamen öğrenciler için hazırlanmıştır ve geliştirilmeye devam edilmektedir. Masaüstü versiyonun tamamen ücretsiz bir şekilde blog adresinde indirilebilir(referanslarda erişim adresi var) aynı şekilde android cihazlar için de ücretsiz versiyonu Google Play Store da indirilebilir. Daha fazla bilgi ve katkı sunanlar için blog adresini inceleyebilirsiniz.







bottom of page