Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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

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

 

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 av Stetus
Lenke til kommentar

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 av jonny
Lenke til kommentar

Litt for trett i går. Beklager, 33% der er for å trekke 2 svarte. :confused: 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

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 forskjell
på 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 av adb123
Lenke til kommentar

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 av adb123
Lenke til kommentar

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

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 av adb123
Lenke til kommentar

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 av jonny
Lenke til kommentar

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+2
sum2 = 4/10
resultat = 4/10 * 4/10 * 100;

 

Er dette helt feil tankegang?

 

Ser feilen du påpeker.

Edit: Så editen din. Takker for svar!

Endret av adb123
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...