Python / mattekontroll

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Nifelhem
Inlägg: 107
Blev medlem: 16 december 2013, 18:00:39

Python / mattekontroll

Inlägg av Nifelhem »

Dottern satt och funderade på hur många barn som måste födas för att det skulle finnas någon som fyllde år varje dag på året. Har glömt eller förträngt kunskaperna från lektionerna med sannolikhetslära i skolan. Jag skrev ett litet program som löser uppgiften "med våld" (tror jag). Jag tycker dock att svaren blir lite låga. Jag trodde att det skulle krävas en massa människor innan det slumpade till sig så att alla dagar hade minst ett födelsedagsbarn. Kan ju också, vilket är sannolikt :roll: , vara fel på logiken i programmet.

Ungefär hur många tycker/tror/antar/VET ni att det borde bli? Förmodligen en enkel matteformel för detta. Får väl säga DOH sen då.

Kod: Markera allt

#!/usr/bin/python
# -*- coding: ISO-8859-1  -*-

import os
import random
os.system('cls')
os.system("chcp 1252")
os.system('cls')
os.system("color 1e")

#Create list 
lista = []
for i in range (365):
	lista.append(0)
 
antal = int(raw_input ("\n \n antal? "))
#loop while min value of list is below antal-1
count = 0
while (min(lista) <= antal-1):
	r = random.randrange(1, 366, 1) #random could include 1 to 366-1
	lista[r-1] += 1 #r-1 to fit index for lista(0)
	count += 1
	
summa = 0	
print lista
for i in range (len(lista)):
	summa += lista[i]

print "\n Number of iterations: ", count
#print "\n List index for target value (useless): ", lista.index(10) 
print "\n Count for antal : ", lista.count(antal)
print "\n Max value element: ", max(lista)
print "\n Min value element: ", min(lista)
print "\n sum: ", summa
print "\n average per day: ", summa/365

for x in range (min(lista), max(lista)+1):
	print x, lista.count(x)


raw_input ("\n \n Press <ENTER> to end program") 
bearing
Inlägg: 11672
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Python / mattekontroll

Inlägg av bearing »

Går det att räkna ut?

Spontant känns det som att man kan räkna ut någon sannolikhet, men att bestämma ett antal tror jag inte.
danielr112
Inlägg: 8092
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Python / mattekontroll

Inlägg av danielr112 »

Du får ju inte glömma att ta i beaktsamhet att det finns dagar på året som är vanligare att det "skapas" barn på än andra :)
Nifelhem
Inlägg: 107
Blev medlem: 16 december 2013, 18:00:39

Re: Python / mattekontroll

Inlägg av Nifelhem »

bearing skrev:Går det att räkna ut?

Spontant känns det som att man kan räkna ut någon sannolikhet, men att bestämma ett antal tror jag inte.
Nä, något exakt antal lär det väl inte bli. Det var väl inte tanken heller. Programmet ger olika resultat vid varje körning. Dock inte jättestort spann.
Nifelhem
Inlägg: 107
Blev medlem: 16 december 2013, 18:00:39

Re: Python / mattekontroll

Inlägg av Nifelhem »

danielr112 skrev:Du får ju inte glömma att ta i beaktsamhet att det finns dagar på året som är vanligare att det "skapas" barn på än andra :)
Hittade ingen algoritm för att hantera midsommarafton. :humm:
kodar-holger
EF Sponsor
Inlägg: 970
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Python / mattekontroll

Inlägg av kodar-holger »

Midsommarafton är väl typ den 24e juni.

Men jag gissar på 2151,5.
kodar-holger
EF Sponsor
Inlägg: 970
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Python / mattekontroll

Inlägg av kodar-holger »

Jag trodde jag skulle få fatt i nån på jobbet som kan sånt här innan välbehövlig julledighet infann sig men så blev inte fallet. Min amatörmässiga gissning ovan byggde på följande resonemang:

En person kan ju fylla på vilken dag som helst.

Sannolikheten för att en andra person skall fylla på en annan dag är då:

\(p=\frac{364}{365}\)

En tredje person får ju inte fylla på samma dag som någon av de båda tidigare. Om jag inte tänker alldeles galet borde sannolikheten för det vara:

\(p=(\frac{364}{365})^2\)

Att jag inte använde 364*363 i täljaren beror på att vi ju inte vet om de två första föddes på samma dag eller ej. Alltså 364/365 för det är samma sannolikhet mot båda och produkten borde vara totala sannolikheten för en ny dag.

Sen kan man ju extrapolera resonemanget till n:e personen så att

\(p=(\frac{364}{365})^{n-1}\)

Nu är det ju sannolikheter och inte sanningar så man kommer ju aldrig till 0. Så vad är tillräckligt liten sannolikhet att n:e personen skall få en egen födelsedag för att anta att alla redan är upptagna? Jag tänkte:

\((\frac{364}{365})^{n-1}<\frac{1}{365}\)

Sen var det ju bara att lösa ut n och få

\(n= \frac{ln(\frac{1}{365})}{ln(\frac{364}{365})}+1\)

