26 juli, 2022

Heilt på kanten, del 2 - Monte Carlo til unnsetning!

 Over til problemet vårt. 

Vi skulle altså løyse oppgåva


Kor stor del av eit kvadrat ligg nærmare sentrum enn kanten?


Umiddelbart klarte eg ikkje å sjå for meg korleis dette arealet ser ut, så eg brukte da Monte Carlo-metoden igjen for å få ein peikepinn.


I prosjektet over, teiknast det eit kvadrat, som eg så hivar mange prikkar inni! Ved å trykke på mellomrom kastar du tusen til. Det blir så rekna ut kor mange som ligg nærmare sentrum enn ein av sidekantane. Dette var litt meir møysommeleg å rekne ut enn når det gjaldt å estimere pi, ein måtte sjå på avstanden til alle sidekantane og avstand til sentrum og så finne ut kva som var minst. Så fargelegges punktet raudt om det ligg nærmast sentrum og lilla om det ligg nærmare ein sidekant. Kast nokre tusen prikkar på kvadratet og du vil sjå at området som blir definert som nærmare sentrum både har litt form av eit kvadrat og litt form av ein sirkel. Naturleg nok kanskje, men ikkje heilt enkelt å sjå for seg umiddelbart (iallfall ikkje for meg!). 

Til slutt kan du trykke K for å teikne kurva som omsluttar det raude arealet. Men kor stort er det? Kva form har det? Og korleis kan ein finne ut arealet av det?

Heilt på kanten - del 1 - Monte Carlo

 Ei uskyldig lita oppgåve dukka opp ein dag. 


Kor stor del av eit kvadrat ligg nærare sentrum enn kanten?


Oppgåva kan løysast eksakt eller tilnærma/numerisk. Det er jo freistande å berre stoppe der ("I think I'll stop there!"), men eg tenkte å lage eit forslag til løysing her så om du vil prøva sjølv så er det iallfall her du må stoppe og lese. 

Simulering

Først ville eg sjå korleis dette området eigentleg såg ut. Ein velkjend "brute force"-metode er Monte Carlo-metoden. Det vil seie at ein bruker gjentatte tilfeldige eksperiment til å simulere utfall for å kunne estimere noko numerisk. Du har kanskje sett korleis ein kan bruke ein slik måte til å estimere pi med. La oss ta det først. 


I Scratch-prosjektet over blir det kaste ei mengd med prikkar på skjermen. Prikkane som havnar innafor ein gitt sirkel får ei farge (lilla) og dei som havnar utafor får ei anna farge (grøn). Når ein kastar svært mange prikkar på skjermen vil andelen prikkar inni sirkelen delt på talet på prikker totalt bli meir og meir likt andelen sirkelarealet utgjer. Ved å køyre simulatoren over så ser du at ein så kan bruke dette til estimere pi. 

For å klårgjere det litt meir: Ein kan gjere det litt lettare ved å tenkje seg sirkelen med radius 1. Då vil kvadratet rundt ha areal 4, medan sirkelen vil ha areal pi. Talet på prikkar inni sirkelen delt på talet på prikkar totalt vil gi eit estimatet på forholdet pi/4. Eit estimat for pi vil da bli andelen 4*prikkar inni /prikkar totalt. Ved å la simulatoren gå ei stund ser du korleis dette vil nærma seg pi etter kvart. 

26 juni, 2022

Kjekk kryskap, alle!

Det fins ikkje noko som kan gjera opp for det som skjedde denne helga i Oslo. Ord, kjærleik, samhald, mange ting kan kjennast meiningsfullt og godt, men det er aldri nok. Vi veit så alt for vel at det aldri blir nok regnbogar, aldri nok kjærleik. Ein musikar kan sete seg ned og sete dei vakraste tonar i samanheng, ein poet kan smi dei vakraste orda. Eg kan jo ingen av delane, og det kan sikker virke rart at nokon i oppgittheit programmerer ei støtte til homofile slektningar, venar, følgjarar, studentar og andre. 


