adb123 Skrevet 18. september 2013 Del Skrevet 18. september 2013 Hei, sliter litt med en oppgave. Det jeg skal er følgende: Bionomisk fordeling: å trekke to kuler (med tilbakelegging), for så å regne ut sannsynligheten for at begge er hvite. Hypergeometrisk fordeling: trekke to kuler uten tilbakelegging og regne sannsynlighet for at begge er hvite. DEt jeg har skrevet: import java.util.*; class main{ public static void main (String []args) { Random random = new Random(); int sum = 0; int [] kuler = {0,0,0,0,0,0,1,1,1,1}; // sort = 0, hvit = 4 for (int i = 0; i < 2; i ++){ kuler[random.nextInt(kuler.length)]; } System.out.println("Binomisk fordeling: Sannsynlighet for at begge kulene er hvite er:"); System.out.println("Hypergeometrisk fordeling: Sannsynlighet for at begge kulene er hvite er:"); } } Som dere ser, så ble det bom stopp hvor jeg skulle trekke to tilfeldige kuler fra tabellen. Lenke til kommentar
quantum Skrevet 18. september 2013 Del Skrevet 18. september 2013 Bom stopp? Du mener det at programmet ditt ikke kompilerer? Du får en feilmelding som sier "not a statement" på linjen med kuler[random.nextInt(kuler.length)]; Det gir ingen mening, det er i og for seg ikke egentlig noe galt med å hente ut en verdi fra tabellen uten å bruke den, men kompilatoren krever at du også bruker verdien du henter. Prøv med: int randomKule = kuler[random.nextInt(kuler.length)]; Forøvrig er det vanskelig å se om dette er riktig tilnærming til oppgaven uten å ha oppgaveteksten. Lenke til kommentar
adb123 Skrevet 18. september 2013 Forfatter Del Skrevet 18. september 2013 Hei, jeg takker for svar. Bom stopp i logikken, jeg er litt usikker hvordan jeg skal regne ut sannsynligheten for å trekke to hvite. Oppgaveteksten sier: du har 6 sorte og 4 hvite kuler. Hva er sannsynligheten for å trekke to hvite kuler? (Med tilbakelegging og bionomisk fordeling). hva er sannsynligheten for å trekke to kuler uten tilbakelegging og regne sannsynlighet for at begge er hvite? (med hypergeometrisk fordeling). I tabellen kuler, representerer "0" sorte kuler og 1 hvite kuler. Lenke til kommentar
adb123 Skrevet 19. september 2013 Forfatter Del Skrevet 19. september 2013 Bumper denne jeg Lenke til kommentar
etse Skrevet 19. september 2013 Del Skrevet 19. september 2013 Oppgaveteksten sier: du har 6 sorte og 4 hvite kuler. Hva er sannsynligheten for å trekke to hvite kuler? (Med tilbakelegging og bionomisk fordeling). Første gang du trekker har du 4/10 sjanse for å få en hvis, andre gang har du 4/10 sjans for å få en hvit.Så da får man: (4/10) * (4/10) = 16/100 = 4/25 hva er sannsynligheten for å trekke to kuler uten tilbakelegging og regne sannsynlighet for at begge er hvite? (med hypergeometrisk fordeling). Førate gang 4/10 sjanse for hvit, den andre gangen 3/9 sjanse for å få hvit:derfor: (4/10) * (3/9) = 12/90 = 4/30 = 2/15 Lenke til kommentar
jonny Skrevet 19. september 2013 Del Skrevet 19. september 2013 Bumper denne jeg Skal du regne ut svaret, eller simulere mange trekninger og dermed komme fram til omtrent hvor stor sannsynligheten er? Hvis det siste, ville jeg laget en metode for hver av de to fordelingene (med og uten tilbakelegging) som trekker 2 kuler og returnerer hvor mange av de som var hvite (0, 1 eller 2). Denne metoden kaller du så x antall ganger, og har en teller som du legger til 1 hver gang metoden returnerer 2. Til slutt deler du denne telleren med x for å finne den omtrentlige sannsynligheten (vil bli riktigere jo større x er). Lenke til kommentar
Stetus Skrevet 19. september 2013 Del Skrevet 19. september 2013 (endret) Skal du regne ut svaret, eller simulere mange trekninger og dermed komme fram til omtrent hvor stor sannsynligheten er? Hvis det siste, ville jeg laget en metode for hver av de to fordelingene (med og uten tilbakelegging) som trekker 2 kuler og returnerer hvor mange av de som var hvite (0, 1 eller 2). Denne metoden kaller du så x antall ganger, og har en teller som du legger til 1 hver gang metoden returnerer 2. Til slutt deler du denne telleren med x for å finne den omtrentlige sannsynligheten (vil bli riktigere jo større x er). så fremt han ikke legger inn Math.Random inne i den ligningen så vil ikke svaret variere, og det vil ikke være noen grunn til å ta gjennomsnittet... Så vidt jeg forstår det skal du: 1) Trekke to ganger med tilbakelegging, begge gangene skal kulen være hvit. Det er 4 hvite og 6 sorte kuler 2) Trekke to ganger uten tilbakelegging, begge kulene skal være hvite her har du kode som vil gjøre dette. Har ikke skrevet så fryktelig mye java, så beklager rot, men det er ikke værre enn å google formelen for binomisk sannsynelighet og for sannsynelighet uten tilbaketrekning. Gadd ikke pynte så mye på den heller,så nå funker den, og mer får du ikke av meg. http://pastebin.com/Emnc5xne Endret 19. september 2013 av Stetus Lenke til kommentar
jonny Skrevet 19. september 2013 Del Skrevet 19. september 2013 (endret) For meg ser det ut som det må være noe feil? Jeg får følgende utskrift fra programmet: Med tilbakelegging: P= 16.00% Uten tilbakelegging: P= 33.33% Hadde forventet at uten tilbakelegging gir lavere sannsynlighet enn med...? La inn kode for å simulere dette sammen med koden din: Random rand = new Random(); private float simulatedProbability( int k1, int k2, int k1_n, int k2_n, int simNo, boolean putBack) { int success = 0; for (int i = 0; i < simNo; i++) { int local_k1 = k1; int local_k2 = k2; int k1_draw = 0; int k2_draw = 0; for (int j = 0; j < k1_n+k2_n && (local_k1+local_k2 > 0); j++) { int draw = rand.nextInt(local_k1+local_k2); if (draw >= local_k1) { k2_draw++; if (!putBack) local_k2--; } else { k1_draw++; if (!putBack) local_k1--; } } if (k1_draw == k1_n && k2_draw == k2_n) { success++; } } return success / (float)simNo; } ... System.out.printf("Simulert med tilbakelegging: P= %.02f%%%n", pc.simulatedProbability(6, 4, 0, 2, 1000000, true) * 100); System.out.printf("Simulert uten tilbakelegging: P= %.02f%%%n", pc.simulatedProbability(6, 4, 0, 2, 1000000, false) * 100); Som gir følgende utskrift: Simulert med tilbakelegging: P= 16.03% Simulert uten tilbakelegging: P= 13.30% Endret 20. september 2013 av jonny Lenke til kommentar
etse Skrevet 19. september 2013 Del Skrevet 19. september 2013 se svaret mitt i post #5, der har du svaret. Med tilbakelegging: P= 0.16 Uten tilbakelegging: P= 0.133333 Lenke til kommentar
jonny Skrevet 20. september 2013 Del Skrevet 20. september 2013 Jepp, og det stemmer jo godt med simuleringene jeg la inn. Men utskriftene dine stemmer ikke med svarene i post #5 (mulig du ikke regner ut sannsynligheten for å trekke 2 hvite kuler fra en mengde på 6 svarte og 4 hvite ved begge utskriftene, jeg er usikker). Lenke til kommentar
Stetus Skrevet 20. september 2013 Del Skrevet 20. september 2013 Litt for trett i går. Beklager, 33% der er for å trekke 2 svarte. Bytter en om på argumentene i uten tilbakelegging koden fra: System.out.printf("Uten tilbakelegging: P= %.02f%%%n", (pc.probabilityWithoutReplacement(6, 4, 2)) * 100); til System.out.printf("Uten tilbakelegging: P= %.02f%%%n", (pc.probabilityWithoutReplacement(4, 6, 2)) * 100); Da er vi der? Lenke til kommentar
adb123 Skrevet 22. september 2013 Forfatter Del Skrevet 22. september 2013 (endret) Tusen takk for gode svar. Ser ut til at jeg tenkte litt for komplisert når jeg begynte med denne oppgaven. Har prøvd å gjøre oppgaven på min "måte" ved å ta utgangspunkt i svarene deres. Blir det feil å gjøre oppgaven slik: ? public static double biominal(double hviteTerninger, double antallTerninger) { double resultat = 0; double sum1 = 0 ; double sum2 = 0; sum1 = hviteTerninger*hviteTerninger; sum2 = antallTerninger*antallTerninger; resultat = sum1/sum2 * 100; return resultat; } Ser ut til at jeg får riktig svar på dette regnestykket, men vil det fungere like greit hvis jeg har 1000 kuler og skal finne sannsynligheten (bionomisk) for at jeg trekker 900 hvite? Ellers er det 3 flere oppgaver. i c og d, skal vi regne ut sannsynligheten for å trekke to hvite når vi har 40 hvite kuler og 60 sorte. I den siste oppgaven skal vi gjøre følgende, siterer: Forklar hvorfor det er større forskjellpå svarene i a) og b) enn det er pasvarene i c) og d. Slik jeg har satt det opp, får jeg akuratt samme svar med 4 hvite, 6 sorte og 40 hvite, 60 sorte. Endret 22. september 2013 av adb123 Lenke til kommentar
adb123 Skrevet 22. september 2013 Forfatter Del Skrevet 22. september 2013 (endret) Jeg gjorde om på metoden jeg viste til ovenfor: public static double biominal(double hviteTerninger, double antallTerninger, double antallTrekk, double antallHviteTrekk) { double resultat = 0; double sum1 = 0; double sum2 = 0; sum1 = antallTrekk + antallHviteTrekk; sum2 = sum1 / antallTerninger; resultat = sum2*sum2 *100; return resultat; } Blir dette helt feil, eller? Legger merke til at resultatet dersom man har 100 terninger blir annerledes no. med 10 terninger, 2 hvite skal trekkes, blir svaret ca 16%. med 100 terninger, 2 hvite, blir svaret: 0.16% Endret 22. september 2013 av adb123 Lenke til kommentar
jonny Skrevet 22. september 2013 Del Skrevet 22. september 2013 Jeg skjønner ikke hvordan du har tenkt i noen av de to siste postene dine. Kan du forklare tankegangen, så vi ser hvordan du har kommet fram til det koden din viser? Hvis du ser på Etse's post (#5), ser du hvordan du kan regne det ut. Her er litt pseudokode du kan sjekke ut (s = antall sorte kuler, v = antall hvite kuler, n = antall kuler som skal trekkes): Med tilbakelegging: Sannsynlighet = (v / (s + v)) ^ n ; ^ leses som "opphøyd i" Uten tilbakelegging: Sannsynlighet = 1.0 gjenta n ganger: Sannsynlighet = Sannsynlighet * (v / (s + v)) v = v - 1 Lenke til kommentar
adb123 Skrevet 22. september 2013 Forfatter Del Skrevet 22. september 2013 (endret) Jeg skjønner ikke hvordan du har tenkt i noen av de to siste postene dine. Kan du forklare tankegangen, så vi ser hvordan du har kommet fram til det koden din viser? Hvis du ser på Etse's post (#5), ser du hvordan du kan regne det ut. Her er litt pseudokode du kan sjekke ut (s = antall sorte kuler, v = antall hvite kuler, n = antall kuler som skal trekkes): Med tilbakelegging: Sannsynlighet = (v / (s + v)) ^ n ; ^ leses som "opphøyd i" Uten tilbakelegging: Sannsynlighet = 1.0 gjenta n ganger: Sannsynlighet = Sannsynlighet * (v / (s + v)) v = v - 1 Hva jeg gjør? Jeg gjør akuratt det Etse gjør i oppgaven vedr binomisk fordeling. (4/10) * (4/10) = 16/100 = 4/25*100 Ser også ut til at jeg får riktig svar: 16%. Endret 22. september 2013 av adb123 Lenke til kommentar
jonny Skrevet 22. september 2013 Del Skrevet 22. september 2013 (endret) Beklager, jeg ser ikke at du gjør dette. Jeg ser at resultatet blir 16% hvis du kaller funksjonen din slik: "biominal(4, 10, 2, 2)", men jeg skjønner ikke tankegangen din når jeg ser på implementasjonen. Hva er forskjellen på parameterne "antallTrekk" og "antallHviteTrekk"? Etse tok tallet 4 fra "4 hvite kuler" og 10 fra "4 hvite + 6 svarte kuler", hos deg er tallet 4 = "antallTrekk" + "antallHviteTrekk". Det skjønner jeg ikke. Faktisk bruker du ikke "hviteTerninger" i det hele tatt i funksjonen din. Slik jeg ser det kan du fjerne de to siste parameterne, fjerne linja "sum1 = ..." og endre "sum2 = ..." til "sum2 = hviteTerninger / antallTerninger". Da fungerer funksjonen for 2 trekk med tilbakelegging. Endret 22. september 2013 av jonny Lenke til kommentar
adb123 Skrevet 22. september 2013 Forfatter Del Skrevet 22. september 2013 (endret) Beklager de mildt sagt elendige variabelnavnene. antallTrekk er antall trekk man skal ta (2) antallHviteTrekk er de to hvite jeg ønsker å trekke. Endret 22. september 2013 av adb123 Lenke til kommentar
jonny Skrevet 22. september 2013 Del Skrevet 22. september 2013 Men det spiller jo ingen rolle hvor mange hvite terninger du har? Du kan sette "hviteTerninger" til 0 eller 10, og får samme svar i begge tilfeller... Lenke til kommentar
adb123 Skrevet 22. september 2013 Forfatter Del Skrevet 22. september 2013 (endret) Vet ikke helt hva jeg har tenkt, skrev koden når jeg kom hjem fra byn tiiidlig i dag. Ser ut til at jeg har tenkt slik: sum1 = 2+2sum2 = 4/10resultat = 4/10 * 4/10 * 100; Er dette helt feil tankegang? Ser feilen du påpeker. Edit: Så editen din. Takker for svar! Endret 22. september 2013 av adb123 Lenke til kommentar
jonny Skrevet 22. september 2013 Del Skrevet 22. september 2013 Jeg ser ikke hva du har tenkt, jeg ser bare hva du har gjort. Hvordan kom du fram til "sum1 = 2+2"? Hva er "sum1" og "sum2" (bruk bedre variabelnavn!)? Hva om du skal trekke 3 hvite kuler istedenfor 2, da bør vel "resultat = ..." se annerledes ut? Jeg ville ikke godkjent den koden der om jeg hadde vært lærer... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå