elle24 Napisano Luty 16, 2015 Zgłoś Udostępnij Napisano Luty 16, 2015 import java.util.Random; public class RozkladWykladniczy { public static void main(String... aArgs){ int lambda = 2; Random t = new Random(); for (int i=0; i<100; i++){ return -(1/lambda)*Math.log(1-i); } } } Wiem, że ten kod nie jest skończony, ale nie mam pojęcia jak wygenerować liczby losowe zmiennoprzecinkowe i wstawic je do wzoru Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
andrus19 Napisano Luty 16, 2015 Zgłoś Udostępnij Napisano Luty 16, 2015 Jeśli chodzi o kolejne liczby pseudolosowe to pobierasz za pomocą: double losowa = t.nextDouble(); Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
elle24 Napisano Luty 16, 2015 Autor Zgłoś Udostępnij Napisano Luty 16, 2015 ok, teraz jest dobrze, dziękuje. Już wiem jaki bląd popełniłam. a jak wstawić do wzoru w pętli, żeby później można narysowac histogram? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Mavo Napisano Luty 16, 2015 Zgłoś Udostępnij Napisano Luty 16, 2015 Najlepiej przygotować metodę, która zwróci wartość, a później wywołać ją w pętli np: public class RozkladWykladniczy { Random t = new Random(); public double generuj(double lambda) { double losowa = t.nextDouble(); return -(1/lambda)*Math.log(1-losowa); } public static void main(String[] args) { RozkladWykladniczy test = new RozkladWykladniczy(); for(int i=0; i<100; i++) { System.out.println(test.generuj(2)); } } } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Mavo Napisano Luty 16, 2015 Zgłoś Udostępnij Napisano Luty 16, 2015 A, że temat mnie zainteresował, to dla ciekawych wrzucam jeszcze to. Kod nie jest doskonały i proszę się nie czepiać :) pisany był w pośpiechu i nie było czasu na zmiany. import java.util.*; import java.util.Map.Entry; /** * @author Grzegorz */ public class RozkladWykladniczy { private Random t; public HashMap<String, Integer> map; public RozkladWykladniczy() { this.t = new Random(); this.map = new HashMap<>(); } public double generuj(double lambda) { return -(1/lambda)*Math.log(1 - t.nextDouble()); } public void setHistogram(){ /* * tworzony jest obiekt DecimalFormat, * aby łatwo można było formatować generowane wartości * i przy tym obserwować zmiany na histogramie - szoda, * że nie graficznym :) */ java.text.DecimalFormat df = new java.text.DecimalFormat(); df.setMaximumFractionDigits(2);// największa ilość miejsc po przecinku df.setMinimumFractionDigits(2);// najmniejsza ilość miejsc po przecinku String tmp; int value; for(int i=0; i<200; i++) { tmp = df.format(generuj(2)); if(!map.containsKey(tmp)) { map.put(tmp, 1); } else { value = map.get(tmp); map.replace(tmp, value, ++value); } } } public void showHistogram() { if(map.isEmpty()) { System.out.println("Wartość: 0, Wystąpienia : 0"); } else { for (Entry<String, Integer> entry : map.entrySet()) { System.out.println("Wartość : " + entry.getKey() + " Wystąpienia : "+ entry.getValue()); } } } /* * Metodę dodałem, aby łatwiej przeanalizować wyniki */ public void sortujPoWystapieniach() { List list = new LinkedList(map.entrySet()); Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o2)).getValue()) .compareTo(((Map.Entry) (o1)).getValue()); } }); HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } map = sortedHashMap; } public static void main(String[] args) { RozkladWykladniczy test = new RozkladWykladniczy(); test.setHistogram(); test.sortujPoWystapieniach(); test.showHistogram(); } } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.