Python ile matamatik kütüphanesinin kullanımı hakkında bilgiler.
math.ceil(x) (ceiling)
Bir sayıyı yukarı yuvarlayarak en küçük tam sayı değerini döner. Örneğin, 3.2 sayısını ceil fonksiyonu ile yuvarladığımızda sonuç 4 olacaktır. Negatif bir sayıyı yukarı yuvarladığında, daha az negatif bir değere (daha büyük bir değere) yuvarlanır.
import math;
print("ceil: " + str(math.ceil(3.2))); # Sonuc: 4
print("ceil: " + str(math.ceil(-2.7))); # Sonuc: -2math.comb(n, k) (combinations)
Belirli bir sayıda elemanın kaç farklı şekilde seçilebileceğini hesaplar. Örneğin, 5 eleman içinden 2 eleman seçmenin kaç farklı yolu olduğunu hesaplamak için comb fonksiyonunu kullanabiliriz.
import math;
print("comb: " + str(math.comb(5, 2))); # Sonuc: 10
print("comb: " + str(math.comb(7, 3))); # Sonuc: 35Burada comb fonksiyonu, kombinasyonların sayısını hesaplamak için kullanılır ve n eleman içinden k eleman seçmenin kaç farklı yolu olduğunu verir. Formül, n! / (k! * (n - k)!) şeklindedir ve comb fonksiyonu bu hesaplamayı sizin için yapar.
math.copysign(x, y)
Bir sayının işaretini (pozitif veya negatif) başka bir sayının işaretiyle değiştirir.
import math;
print("copysign: " + str(math.copysign(3.5, -2.0))); # Sonuc: -3.5
print("copysign: " + str(math.copysign(-7.2, 4.1))); # Sonuc: 7.2Burada copysign fonksiyonu, ilk sayının büyüklüğünü alır ve ikinci sayının işaretini bu büyüklüğe uygular. İlk örnekte, 3.5 sayısı negatif 2.0'ın işaretini alarak -3.5 olur. İkinci örnekte ise, -7.2 sayısı pozitif 4.1'in işaretini alarak 7.2 olur.
math.fabs(x)
Bir sayının mutlak değerini (absolute value) hesaplamak için kullanılır.
import math;
print("fabs: " + str(math.fabs(5.3))); # Sonuc: 5.3
print("fabs: " + str(math.fabs(-7.8))); # Sonuc: 7.8
print("fabs: " + str(math.fabs(-0.0))); # Sonuc: 0.0Burada fabs fonksiyonu, sayının işaretini dikkate almadan sadece büyüklüğünü döner. Negatif sayılar pozitif hale gelirken, pozitif sayılar aynı kalır.
math.factorial(n)
Bir sayının faktöriyelini hesaplamak için kullanılır. Faktöriyel, bir pozitif tam sayının ve sıfırın tüm pozitif tam sayı çarpanlarının çarpımıdır. Örneğin, 5! (5 faktöriyel) 5 × 4 × 3 × 2 × 1 = 120'dir.
import math;
print("factorial: " + str(math.factorial(5))); # Sonuc: 120
print("factorial: " + str(math.factorial(7))); # Sonuc: 5040
print("factorial: " + str(math.factorial(0))); # Sonuc: 1
try:
print("factorial: " + str(math.factorial(-3)));
except ValueError as e:
print("Error: " + str(e));factorial fonksiyonu sadece pozitif tam sayılar ve sıfır için kullanılabilir. Negatif bir sayı için kullanmaya çalışırsanız, bir ValueError Except hata alırsınız.
math.floor(x)
Bir sayıyı aşağı yuvarlayarak en büyük tam sayı değerini döner.
import math;
print("floor: " + str(math.floor(3.7))); # Sonuc: 3
print("floor: " + str(math.floor(-2.3))); # Sonuc: -3Burada floor fonksiyonu, sayının en yakın alt tam sayı değerine yuvarlanmasını sağlar. Pozitif sayılar için bu, sayının tam kısmına yuvarlanması anlamına gelirken, negatif sayılar için bu, sayının tam kısmının bir altındaki tam sayıya yuvarlanması anlamına gelir.
math.fmod(x, y)
İki sayının kalanını (modulus) hesaplamak için kullanılır. fmod, genellikle float sayılarla çalışırken kullanılır ve x sayısının y sayısına bölümünden kalan değeri döner.
import math;
print("fmod: " + str(math.fmod(7.5, 2.3))); # Sonuc: 0.5999999999999996
print("fmod: " + str(math.fmod(-9.8, 3.2))); # Sonuc: -0.20000000000000018fmod fonksiyonu, işaretli kalan değerini döner. Yani, bölenin (y) işareti ne olursa olsun, kalan (x) ile aynı işarete sahip olur. fmod, özellikle float sayılarla çalışırken, standart modulus operatöründen (%) daha doğru sonuçlar verir. Bu nedenle, matematiksel hesaplamalarda ve veri işleme görevlerinde kullanışlıdır.
math.frexp(x)
Bir sayıyı normalized mantissa ve üssü olarak iki ayrı bileşene ayırır. frexp, sayıyı x = m * 2**e şeklinde ifade eder, burada m bir kesir ve e bir tam sayıdır. m (mantissa) 0.5 ile 1 arasında veya -0.5 ile -1 arasında olur, ve e (exponent) bir tam sayıdır.
import math;
mantissa, exponent = math.frexp(8.0);
print("frexp: M: " + str(mantissa) + " E: " + str(exponent)); # Sonuc: 0.5, 4
# 8.0 sayısının 0.5 * 2**4 olarak ifade edilebileceğini gösterir.
mantissa, exponent = math.frexp(0.15625);
print("frexp: M: " + str(mantissa) + " E: " + str(exponent)); # Sonuc: 0.625, -2
# 0.15625 sayısının 0.625 * 2**(-2) olarak ifade edilebileceğini gösterir.
mantissa, exponent = math.frexp(-10);
print("frexp: M: " + str(mantissa) + " E: " + str(exponent)); # Sonuc: -0.625, 4
# -10.0 sayısının -0.625 * 2**4 olarak ifade edilebileceğini gösterir.math.fsum(iterable)
Yüksek hassasiyetle floating point (kayan noktalı) sayılarının toplamını hesaplamak için kullanılır. fsum, özellikle büyük miktarda floating point sayı toplarken oluşabilecek yuvarlama hatalarını minimize etmek için tasarlanmıştır.
import math;
print("fsum: " + str(fsum([0.1, 0.2, 0.3, 0.4, 0.5]))); # Sonuc: 1.5
print("fsum: " + str(fsum([1.1, 2.2, 3.3, 4.4, 5.5]))); # Sonuc: 16.5Bu örnekler, fsum fonksiyonunun floating point sayılarının toplamını nasıl yüksek hassasiyetle hesapladığını gösterir.
Bir başka senaryo, yuvarlama hatalarını gösterir. Normal toplama işlemi bazı durumlarda hassasiyet kaybına neden olabilir
# Normal toplama ile floating point sayılar
normal_toplam = sum([0.1] * 10)
# fsum ile aynı sayılar
hassas_toplam = math.fsum([0.1] * 10)
print(f"Normal toplama ile: {normal_toplam}") # Sonuc: Normal toplama ile: 0.9999999999999999
print(f"fsum ile: {hassas_toplam}") # fsum ile: 1.0Burada fsum fonksiyonu, sum fonksiyonuna kıyasla daha doğru bir sonuç verir.
math.gcd(*integers) (Greatest Common Divisor)
İki sayının en büyük ortak bölenini hesaplamak için kullanılır. (integer varargs)
import math;
print("gcd: " + str(math.gcd(36, 60))); # Sonuc: 12
# 36 ve 60 sayılarının en büyük ortak böleninin 12 olduğunu gösterir.
print("gcd: " + str(math.gcd(48, 180))); # Sonuc: 12
# 48 ve 180 sayılarının en büyük ortak böleninin 12 olduğunu gösterir.
print("gcd: " + str(math.gcd(-54, 24))); # Sonuc: 6
# -54 ve 24 sayılarının en büyük ortak böleninin 6 olduğunu gösterir.
x = math.gcd(24, 36);
print("gcd: " + str(math.gcd(x, 60))); # Sonuc: 12
# 24, 36 ve 60 sayılarının en büyük ortak böleninin 12 olduğunu gösterir.math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
İki sayının birbirine yakın olup olmadığını karşılaştırmak için kullanılır. Bu fonksiyon, floating-point (kayan nokta) sayılar arasında hassasiyet gerektiren karşılaştırmalar yaparken yararlıdır.
aveb: Bu iki parametre pozisyonel veya anahtar kelime argümanları olarak geçilebilir.*: Bu sembol, bundan sonra gelen parametrelerin sadece anahtar kelime argümanları olarak belirtilmesi gerektiğini belirtir.rel_tolveabs_tol: Bu iki parametre yalnızca anahtar kelime argümanları olarak geçilmelidir.
import math;
x = 0.1 + 0.2;
y = 1000.0001;
print("isclose: " + str(math.isclose(x, y))); # Sonuc: True;Burada, 0.1 + 0.2 işleminin sonucu 0.30000000000000004 olarak hesaplanır, ancak bu sonuç 0.3 ile isclose fonksiyonu tarafından yakın olarak kabul edilir çünkü floating-point aritmetiği nedeniyle küçük bir hata vardır.
import math;
x = 1000.0;
y = 0.3;
print("isclose: " + str(math.isclose(x, y, rel_tol=1e-4, abs_tol=1e-3))); # Sonuc: True;Burada rel_tol ve abs_tol ile toleranslar belirlenmiştir. Bu değerler içinde kaldığı için iki sayı birbirine yakın olarak kabul edilir.
import math;
x = 1.0;
y = 1.1;
print("isclose: " + str(math.isclose(x, y, rel_tol=1e-2, abs_tol=1e-2))); # Sonuc: False;Burada belirlenen toleranslar 1.0 ve 1.1 arasındaki farkı yeterince yakın olarak değerlendirmemektedir, bu yüzden sonuç False olur.
- Relative Tolerans: İki sayının oranı arasındaki farkı kontrol eder. Küçük sayılarla çalışırken veya büyük sayılarla çalışırken hassasiyet önemli olabilir.
- Absolute Tolerans: İki sayı arasındaki mutlak farkı kontrol eder. Küçük sayılarla çalışırken özellikle önemlidir.
import math
# Farklı tolerans ayarları
print(math.isclose(1.0, 1.000001, rel_tol=1e-5)) # Sonuç: True
print(math.isclose(1.0, 1.00001, rel_tol=1e-5)) # Sonuç: False
# Mutlak tolerans kullanımı
print(math.isclose(1.0, 1.001, abs_tol=0.01)) # Sonuç: True
print(math.isclose(1.0, 1.02, abs_tol=0.01)) # Sonuç: False
0 comments:
Yorum Gönder