Not
Bu yazı Sayın Kürşat Örsel tarafından hazırlanmıştır. Python’daki ileri düzey modüllerden biri olan “math” modülü matematikle uğraşanların işlerini bir hayli kolaylaştıracak metotlar ve fonksiyonlar barındırır.
math Modülü¶
Python’da matematiksel fonksiyonları math modülü ile kullanmaktayız. Şimdi math modülümüzün içeriğine bakalım. Unutmadan modülümüzü çalışmamıza çağıralım:
>>> import math
Bu komut ile modülümüzü çalışmamıza dahil etmiş olduk. Şimdi içerdiği fonksiyonları aşağıdaki komutu vererek görelim:
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh',
'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees',
'e', 'exp', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',
'hypot', 'isinf', 'isnan', 'ldexp', 'log', 'log10', 'log1p', 'modf', 'pi',
'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
Modülümüzün içeriğini de gördüğümüze göre şimdi kosinüs, sinüs, tanjant, pi, karekök, üslü ifadeler gibi fonksiyonlarla ilgili örneklerle kullanımını anlamaya çalışalım.
Üslü İfadeler Fonksiyonu (pow)¶
Üslü ifadeler matematikte hep karşımıza çıkmıştır, Python’da bunun için pow fonksiyonu kullanılmaktadır. pow power kelimesinin kısaltması olup Türkçe’de kuvvet, üs anlamlarına denk gelmektedir. Örnek verecek olursak 23 ifadesinin Python’daki karşılığı:
>>> math.pow(2, 3)
şeklindedir. Yukarıdaki kodu yazdığımızda Python bize cevap olarak şunu gösterir:
8.0
pow ifadesinin kullanımında parentez içerisindeki ilk sayı tabanı, ikinci sayı ise üssü göstermektedir.
Pi Niteliği (pi)¶
pi sayısı hepimizin okul yıllarından bildiği üzere alan, hacim hesaplamalarında bolca kullanılır ve değeri genellikle 3 ya da 3,14 olarak alınır. Tabii ki esasen pi sayısı bu kadar kısa değildir. Hemen Python’a sorarak öğrenelim bu pi sayısının değerinin kaç olduğunu. Aşağıdaki komutu yazıyoruz:
>>> math.pi
Dediğimizde Python bize aşağıdaki çıktıyı gösterir:
>>> 3.1415926535897931
Demek ki gerçek pi sayısı biraz daha uzunmuş. Şimdi küçük bir hacim hesaplaması örneği ile konuyu pekiştirelim. Kürenin hacmini bulalım. Küre hacmi;
Küre hacmi= 4/3(π.r3)
formülü ile bulunuyordu. Hemen kodlarımızı yazmaya başlayalım:
>>> 4.0 / 3.0 * math.pi * math.pow(2, 3)
Bu kod ile şunu demiş olduk: 4 ile 3’ü böl, pi sayısı ile çarp, sonra da sonucu 2’nin 3’üncü kuvveti ile çarp. Python bize cevap olarak şunu gösterdi:
33.510321638291124
Tabii ki bu işlemleri kwrite programında bir dosya açarak aşağıdaki gibi de yazabiliriz:
#/usr/bin/env python
#-*- coding:utf-8 -*-
from __future__ import division
import math
r = input("Kürenin yarıçapını giriniz:")
hacim = 4 / 3 * math.pi * math.pow(r, 3)
Böylece kürenin hacmini veren küçük bir programımız oldu.
Karekök Fonksiyonu (sqrt)¶
Karekök ile ilgili fonksiyonumuz sqrt. Kullanımı ise aşağıdaki gibidir:
>>> math.sqrt(9)
Kodunu yazıp enter’e bastığımızda Python bize aşağıdaki sonucu gösterir:
3.0
Euler Sabiti (e)¶
Bu nitelik, matematikteki euler sabitini veriyor. Kullanımı ise aşağıdaki gibi:
>>> math.e
Yukarıdaki kodu yazıp enter’e bastığımızda karşımıza euler sabiti 2.7182818284590451 cevap olarak Python tarafından gösteriliyor. Kullanım ve benzerlik açısından aynı pi sayısı gibi:
2.7182818284590451
exp Fonksiyonu¶
exp fonksiyonunun kullanımı şu şekilde:
>>> math.exp(x)
Bu kodu küçük bir örnekle açıklamak daha kolay olacak.
math.exp(2) kodunu yazdığımızda Python aşağıdaki cevabı verir:
7.3890560989306504
Bu sayı da nereden çıktı diyorsanız, exp fonksiyonu yukarıda bahsettiğimiz euler sabitinin kuvvetini alan bir fonksiyon. exp(x) ifadesindeki x parametresi bizim kuvvetimizdir. Yani exp(2) dediğimizde esasen biz Python’a şunu demiş oluyoruz: (2.7182818284590451)² Yani euler sabitinin karesini almış olduk.
Logaritma (log) Fonksiyonu¶
Logaritma fonksiyonumuzun kullanımı şu şekilde; log(x, y). Burada x sayısı logaritması alınacak sayı, y sayısı ise taban sayısını temsil etmektedir. Bir örnek ile pekiştirelim:
>>> math.log(2, 2)
Python bize aşağıdaki cevabı verir:
1.0
Logaritma (log10) Fonksiyonu¶
Bu fonksiyonun yukarıdakinden tek farkı taban sayısının önceden belirlenmiş ve 10 olması. Bu yüzden fonksiyonun kullanımı şöyle; log10(x) Burada x onluk tabana göre logaritması alınacak sayıdır:
>>> math.log10(10)
Dönen cevap:
1.0
Degrees Fonksiyonu¶
Degrees fonksiyonu girilen açıyı radyan’dan dereceye çevirmeye yarar. Kullanımı şu şekilde;
>>> math.degrees(x)
x burada derece’ye çevrilecek radyandır. Örnek olarak 45 radyanlık bir açı verelim ve derece karşılığını bulalım:
>>> math.degrees(45)
2578.3100780887044
Radians Fonksiyonu¶
Radians fonksiyonu girilen açıyı derece’den radyan’a çevirmeye yarar. Kullanımı şu şekilde;
>>> math.radians(x)
x burada radyana çevrilecek açımızdır. Örnek olarak 45 derecelik bir açı verelim ve radyan karşılığını bulalım:
>>> math.radians(45)
0.78539816339744828
Kosinüs, Sinüs, Tanjant fonksiyonlarına girmeden önce belirtmem gereken önemli bir nokta bulunmaktadır. Bu fonksiyonlarda açı olarak Python radyan kullanmaktadır. Bu yüzden aldığımız sonuçlar okulda öğrendiğimiz değerlerden farklı olacaktır. Bunuda radians fonksiyonu ile düzelteceğiz.
Kosinüs Fonksiyonu (cos)¶
Hemen kosinüs fonksiyonu ile bir örnek yapalım:
>>> math.cos(0)
Python bunun sonucu olarak bize:
1.0
cevabını verir.
>>> math.cos(45)
0.52532198881772973
Evet yukarıda gördüğümüz üzere bizim beklediğimiz cevap bu değil. Biz 0.7071 gibi bir değer bekliyorduk. Bunu aşağıdaki şekilde düzeltebiliriz:
>>> math.cos(math.radians(45))
0.70710678118654757
Şimdi istediğimiz cevabı aldık.
Sinüs Fonksiyonu (sin)¶
Hemen sinüs fonksiyonu ile bir örnek yapalım:
math.sin(0)
Python bunun sonucu olarak bize:
0.0
cevabını verir.
>>> math.sin(45)
0.85090352453411844
Evet yukarıda gördüğümüz üzere bizim beklediğimiz cevap bu değil. Biz 0.7071 gibi bir değer bekliyorduk. Bunu aşağıdaki şekilde düzeltebiliriz:
>>> math.sin(math.radians(45))
0.70710678118654746
Şimdi istediğimiz cevabı aldık.
Tanjant (tan) Fonksiyonu¶
Tanjant fonksiyonu ile bir örnek yapalım:
>>> math.tan(0)
Python bunun sonucu olarak bize:
0.0
cevabını verir.
>>> math.tan(45)
1.6197751905438615
Evet yukarıda gördüğümüz üzere bizim beklediğimiz cevap bu değil. Biz ~1.000(yaklaşık) gibi bir değer bekliyorduk. Bunu aşağıdaki şekilde düzeltebiliriz:
>>> math.tan(math.radians(45))
0.99999999999999989
Buda yaklaşık olarak 1.000 yapar.
Şimdi istediğimiz cevabı aldık.
Yukarıda verdiğimiz fonksiyonlardan bazılarını kullanarak basit bir fizik sorusu çözelim.
3 newton ve 5 newton büyüklüğünde olan ve aralarındaki açı 60 derece olan iki kuvvetin bileşkesini bulalım. Formülümüz aşağıdaki gibidir.
Boş bir kwrite belgesi açarak içine kodlarımızı yazmaya başlayalım:
#/usr/bin/env python
#coding:utf-8 -*-
import math #math modülünü çağırdık.
a = 60 # Açımızı a değişkenine atadık.
f1 = 3 # Birinci kuvveti f1 değişkenine atadık.
f2 = 4 # ikinci kuvveti f2 değişkenine atadık.
#Şimdi formülümüzü yazalım:
R = math.sqrt(math.pow(f1, 2) + math.pow(f2, 2) + 2 * f1 * f2 * math.cos(math.radians(a)))
#...ve ekrana çıktı verelim:
print "Bileşke kuvvet:", R
Kodlarımızı çalıştırdığımızda sonuç:
6.0827625303
Tabii ki daha farklı uygulamalar da yapılabilir.
Faktoriyel (factorial)¶
Faktoriyel işlemi için Python 2.6 sürümü ile math modülü içerisinde bir fonksiyon oluşturulmuş. Bundan önceki 2.5 sürümünde böyle bir fonksiyon yoktu. Kullanımı ise şu şekilde:
math.factorial(x)
x sayısı burada bizim faktoriyelini alacağımız sayıyı temsil ediyor. Bir örnek ile inceleyelim. Lise matematik derslerinde faktoriyel şu şekilde hesaplanıyordu. n!=nx(n-1)x(n-2)x(n-3)x......x1
Modülümüzü içe aktaralım:
>>> import math
Şimdi;
>>> math.factorial(5)
dediğimizde Python bize
120
sonucunu veriyor. Kendimiz hesaplayacak olursak:
5!=5x4x3x2x1=120
sonucuna ulaşırız. Bu fonksiyon ile Python bizi uzun işlemlerden ve ekstra tanımlamalardan kurtarıyor.
fmod Fonksiyonu¶
Bu fonksiyon matematikteki modüler aritmetik hesaplamaları için oluşturulmuş. İlk önce kısaca mod işlemleri nasıl yapılıyor ona değinelim.
Ahmet bey ile Fatma hanım; saat 09 da, 7 saat sonra buluşmak üzere anlaşıp ayrılıyorlar. Saat 12 bölmeli olduğu için, Ahmet bey ile Fatma hanım buluştuğunda saat 4’ ü gösterir. Bunu modüler aritmetik ile şöyle buluruz:
Burada 12 sayısı bizim modumuzdur. Yapılan toplama işlemi, tam sayılardaki toplama işleminden farklıdır. Bu tip işlemler Modüler Aritmetik’in konusudur.
Python bu uzun işlemi bizim için fmod fonksiyonu ile tanımlamış, işleri kolaylaştırmış. Birkaç örnek ile fmod fonksiyonun kullanımına bakalım:
>>> fmod(x, y)
şeklinde bir kullanımı var. Burada x modu alınacak sayıyı, y ise modu temsil eder:
>>> math.fmod(639, 5)
komutunu verdiğimizde, Python bize;
4.0
cevabını döndürür.
>>> math.fmod(99,3)
0.0
ceil Fonksiyonu¶
Ceil kelimesinin Türkçe karşılığı tavan çekmek, tavan inşa etmek anlamlarına gelir. Anlaşılacağı üzere biz yukarıya yuvarlama işlemi anlamında kullanacağız. Fonksiyon matematikte kullanılan yuvarlama işlemi ile ilgili fonksiyonlardan biridir. Ceil fonksiyonu verilen ondalıklı sayıdan büyük, en küçük tam sayıyı döndürür. Kullanımı şöyle;
>>> math.ceil(x.y)
Burada x.y ondalıklı sayıyı temsil etmektedir. Örneğin 7.3 gibi.
>>> math.ceil(19.3)
20.0
cevabını döndürür.
floor Fonksiyonu¶
Diğer yuvarlama işlemi fonksiyonu floor. Floor kelimesi zemin, yer, taban anlamına geliyor. Bizim için taban anlamı daha manalı. Bu fonksiyon ile ondalıklı sayıları en yakın tabana yuvarlama işlemi gerçekleştiriliyor. Hemen bir örnekle inceleyelim.
>>> math.floor(3.5)
dediğimizde Python bize aşağıdaki sonucu verir.
3.0
Böyle Python 3.5 sayısını en yakın taban olan 3.0’ a yuvarladı.
fabs Fonksiyonu¶
Bu fonksiyon verilen sayının mutlak değerini verir. Kullanımı ise aşağıdaki gibidir:
>>> math.fabs(-3)
3.0
Python bize sonuç olarak 3.0 değerini verdi. Tabi burada amaç matematik dersi anlatmak değil. Bir örnek daha verelim:
>>> math.fabs(9)
9.0
frexp Fonksiyonu¶
Bu fonksiyon verilen değerin mantisini ve karakteristiğini veriyor. Fonksiyonun kullanımı şu şekilde:
>>> math.frexp(x)
Bu durumda Python bize (m, k) gibi bir sonuç gönderiyor. m mantis, k ise karakteristik.
Bir örnek ile inceleyelim:
>>> math.frexp(7)
(0.875, 3)
ldexp Fonksiyonu¶
Bu fonksiyon kısaca anlatmak gerekirse frexp fonksiyonunun tersi ya da zıttı diyebiliriz. Yukarıda math.frexp(7) komutunu kullanarak (0.875, 3) sonucunu elde ediyoruz. Şimdi bu sonuçtan elde ettiğimiz rakamları kullanarak 7 sayısına ldexp fonksiyonunu kullanarak ulaşalım:
>>> math.ldexp(0.875, 3)
7.0
Bu şekilde ldexp fonksiyonunu kullanarak değerimize yeniden ulaşabiliyoruz.
modf Fonksiyonu¶
Bu fonksiyon verilen sayının ondalıklı kısmı ile tam kısmını parçalayarak size geri döndürüyor. Kullanımı modf(x) şeklinde. x burada tam sayı ve ondalıklı sayı olabilir. Hemen bir örnek ile açıklayalım:
>>> math.modf(6.5)
(0.5, 6.0)
trunc Fonksiyonu¶
Bu fonksiyon verilen değerleri tam sayı olarak kırpıyor. Kırpıyor herhalde uygun kelime diye düşünüyorum ya da kesiyor diyebiliriz. Peki neyi kesiyor? Verilen ondalıklı veya tam sayıların sadece tam kısımlarını bize döndürüyor. Ondalık kısmı kesiyor(kırpıyor). Yukarı ya da aşağı yuvarlıyor diyemiyoruz. Bu da – ve + operatörü kullanılmış örnek işlemlerde ortaya çıkıyor. Şimdi örneklerle bakalım:
>>> math.trunc(15.4)
15
>>> math.trunc(-15.4)
-15
Bu iki örnekten de anlaşılacağı üzere birincisinde aşağıya, ikincisinde (– operatörden dolayı) yukarı yuvarladı olarak algılanabilir. Fakat bu fonksiyonun yaptığı işlem sadece ondalıklı kısmı kesmek. Bu fonksiyon Python 2.6 sürümü ile eklenmiş.
hypot Fonksiyonu¶
Öklit bağıntısı için oluşturulmuş bir fonksiyondur. (Pisagor teoremi diye geçer.) Gerçi işin Öklit-Pisagor kısmına değinmeyelim, orası matematik uzmanlarının işi. Fonksiyonun kullanımı;
>>> math.hypot(x, y)
şeklindedir. Öklit bağıntısı a2 = b2 + c2 şeklindedir. Hani bir zamanlar lise matematik ve fizik derslerinde üçgenlerin kenar uzunluklarını, vektörlerin birim uzunluklarını bulmak için çokça kulladığımız bir bağıntı. Hatta ezberlerdik 3-4-5 üçgeni, 5-12-13 üçgeni gibi. Neyse bu kadar anı yeter. İşte hypot fonksiyonu işimizi kolaylaştırarak bu bağıntının sonucunu bize döndürüyor. Verilen değerlerin karesini al, topla, karekökünü bul gibi sıkıntılardan kurtarıyor. Hemen yukarıdaki üçgenlerde deneyerek örnekleyelim:
>>> math.hypot(3, 4)
5.0
ya da:
>>> math.hypot(5, 12)
13.0
Hiperbolik Fonksiyonlar¶
cosh Fonksiyonu¶
Hiperbolik kosinüs fonksiyonunu döndürür. Kullanımı:
>>> math.cosh(x)
şeklindedir. Burada x girilen değerdir. Bir örnek ile inceleyelim:
>>> math.cosh(0)
1.0
sinh Fonksiyonu¶
Hiperbolik sinüs fonksiyonunu döndürür. Kullanımı:
>>> math.sinh(x)
şeklindedir. Burada x girilen değerdir. Bir örnek ile inceleyelim:
>>> math.sinh(0)
0.0
tanh Fonksiyonu¶
Hiperbolik tanjant fonksiyonunu döndürür. Kullanımı:
>>> math.tanh(x)
şeklindedir. Burada x girilen değerdir. Bir örnek ile inceleyelim:
>>> math.tanh(90)
1.0
acosh Fonksiyonu¶
Hiperbolik kosinüs fonksiyonunun tersini döndürür. Kullanımı:
>>> math.acosh(x)
şeklindedir. Burada x girilen değerdir. Bir örnek ile inceleyelim:
>>> math.acosh(1)
0.0
Bu fonksiyon Python 2.6 sürümü ile eklenmiş.
asinh Fonksiyonu¶
Hiperbolik sinüs fonksiyonunun tersini döndürür. Kullanımı:
>>> math.asinh(x)
şeklindedir. Burada x girilen değerdir. Bir örnek ile inceleyelim:
>>> math.asinh(0)
0.0
Bu fonksiyon Python 2.6 sürümü ile eklenmiş.
atanh Fonksiyonu¶
Hiperbolik tanjant fonksiyonunun tersini döndürür. Kullanımı:
>>> math.atanh(x)
şeklindedir. Burada x girilen değerdir. Bir örnek ile inceleyelim:
>>> math.atanh(0)
0.0
Bu fonksiyon da Python 2.6 sürümü ile eklenmiş.