Kare, Daire, Olasılık ve Pi Sayısı

Pi sayısının özel ilgi alanım olduğunu beni tanıyan herkes bilir. Bu cümleden pi sayısının binlerce basamağını ezberleyen çılgınlardan olduğumu düşünebilirsiniz. Ancak hafızam hiçbir zaman o kadar güçlü olmadı. Gerçi olsa bile bunu pi sayısını ezberlemek için kullanır mıydım emin değilim. Ben daha çok pi sayısının geometrik yorumu ve hesaplama tekniklerine karşı ilgiliyim. Bugün biraz geometri biraz da olasılık kullanarak pi sayısını nasıl hesaplayacağımızı inceleyeceğiz.

Not: Kapak görseli bir yapay zeka tarafından üretilmiştir. Anlaşılan bu model \small \pi sembolünü henüz tam öğrenememiş.

Bildiğiniz gibi pi sayısı herhangi bir çemberin çevresinin çapına oranı olarak tanımlanmaktadır. Bu tanım ve biraz ileri matematik bilgisi kullanılarak pi sayısı farklı şekillerde hesaplanabilmektedir. Ancak biz bugün oldukça basit bir yaklaşım kullanarak pi sayısını hesaplayacağız. Bunun için bilmemiz gerekenler sadece biraz geometri ve olasılık bilgisi.

İlk olarak merkezleri orijinde olan bir kare ve bir daire düşünelim. Karenin kenar uzunluğu \small 2 birim, dairenin ise yarı çapı \small 1 birim olsun. Daha sonra karenin içinde olacak şekilde rastgele bir nokta seçelim. Bu noktanın orijine uzaklığı \small 1 birimden küçük ise nokta dairenin içerisinde, büyük ise dışında olur. Bu durum Şekil 1’de görselleştirilmiştir.

Şekil 1. Oluşturulan geometrik yapı

Şimdi bu rastgele seçilen noktanın dairenin içinde olma olasılığını kullanarak pi sayısını hesaplamaya çalışacağız. Bu noktanın koordinatlarının uniform dağılımlı, yani seçilen aralıktaki tüm sayıların gelme olasılığının eşit olduğunu varsayalım. Bu durumda noktanın dairenin içinde olma olasılığı dairenin alanının karenin alanına oranlanması ile elde edilebilir.

P=\frac{\text{Dairenin Alanı}}{\text{Kareni Alanı}}=\frac{\pi(1)^2}{2^2}=\frac{\pi}{4}

Görüldüğü gibi rastgele üretilen bu noktalar \small \pi/4 olasılıkla dairenin içerisinde olacaktır. Bizde bu deneyi simülasyon ortamında gerçekleştirerek \small \pi/4 ve dolayısıyla \small \pi sayısına ulaşmaya çalışacağız. Bunun için oluşturulması gereken programın adımları aşağıda verilmiştir.

  • Kaç adet nokta üretileceğini belirle.
  • Dairenin içerisindeki noktaları sayan bir değişken oluştur.
  • \small [-1, 1] aralığında uniform dağılımlı \small x ve \small y sayılarını üret.
  • \small \sqrt{x^2+y^2} \leq 1 ise sayıcı değişkeni bir arttır.
  • 3. ve 4. adımları üretilecek nokta sayısı kadar tekrarla.
  • \small \pi sayısını 4*(Daire içerisindeki nokta sayısı/Üretilen toplam nokta sayısı) formülü ile hesapla.

Bu adımlara göre oluşturduğum Matlab programı aşağıda yer almaktadır.

clear; clc; close all;

N = 10000; % Rastgele üretilecek nokta sayısı

pi_cal = zeros(1, N); % Pi sayısının iterasyona göre değişimi
pi_counter = 0;       % Dairenin içinde kalan noktaların sayısı

% Gif üretimi için dosyanın oluşturulması
obj = figure;
gifFile = 'piAnimation.gif';
exportgraphics(obj, gifFile);

for i = 1:N % Rastgele nokta üretim döngüsü
    
    % Noktanın üretimi
    x = rand*2-1;
    y = rand*2-1;

    if sqrt(x^2+y^2)<=1 % Üretilen nokta dairenin içerisinde mi?
        pi_counter = pi_counter + 1;
    end
    
    % İterasyona göre pi hesabı
    pi_cal(i) = (pi_counter/i)*4;
    
    % Hesaplanan pi sayısının iterasyona göre değişimi
    % 50 iterasyonda bir grafik güncellenir
    if not(mod(i, 50))
        plot(1:i, pi_cal(1:i), "LineWidth", 1, "Color", "Black"); hold on;
        plot(1:i, pi*ones(1, i), "LineWidth", 1, "Color", "Red"); hold off; 
        grid on; ylim([2, 4]);
        xlabel("İterasyon"); ylabel("\pi Sayısı");
        legend('Hesaplanan \pi Sayısı', 'Gerçek \pi Sayısı');
        exportgraphics(obj, gifFile, Append=true);
        drawnow;
    end
end

% İterasyona göre hesaplanan pi sayısının hatasının değişimi
error = abs(pi_cal-pi*ones(1, N));

% Hatanın görselleştirilmesi
figure;
semilogy(1:N, error, "LineWidth", 1, "Color", "Black");
xlabel("İterasyon"); ylabel("Hata");
grid on;

Bu programın çıktısı ise bir gif olarak Şekil 2’de verildiği gibi oluşmaktadır.

Şekil 2. Hesaplanan \pi sayısının iterasyona göre değişimi

Şekilde görüldüğü gibi rastgele üretilen nokta sayısı arttıkça olasılıksal olarak elde ettiğimiz pi değeri gerçek pi değerine yaklaşmaktadır. Hesaplama sonucunda oluşan hatanın iterasyona göre değişimi ise Şekil 3’te verilmiştir.

Şekil 3. Hesaplana \pi değerinin hatasının iterasyona göre değişimi

Burada hata seviyesinin \small 10000 rastgele nokta üretimi için \small 10^{-2} seviyesinde olduğu görülmektedir. Yani sadece virgülden sonra \small 1 basamağı doğru hesaplayabildik. Oldukça yüksek bir hata ama üretilen nokta sayısı arttırıldığında ve farklı denemelerin ortalaması alındığında daha yüksek doğruluğa ulaşılabileceği söylenebilir.

Şimdi pi sayısını bu şekilde hesaplamanın ne gereği var diye düşünebilirsiniz. Tabii ki burada asıl amacımız yüksek doğruluğa sahip bir pi hesabı yapmak değildi. Amacımız sadece problemlere bakış açımızı genişleterek farklı çözüm teknikleri öğrenmekti. Umarım bu bakış açısı farklı bir problemi çözme konusunda işinize yarar. Sonraki yazılarda görüşene kadar kendinize iyi bakın…

“Kare, Daire, Olasılık ve Pi Sayısı” için 2 yanıt

    1. Hocam dersiniz için çok güzel bir github reposu hazırlamışsınız gerçekten. Bu içeriğin bir bölümünde örnek açısından bir faydam olmasına da sevindim 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir