के साथ यादृच्छिक संख्या उत्पन्न करें क्या किसी को पता है कि गैर-वर्दी घनत्व के साथ यादृच्छिक संख्या कैसे उत्पन्न करें?गैर वर्दी घनत्व
उत्तर
एक मानचित्रण समारोह के माध्यम से एक समान घनत्व RNG का प्रयोग करें, और उसके परिणाम को पारित अपने वांछित घनत्व वितरण में बदलने के लिए।
क्या आप मुझे सी-जैसी प्रोग्रामिंग भाषा के साथ एक उदाहरण दे सकते हैं? (बस बेहतर समझने के लिए कि मैपिंग फ़ंक्शन के लिए आपका क्या मतलब है) – BlackShadow
आवश्यक मैपिंग फ़ंक्शन व्यस्त संचयी वितरण फ़ंक्शन है। घनत्व समारोह के संबंध में कुछ कैलकुस या संख्यात्मक एकीकरण और फिर अपवर्तन शामिल है। – Paul
लागू होने पर सबसे आसान समाधान: C++11 random facilities या Boost से उपयोग करें, जिनमें आपके लिए बहुत सारे गैर-वर्दी वितरण हैं।
+1। यहां तक कि यदि सटीक वितरण गुम है, तो वे एक ढांचा प्रदान करते हैं जिसमें आप अपना वितरण जोड़ सकते हैं। – MSalters
प्रश्न में अपनी टिप्पणी में:
1/sqrt(2*pi) * e^(-x^2)
केवल चर x है। एक्स में एक समान घनत्व होगा। तो बस एक अच्छी यादृच्छिक संख्या चुनें, फिर उसे उस समीकरण में चिपकाएं।
संयोग से, "अच्छा" से मेरा मतलब है "वर्दी घनत्व", इसलिए मैं 1 के साथ समाप्त होता हूं, जब वही उत्तर मिलता है +5 मुझे बचाता है! हालांकि शिकायत नहीं करनी चाहिए, मुझे दूसरे दिन एक भाग्यशाली स्वीकार्य उत्तर मिला। :) – Dave
डाउनवोट नहीं किया गया, लेकिन बुरा सुझाव। [0,1] में एक्स को वर्दी यादृच्छिक होने का सुझाव सामान्य कार्य प्रदान नहीं करेगा जब एक्स को उस फ़ंक्शन के माध्यम से रखा जाता है। किसी को व्यस्त संचयी वितरण फ़ंक्शन की आवश्यकता होती है, और ओपी द्वारा दिया गया कार्य घनत्व कार्य होता है। – Paul
आपको यह बताना चाहिए कि आपको किस वितरण की आवश्यकता है। असल में, आप इच्छित संभाव्यता कार्य के विपरीत का उपयोग करते हैं। उदाहरण के लिए, सामान्य वितरण प्राप्त करने का सबसे आम तरीका Box-Muller transform है।
यहाँ बॉक्स मुलर के लिए कोड सिर्फ विचार प्राप्त करने के लिए है:
float box_muller(float m, float s) /* normal random variate generator */
{ /* mean m, standard deviation s */
float x1, x2, w, y1;
static float y2;
static int use_last = 0;
if (use_last) /* use value from previous call */
{
y1 = y2;
use_last = 0;
}
else
{
do {
x1 = 2.0 * ranf() - 1.0;
x2 = 2.0 * ranf() - 1.0;
w = x1 * x1 + x2 * x2;
} while (w >= 1.0);
w = sqrt((-2.0 * log(w))/w);
y1 = x1 * w;
y2 = x2 * w;
use_last = 1;
}
return(m + y1 * s);
}
इस वर्ग के एक मैट्रिक्स के रूप में एक वितरण लेता है (प्रत्येक पंक्ति एक नंबर और इसकी आवृत्ति की एक जोड़ी है) और यादृच्छिक संख्या उत्पन्न करता है । तो आपके पास हो सकता है मुख्य विधि को देखें और चलाएं।
public class RandomGenerator {
HashMap<Integer,Range> mappa = new HashMap<Integer,Range>();
Random random = new Random();
int max;
public static void main(String as[]){
int[][] matrice = new int[3][2];
//number 5 occurs 5 times
matrice[0][0] = 5 ;
matrice[0][1] = 5 ;
//number 18 occurs 18 times
matrice[1][0] = 18 ;
matrice[1][1] = 18 ;
//number 77 occurs 77 times
matrice[2][0] = 77 ;
matrice[2][1] = 77 ;
RandomGenerator randomGenerator = new RandomGenerator(matrice);
for (int i = 0; i < 100; i++) {
System.out.println(randomGenerator.getNext());
}
}
public int getNext(){
int percentile = random.nextInt(max);
Range r =mappa.get(percentile);
return r.getValMax();
}
public HashMap<Integer, Range> getMappa() {
return mappa;
}
public void setMappa(HashMap<Integer, Range> mappa) {
this.mappa = mappa;
}
public RandomGenerator(int[][] distribuzioneOriginale){
ArrayList<Range> listaRange = new ArrayList<Range>();
int previous = 0;
int totaleOccorrenze = 0;
for (int riga = 0; riga < distribuzioneOriginale.length; riga++) {
Range r = new Range();
r.setValMin(previous);
r.setValMax(distribuzioneOriginale[riga][0]);
r.setOccorrenze(distribuzioneOriginale[riga][1]);
totaleOccorrenze += distribuzioneOriginale[riga][1];
previous = distribuzioneOriginale[riga][0];
listaRange.add(r);
}
int indice = 0;
for (int iRange = 0; iRange < listaRange.size(); iRange++) {
Range r = listaRange.get(iRange);
int perc = (int) (1000* (r.getOccorrenze()/(double) totaleOccorrenze) ) ;
for (int i = 0; i < perc; i++) {
mappa.put(i + indice , r);
}
indice += perc;
}
max = indice;
}
class Range{
int valMin;
int valMax;
int occorrenze;
public int getValMin() {
return valMin;
}
public void setValMin(int valMin) {
this.valMin = valMin;
}
public int getValMax() {
return valMax;
}
public void setValMax(int valMax) {
this.valMax = valMax;
}
public int getOccorrenze() {
return occorrenze;
}
public void setOccorrenze(int occorrenze) {
this.occorrenze = occorrenze;
}
}
}
- 1. मैटलैब में imagesc() की गैर वर्दी अक्ष
- 2. गैर-वर्दी यादृच्छिक संख्याएं उत्पन्न करना
- 3. गैर-वर्दी रैंडम नंबर जनरेटर कार्यान्वयन?
- 4. वर्दी वितरण
- 5. घनत्व वक्र
- 6. ओपनजीएल वर्दी बफर?
- 7. Jquery वर्दी अद्यतन
- 8. एक वर्दी यादृच्छिक क्रमपरिवर्तन
- 9. वर्दी सर्कुलर गति
- 10. जनसंख्या घनत्व डेटा पुनर्प्राप्त
- 11. एंड्रॉइड स्क्रीन घनत्व गणना
- 12. [लैट, लॉन, घनत्व]
- 13. निर्धारण छवि आकार/घनत्व
- 14. सारित एलसीडी घनत्व
- 15. वर्दी ग्रिड नियंत्रण को समझना
- 16. सी ++ 0x वर्दी प्रारंभिकता "विषमता"
- 17. जीएलएसएल/सी ++: वर्दी के Arrays?
- 18. एंड्रॉइड स्क्रीन आकार और घनत्व
- 19. घनत्व और एनएनसीक्शन HTTP शीर्षलेख
- 20. एंड्रॉयड परिभाषा घनत्व स्वतंत्र पिक्सल
- 21. std :: नक्शा <> :: डालने गैर copyable वस्तुओं और वर्दी प्रारंभ
- 22. (ओपनजीएल 3.1 - 4.2) गतिशील वर्दी सरणी?
- 23. थ्रेड-सुरक्षित वर्दी यादृच्छिक संख्या जनरेटर
- 24. Jquery वर्दी परिवर्तन का चयन आकार
- 25. ओपनजीएल ईएस 2: वर्दी और गुण
- 26. एक घनत्व वाले प्लॉट में एक एकल घनत्व साजिश में एकाधिक लाइनें कैसे प्राप्त करें?
- 27. उच्च घनत्व वाले क्षेत्रों के लिए कुशलता से घनत्व साजिश बनाएं, स्पैस क्षेत्रों के लिए अंक
- 28. जेट्रांसफॉर्म से पावर स्पेक्ट्रल घनत्व DoubleFFT_1D
- 29. एंड्रॉइड टैबलेट में घनत्व और आकार
- 30. डिवाइस की घनत्व को कैसे जानें?
निर्भर करता है ... आपको किस घनत्व समारोह की आवश्यकता है? –
आपको अपने आवश्यक वितरण को परिभाषित करने की आवश्यकता होगी। अन्यथा बस कुछ ऐसा कहना आसान होगा जैसे "हां, एक अच्छी यादृच्छिक संख्या लें, और 4 वें बिट को रीसेट करें" – Dave
मुझे रनटाइम पर प्री-डिफ़ाइंड फ़ंक्शन सेट के साथ संख्या उत्पन्न करने की आवश्यकता है (उदाहरण के लिए 1/sqrt (2 * pi) * ई^(- x^2) अगर मैं सामान्य वितरण चाहता हूं) – BlackShadow