Skip to content

Python’da Matematiksel Modüller: Math ve Cmath

Kodlama yaparken sık sık matematiksel işlemlerden(en azından ben, genellikle hesap-kitap otomasyonları hazırlıyorum da) faydalanırız. Diğer programlama dilleri gibi Python’da da basit hesaplama operatörleri vardır. Çarpma için * , modül alma için % ve yuvarlama için // kullanılır.

Periyodik hareket çalışması veya elektrik devrelerini taklit etmek gibi belirli görevleri yerine getirmek için bir program yazıyorsanız, karmaşık sayılar kadar trigonometrik işlevlerle çalışmanız gerekecektir. Bu işlevleri doğrudan kullanamazsınız, ancak önce iki matematiksel modül ekleyerek bunlara erişebilirsiniz. Bu modüller  math ve cmath dir.

İlki, gerçek sayılar için hiperbolik, trigonometrik ve logaritmik işlevlere erişmenizi sağlarken, ikincisi karmaşık sayılarla çalışmanıza izin verir. Bu yazıda, bu modüllerin sunduğu tüm önemli işlevleri gözden geçireceğim. Açıkça belirtilmediği sürece, döndürülen tüm değerler yüzdür.

Aritmetik Fonksiyonlar

Bu fonksiyonlar yuvarlama ve mutlak değer alma gibi bir dizi işlem gerçekleştirirler. ceil(x) fonksiyonu x’den büyük veya eşit en küçük tam sayıyı verir. Benzer şekilde floor(x) fonksiyonu ise x’den küçük veya eşit en büyük tam sayıyı verir. fabs(x) ise x’in mutlak değerini verir.

Ayrıca factorial(x) fonksiyonu ile bir sayının faktöriyelini alabilirsiniz. Bir faktöriyel, bir tamsayının ve ondan daha küçük olan tüm pozitif tamsayıların çarpımıdır. Kombinasyonlar ve permütasyonlar ile uğraşırken yoğun şekilde kullanılır. Sinüs ve kosinüs fonksiyonlarının değerini hesaplamak için de kullanılabilir.

import math
 
def sinus(x):
 
    carpan = 1
    sonuc = 0
     
    for i in range(1,20,2):
        sonuc += carpan*pow(x,i)/math.factorial(i)
        carpan *= -1
         
    return sonuc
     
 
sinus(math.pi/2) # ciktisi 1.0 olacaktır
sinus(math.pi/4) # ciktisi 0.7071067811865475 olacaktır

math modülünde bulunan bir diğer faydalı fonksiyon ise gcd(x,y) fonksiyonudur. Bu fonksiyon en büyük ortak böleni yani EBOB i verecektir. x ve y eğer sıfırdan farklı iki tam sayı ise bu fonksiyon bu iki tamsayıyı bölen en büyük tam sayıyı verecektir. Bu fonksiyonu kullanarak aşağıdaki formül yardımıyla en küçük ortak katı yani EKOK u da rahatlıkla bulabilirsiniz:

gcd(a, b) x lcm(a, b) = a x b

Python’un sunduğu aritmetik işlemlerden bir kaçını şöyle sıralayabiliriz:

import math
 
math.ceil(1.001)    # ciktisi 2
math.floor(1.001)   # ciktisi 1
math.factorial(10)  # ciktisi 3628800
math.gcd(10,125)    # ciktisi 5
 
math.trunc(1.001)   # ciktisi 1
math.trunc(1.999)   # ciktisi 1

Trigonometrik Fonksiyonlar

Bu fonksiyonlar bir üçgenin açılarını kenar uzunluklarıyla ilişkilendirirler. Üçgen çalışmalar, ses, ışık ve manyetik dalgalar gibi periyodik olayların modellenmesinde trigonometrik fonksiyonlar kullanılır. Pythonda trigonometrik fonksiyonları kullanırken açı olarak radyan kullanmanız gerektiğini de unutmayın. sin(x), cos(x) ve tan(x) fonksiyonlarını kullanarak hesaplamaları rahatlıkla yapabilirsiniz. Fakat cosec(x), sec(x) ve cot(x) için ne yazık ki direk hesaplama yapan bir fonksiyon bulunmamaktadır.

Ayrıca trigonometrik fonksiyonların terslerini sağlıyor bize. Ters trigonometrik fonksiyonlarımız şu şekildedir: asin(x), acos(x) ve atan(x)

Pisagor teoremine aşina mısınız? Pisagor, hipotenüsün karesinin diğer iki kenarın karelerinin toplamına eşit olduğunu belirtmektedir. Hipotenüs aynı zamanda dik açılı üçgenin en büyük tarafıdır. Matematik modülü hipotenüs uzunluğunu hesaplamak için hypot(a,b) fonksiyonuna sahiptir.

import math
 
math.sin(math.pi/4)    # ciktisi 0.7071067811865476
math.cos(math.pi)      # ciktisi -1.0
math.tan(math.pi/6)    # ciktisi 0.5773502691896257
math.hypot(12,5)       # ciktisi 13.0
 
math.atan(0.5773502691896257) # ciktisi 0.5235987755982988
math.asin(0.7071067811865476) # ciktisi 0.7853981633974484

Hiperbolik Fonksiyonlar

Hiperbolik fonksiyonlar, daire yerine bir hiperbola dayanan trigonometrik fonksiyonların analogudur. Trigonometride (cos b , sin b ) noktası bir birim çemberin noktalarını temsil eder. Hiperbolik fonksiyonlar da ise (cosh b , sinh b ) noktası bir eşkenar hiperbolün sağ yarısını oluşturan noktaları temsil etmektedir.

Trigonometrik fonksiyonlarda olduğu benzer fonksiyonlar hiperbolik fonksiyonlar için de geçerlidir: sinh(x), cosh(x), tanh(x), asinh(x), acosh(x) ve atanh(x)

