elle24 Napisano Luty 16, 2015 Zgłoś 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
andrus19 Napisano Luty 16, 2015 Zgłoś Napisano Luty 16, 2015 Jeśli chodzi o kolejne liczby pseudolosowe to pobierasz za pomocą: double losowa = t.nextDouble(); Cytuj
elle24 Napisano Luty 16, 2015 Autor Zgłoś 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
Mavo Napisano Luty 16, 2015 Zgłoś 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
Mavo Napisano Luty 16, 2015 Zgłoś 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
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.