Arama butonu
Bu konudaki kullanıcılar: 1 misafir
9
Cevap
686
Tıklama
0
Öne Çıkarma
Olasılık ve İstatistik dersinden bir soru
Q
10 yıl
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.



V
10 yıl
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
10 yıl
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
10 yıl
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
10 yıl
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
10 yıl
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
10 yıl
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
10 yıl
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
10 yıl
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
10 yıl
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.