import math
 
math.sinh(math.pi)    # ciktisi 11.548739357257746
math.cosh(math.pi)    # ciktisi 11.591953275521519
math.cosh(math.pi)    # ciktisi 0.99627207622075
 
math.asinh(11.548739357257746)   # ciktisi 3.141592653589793
math.acosh(11.591953275521519)   # ciktisi 3.141592653589793
math.atanh(0.99627207622075)     # ciktisi 3.141592653589798

Üstel ve Logaritmik Fonksiyonlar

Muhtemelen program geliştirirken trigonometrik veya hiperbolikten ziyade üstel ve logaritmik fonksiyonlarla uğraşacaksınız. Neyse ki, matematik  modülü bize logaritma hesaplamak için bir çok fonksiyon sağlıyor.

Logaritma a tabanında x değerini bulmak için log(x, a) kullanmanız yeterli olacaktır. Eğer taban değerini boş bırakırsanız x’in logaritması e tabanına göre alınacaktır. Burada e, değeri 2.71828182… olan matematiksel sabit bir sayıyı ifade etmektedir. Bu ifadeyi math.e yazarak kullanabilirsiniz. Ayrıca pi sayısını da math.pi yazarak kullanabilirsiniz.

2 veya 10 tabanında logaritmik işlemlerde log2(x) ve log10(x) in cevapları log(x,2) ve log(x,10) a göre gerçeğe daha yakındır. Unutmayın ki bu sadece 2 ve 10 tabanı için böyle özel fonksiyonlar mevcut. log3(x) gibi bir fonksiyon yoktur. 3 tabanında logaritma almak için log(x,3) şeklinde standart kullanıma devam etmelisiniz. pow(x, y) ile x üzeri y’yi de rahatlıkla hesaplayabilirsiniz. Fakat üst alma için ** ifadesinden de faydalanabilirsiniz.

Karekök almak içinse sqrt(x) fonksiyonu vardır. Fakat az önce göstermiş olduğum pow() fonksiyonu ile de karekökü pow(x, 0.5) şeklinde rahatlıkla alabilirsiniz.

import math
 
math.exp(5)                      # ciktisi 148.4131591025766
math.e**5                        # ciktisi 148.4131591025765
 
math.log(148.41315910257657)     # ciktisi 5.0
math.log(148.41315910257657, 2)  # ciktisi 7.213475204444817
math.log(148.41315910257657, 10) # ciktisi 2.171472409516258
 
math.log(1.0000025)              # ciktisi 2.4999968749105643e-06
math.log1p(0.0000025)            # ciktisi 2.4999968750052084e-06
 
math.pow(12.5, 2.8)              # ciktisi 1178.5500657314767
math.pow(144, 0.5)               # ciktisi 12.0
math.sqrt(144)                   # ciktisi 12.0

Karmaşık Sayılar

Karmaşık sayı, bir gerçel bir de sanal kısımdan oluşan bir nesnedir. x ve y sayıları gerçek olursa karmaşık sayılar şu biçimde gösterilirler:

z=x+iy

Genel olarak karmaşık sayılar için “z” harfi kullanılır. i^2 = -1 özelliğini sağlayan sanal birime denir. Kimi zaman özellikle elektrik mühendisliğinde yerine, j kullanılır.

Burada x gerçek kısım iken iy sanal kısmı oluşturuyor. Karmaşık sayılar bu şekilde gösterildiği gibi kutupsal koordinatlar şeklinde de gösterilebilirdi. Yani aynı zamanda r modülünde fi faz açısına sahip olacak şekilde bir kombinasyonla da gösterilebilir.

r değeri abs() fonksiyonu ile bulunabilirken fi açısı ise phase(z) ile rahatlıkla elde edilebilir. Düzlemsel formdaki karmaşık sayıları polar(z) fonksiyonu ile kutupsal forma çevirebilirseniz. Bu fonksiyon size (r, fi) şeklinde bir ikili verecektir.

Benzer şekilde kutupsal formdan düzlemsel forma geçmek içinse rect(r, fi) fonksiyonu kullanılır. Bu fonksiyon ise şöyle bir dönüş sağlayacaktır: r * (math.cos(fi) + math.sin(fi)*1j

import cmath
 
cmath.polar(complex(1.0, 1.0))
# ciktisi (1.4142135623730951, 0.7853981633974483)
 
cmath.phase(complex(1.0, 1.0))
# ciktisi 0.7853981633974483
 
abs(complex(1.0, 1.0))
# ciktisi 1.4142135623730951

cmath.sqrt(complex(25.0, 25.0))
# ciktisi (5.49342056733905+2.2754493028111367j)
 
cmath.cos(complex(25.0, 25.0))
# ciktisi (35685729345.58163+4764987221.458499j)

Karmaşık sayılar sinyal analizi, akışkan dinamiği ve A/C elektrik devrelerinde yoğun bir şekilde kullanılır. Eğer bunlardan biri üzerine çalışıyorsanız cmath kütüphanesi sizi kesinlikle mutlu edecektir.

Bitti

Pythonda math ve cmath kütüphanelerinden, kullanım alanlarından ve ilgili fonksiyonların nasıl kullanıldığını güzelce anlatmış olduk.Umarım ki işinize yarar.. Lütfen yorumlarınızı benden esirgemeyin.

TR Kodlama GitHub'da!

TR Kodlama'da yer alan makaleleri GitHub üzerinden düzenleyebileceğinizi biliyor muyudunuz? Harika değil mi? Bu makale ile ilgili düzenleme yapmak isterseniz aşağıdaki butona tıklayınız!

GitHub'da Görüntüle ve Düzenle!