Arama butonu
Bu konudaki kullanıcılar: 1 misafir
9
Cevap
876
Tıklama
0
Öne Çıkarma
Olasılık ve İstatistik dersinden bir soru
Q
12 yıl (2346 mesaj)
Binbaşı
Konu Sahibi

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.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



V
12 yıl (3187 mesaj)
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
Q
12 yıl (2346 mesaj)
Binbaşı
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
V
12 yıl (3187 mesaj)
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
Q
12 yıl (2346 mesaj)
Binbaşı
Konu Sahibi

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;
}


Bu mesaja 1 cevap geldi.
K
12 yıl (13099 mesaj)
Yarbay

Cok buyuk degerler hesaplayacaksan logaritma ogrenmen ve kullanman gerekir.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
V
12 yıl (3187 mesaj)
Yüzbaşı

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);
}


Bu mesaja 1 cevap geldi.
Q
12 yıl (2346 mesaj)
Binbaşı
Konu Sahibi

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.



Q
12 yıl (2346 mesaj)
Binbaşı
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
V
12 yıl (3187 mesaj)
Yüzbaşı

ne demek rica ederim, sende sağol




Bu mesajda bahsedilenler: @JamesDeen
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.