Şimdi Ara

Olasılık ve İstatistik dersinden bir soru

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
10
Cevap
0
Favori
689
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar Binomial Rastgele Değişkeni ile ilgili bir sorum var.Başarılı olma olasılığı,deney sayısı ve başarılı deney sayısı belli.Bu deneylerin yığılmalı dağılım fonksiyonunu C++ ile hesaplamak istiyorum.Ancak,deney sayısı 10000'lere kadar çıkıyor takdir edersiniz ki herhangi bir programlama diliyle 10000'in faktöriyelini almam mümkün değil.Soruda ayrıca P(X=k+1) ve P(X=k) arasındaki bir bağıntıdan bahsedilmiş ancak ben bulamadım.Bunu nasıl hesaplayabilirim acaba? Akıl vereceklere yardım edenlere teşekkürler.



  • p(x<10000) için

    cumulative = 0;
    for(i = 0; i < 10000;i++) {
    cumulative +=bin(i)
    }

    return cumulative

    bin methodu herhangi bir değerin binomalini dödndürüyor mesela p(x=4) gibi
  • quote:

    Orijinalden alıntı: bytecode3

    p(x<10000) için

    cumulative = 0;
    for(i = 0; i < 10000;i++) {
    cumulative +=bin(i)
    }

    return cumulative

    bin methodu herhangi bir değerin binomalini dödndürüyor mesela p(x=4) gibi

    Aynı şekilde programımı oluşturdum ancak bin fonksiyonunda mesela p(x=4) için C(10000,4) ve sonrasında (1-p)^9996 gibi değerler hesaplamam gerekiyor ancak sayılar çok büyük olduğundan program çöküyor.Sorun algoritmada değil uygulamada ne yazık ki.Teşekkürler cevap için.
  • kombinasyon için bu algoritmayı kullanabilirsin, üst alma içinde recursive değilde iterative bir method kullan değişkenlerin long olmasınada dikkat et

    long combs(long n, long r) { 
    long res = 1;
    if(r > n - r) r = n - r;

    for (long i = 0; i < r; ++i)
    {
    res *= n-i;
    res /= i+1;
    }
    return res;
    }



    < Bu mesaj bu kişi tarafından değiştirildi Video Tapes -- 13 Nisan 2014; 17:25:30 >
  • quote:

    Orijinalden alıntı: bytecode3

    kombinasyon için bu algoritmayı kullanabilirsin, üst alma içinde recursive değilde iterative bir method kullan değişkenlerin long olmasınada dikkat et

    long combs(long n, long r) { 
    long res = 1;
    if(r > n - r) r = n - r;

    for (long i = 0; i < r; ++i)
    {
    res *= n-i;
    res /= i+1;
    }
    return res;
    }


    Çok teşekkürler.Üs alma için şöyle birşey denedim ama sanırım işe yarayacak,ne dersiniz?

    double us_alma(double temp1,int k)
    {
    double sonuc1=1;

    for(;k>0;k--)
    sonuc1=sonuc1*temp1;

    return sonuc1;
    }
  • Cok buyuk degerler hesaplayacaksan logaritma ogrenmen ve kullanman gerekir.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: JamesDeen

    quote:

    Orijinalden alıntı: bytecode3

    kombinasyon için bu algoritmayı kullanabilirsin, üst alma içinde recursive değilde iterative bir method kullan değişkenlerin long olmasınada dikkat et

    long combs(long n, long r) { 
    long res = 1;
    if(r > n - r) r = n - r;

    for (long i = 0; i < r; ++i)
    {
    res *= n-i;
    res /= i+1;
    }
    return res;
    }


    Çok teşekkürler.Üs alma için şöyle birşey denedim ama sanırım işe yarayacak,ne dersiniz?

    double us_alma(double temp1,int k)
    {
    double sonuc1=1;

    for(;k>0;k--)
    sonuc1=sonuc1*temp1;

    return sonuc1;
    }

    aynen, ben sadece int yerine long dedim garantiye almak için

    bin fonksiyonuda şöyle bişi olur

    double bin(long n, long r, float p) { 
    return combs(n, r) * us_alma(p, r) * us_alma(1.0 - p, n-r);
    }




  • quote:

    Orijinalden alıntı: Kaygerya

    Cok buyuk degerler hesaplayacaksan logaritma ogrenmen ve kullanman gerekir.

    Tahmin etmiştim ancak derste bahsi geçmeyince yapmak istemedim açıkçası.10 bin değerini kullanınca da zaten euler sayılı cevap geliyor.
  • quote:

    Orijinalden alıntı: bytecode3

    quote:

    Orijinalden alıntı: JamesDeen

    quote:

    Orijinalden alıntı: bytecode3

    kombinasyon için bu algoritmayı kullanabilirsin, üst alma içinde recursive değilde iterative bir method kullan değişkenlerin long olmasınada dikkat et

    long combs(long n, long r) { 
    long res = 1;
    if(r > n - r) r = n - r;

    for (long i = 0; i < r; ++i)
    {
    res *= n-i;
    res /= i+1;
    }
    return res;
    }


    Çok teşekkürler.Üs alma için şöyle birşey denedim ama sanırım işe yarayacak,ne dersiniz?

    double us_alma(double temp1,int k)
    {
    double sonuc1=1;

    for(;k>0;k--)
    sonuc1=sonuc1*temp1;

    return sonuc1;
    }

    aynen, ben sadece int yerine long dedim garantiye almak için

    bin fonksiyonuda şöyle bişi olur

    double bin(long n, long r, float p) { 
    return combs(n, r) * us_alma(p, r) * us_alma(1.0 - p, n-r);
    }



    Eyvallah hocam çalışıyor şuan problem yok,tekrar çok sağolun.




  • ne demek rica ederim, sende sağol
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.