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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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:
1 |
gcd(a, b) x lcm(a, b) = a x b |
Python’un sunduğu aritmetik işlemlerden bir kaçını şöyle sıralayabiliriz:
1 2 3 4 5 6 7 8 9 |
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.
1 2 3 4 5 6 7 8 9 |
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)
1 2 3 4 5 6 7 8 9 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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 i denir. Kimi zaman özellikle elektrik mühendisliğinde i 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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.
Yorumlar