Men det var no det som vart reaksjonen denne gong. 



21 juni, 2022

Dager siden

Eg er litt oppteken av å lage program (anten det er med blokk eller tekst), der eg brukar dei til å løyse reelle problem. Ofte kan det vera litt vanskeleg å finne passande oppgåver til dette, der prosjekta ein lagar både er overkommelege og nyttige. Eit behov dukka opp her om dagen: Korleis kan ein laga eit Scratch-prosjekt som tel talet på dagar sida noko skjedde? Det er ingen openberr innebygd kloss for dette, men ved hjelp av "Dager siden 2000"-klossen kan vi trikse til dette.

 

Denne knappen fortel oss ganske enkelt kor mange dagar det er sida år 2000. Det store talet på desimalar er uinteressant for vår bruk, så vi må runde av. Om vi velger å runde av etter vanlege reglar eller runde opp/ned, får bli ein smaksak alt etter kva ein skal bruke dette prosjektet til. Eg vel å bruke vanleg avrunding, og risikerer ikkje noko meir enn at talet på dagar vekslar midt på dagen. 

Men for at dette prosjektet skal halde styr på dagane sjølv når det ikkje køyrer så må vi bruker skyvariablar. Eg lagar meg ein knapp og legg til følgjande skript på knappen:
 


Når eg nullstiller tellaren ved å trykke på knappen, legger prosjektet inntil talet på dagar sida 2000 i skyvariablen dager1. 
Kvar gong eg no køyrer programmet seinare så vil knappen seie talet på dagar sida 2000 minus dager1, som skriptet til høgre viser. Den vil altså telja opp med 1 for kvar dag som går, enten programmet køyrer eller ikkje. Trykkjer eg på knappen vil den nullstille tellaren ved å sette dager1 til det nye talet på dagar sida 2000. 

Her har eg laga ein tellar som tel kor mange dagar det er sida alle i familien har bytta tannkost! 





25 mars, 2022

Vekta av røyk

Ein gong budde i eit kollektiv med ein som ikkje var særleg oppteken av matematikk. Han kom triumferande inn på rommet mitt og lurte på om eg visste korleis ein finn vekta av røyk. Eg hadde aldri tenkt på dette før, men klarte eigentleg ganske raskt å finne ein måte å gjera det på. Han vart litt skuffa. (Her må eg leggje til at eg stort sett ikkje er den som løyser vanskelege Illustrert Vitenskap-oppgåver raskast, men denne oppgåva klarte eg ganske raskt å finne ut av). For den som ikkje allereie har tenkt korleis ein kan gjera dette er løysinga at ein først veiger sigaretten og etterpå veiger oska. I matematikk har vi mange døme på at ein tenkjer slik. Det er eit døme på ein heuristikk. Vi finn eit areal ved å finne eit stort areal og trekkje frå ein bit. Vi finn eit integral ved å ta eit større integral og trekkje frå noko. Vi finn eit sannsyn ved å finne sannsynet for at noko meir skjer og trekkjer frå det som har vorte registrert to gonger. Same med telling av mulegheitar. Vi tell ofte først for mange og trekkjer frå dei vi har tald to gonger. Med eit par år som matematikk og fysikkstudent var det ikkje vanskeleg å løyse denne oppgåva, som min medbuar såg på som eit enormt krevande spørsmål. For meg er dette noko av det matematikk har hjulpet mest med. Finne nokre heuristikkar, tankebanar og tenkemåtar som løyser problem, spesielt problem som liknar på andre problem.

Ofte får ein spørsmålet om kva ein skal bruka matematikken til, iallfall om ein er matematikklærar. Og eg har vel innsett at svaret mitt er lite tilfredsstillande for mange, men det er nettopp det å kunne tenkje på den typen problem, realistiske eller ikkje, relevante eller ikkje, og koma med løysingar på dei.