För att verifiera resonemanget använde jag metoden på tärningsslag. Hur många slag måste man i medeltal slå för att ha fått 1-6? Enligt formeln ovan blir det ca 10,82. Praktiska övningar gav tyvärr ca 14,29. Det är tillräckligt stor skillnad för att jag skall påstå att mitt resonemang är fel. :humm: Undrar hur det funkat i Harrisburg?
Nerre
Inlägg: 27188
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Python / mattekontroll

Inlägg av Nerre »

Det där med tärningen borde ju finnas uträknat som exempel nånstans... Jag försökte googla lite men hittade inte något konkret. Däremot hittade jag ett tips att göra träd-diagram.

Man kan ju börja med slantsingling innan man går till tärningen och sen till födelsedagarna.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Python / mattekontroll

Inlägg av Swech »

fakultet....

om du drar 4 kort ur en kortlek

för första finns 52 möjligheter
andra 51
tredje 50
fjärde 49

antal kombinationer är 52*51*50*49

Sedan har du 4 kort i näven
dessa kan du blanda på 4 * 3*2*1 sätt

så totala antal kortkombinationer är 52*51*50*49 / 4*3*2*1

Swech
Användarvisningsbild
Klas-Kenny
Inlägg: 11830
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Python / mattekontroll

Inlägg av Klas-Kenny »

Låter väldigt mycket som "Coupon collector's problem" https://en.m.wikipedia.org/wiki/Coupon_ ... 7s_problem

Edit: Nu har jag tillgång till räknare, så, "svaret" (om man nu kan tala om definitiva svar i rent statistiska beräkningar) borde vara att ~2360 barn måste födas. Förutsatt att det är samma sannolikhet för alla dagar på året, vilket kanske inte riktigt är verkligheten.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python / mattekontroll

Inlägg av sodjan »

> Edit: Nu har jag tillgång till räknare, så, "svaret" borde vara att ~2360 barn måste födas.

Måste födas, för att vadå?

Det finns självklart ingen garanti att alla dagar har minst en födelsedag,
det finns det aldrig oavsett hur stort antalet är. Det enda som händer
är att sannolikheten blir större och större...
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Python / mattekontroll

Inlägg av Lennart Aspenryd »

I tidernas begynnelse, nåja förr i tiden fanns det fertilitetscykler, med brunst som alla andra djur.
Födelsetalen är fortfarande ganska varierande, så en matematiskt riktig siffra finns inte, inte ens på månaden 30,4 dagar. Dessutom har faktiskt världsliga händelser inverkan på fertiliteten.

Men det är inte lika enkelt som hur många sockor måste man ta ur byrålådan i det mörka rummet som rymmer 25 vita och 30 svarta par, innan man har ett par som man kan ta på sig, maka alltså!
Användarvisningsbild
Klas-Kenny
Inlägg: 11830
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Python / mattekontroll

Inlägg av Klas-Kenny »

sodjan skrev: Måste födas, för att vadå?

Det finns självklart ingen garanti att alla dagar har minst en födelsedag,
det finns det aldrig oavsett hur stort antalet är. Det enda som händer
är att sannolikheten blir större och större...
Naturligtvis, men nu handlade ju tråden om hur många som behöver födas enligt en rent statistisk modell baserad på slumpmässiga utfall. I vanlig ordning när man behandlar sådant så är det ju ingen garanti att utfallet faktiskt skulle vara som man beräknat, likväl som det kan ske efter redan 365 dagar.

TS fråga har ju absolut inget definitivt svar, men jag skulle nog tro att det är svårt att komma fram till ett så mycket bättre svar än vad jag nämnde (utan att då som sagt ge olika dagar olika sannolikheter, baserat på ytterligare statistiska modeller, men det skulle ju inte heller ge ett definitivt svar).
kodar-holger
EF Sponsor
Inlägg: 970
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Python / mattekontroll

Inlägg av kodar-holger »

Klas-Kenny skrev:Låter väldigt mycket som "Coupon collector's problem" https://en.m.wikipedia.org/wiki/Coupon_ ... 7s_problem
Nu har jag bara skummat igenom förklaringen men det skulle vara kul att vara en fluga på väggen hos Nifelhem när han drar den där förklaringen för dottern :lol:

Och 15e april lär vara sveriges vanligaste födelsedag. Gissa varför jag vet det.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Python / mattekontroll

Inlägg av sodjan »

> men nu handlade ju tråden om hur många som behöver födas enligt en rent statistisk modell baserad på slumpmässiga utfall.

Förutsättningen var att det skulle finnas garanti att alla dagar var tagna.
Inte att det var med en viss sannolikhet.

> Dottern satt och funderade på hur många barn som måste födas för att det skulle finnas någon som fyllde år varje dag på året.

Svaret är att det inte finns något sådant antal. Det finns aldrig någon garanti att alla dagar prickas in.
Så att försöka sätta ett antal på det är meningslöst och det gör dottern en björntjänst.

Om man tycker att det är svårt att förklara så kan man ju prova med en tärning.
Hur många kast behövs det för att 1-6 ska inträffa minst en gång? Efter ett tag
så märker man att det inte finns någon bestämd övre gräns och att antalet
varierar ganska kraftigt från en kastserie till en annan.

Nu så vet vi ju inte åldern på dottern, men jag vänder mig mot att man ska ge
direkt felaktiga svar. Att svara "~2360" ser jag inte alls hur det hjälper dottern.
Skriv svar