Hopp til innhold
TasksAndActivitiesOppgaver og aktiviteter

Øvelse

Brytning og overlagring – programmering

I denne oppgaven skal vi se på bølgefenomenene brytning og overlagring. Vi skal forsøke å lage noen programmer som regner ut vinkler og simulerer bølger.

FooterHeaderIconFooter iconLK20

Brytning

Figur som viser innfallsvinkel og brytningsvinkel når lys går fra vann til luft. Illustrasjon.

Brytning vi si at bølger endrer vinkel når de går fra et medium til et annet. Dette skyldes at bølgen endrer fart. I det første programmet vårt skal vi se på lysbølger som kommer fra luft og går inn i et valgt medium.

For de aller fleste medier vil lyset gå litt saktere, og lyset vil da brytes inn mot innfallsloddet. Innfallsloddet er en tenkt linje som står vinkelrett på flaten mellom mediene (for eksempel vinkelrett på vannflaten eller glassvinduet).

Størrelsen på denne vinkelen er gitt av formelen

sin(u)=sin(v)n

der u er brytningsvinkelen, v er innfallsvinkelen og n er brytningsindeksen til mediet som lyset går inn i. n er et tall vi må finne eksperimentelt for hvert medium, men du kan også finne n for mange stoffer på internett.

Vi lager nå et program for å regne ut denne vinkelen:

Forklaring til koden over

I koden over har vi brukt biblioteket NumPy til å regne med vinkler.

Det er ikke sikkert du vet hva sin eller arcsin er. Kort fortalt er sin, som egentlig heter , forholdet mellom motstående katet og hypotenusen, et nyttig tall som brukes ofte i matematikk. Begrepet arcsin (invers sinus) brukes til å regne om sinus-verdien til en vinkel tilbake til vinkelen.

Du har kanskje også lagt merke til at tallene 180 og pi brukes. Dette er fordi man i mer avansert matematikk ofte bruker 2 pi som omkretsen av en sirkel – og ikke 360 grader, slik vi er vant til. Dette er et vinkelmål som kalles radianer. Grunnen til at vi må bruke det her, er at NumPy har valgt det. Vi må derfor legge inn en omregning, slik at vi kan bruke vanlige grader.

Velg ulike medier (materialer) med ulik brytningsindeks

Utfordring: I programmet vårt kommer alltid lyset fra luft og går til et annet medium. Men det kan jo tenkes at det kommer fra et annet medium enn luft. Prøv å lage et program hvor brukeren velger både hvor lyset kommer fra, og hvor det går til.

Formelen er nesten den samme som tidligere:

sin(u)=n1·sin(v)n2

  • n1 er brytningsindeksen til mediet lyset kommer fra
  • n2 er brytningsindeksen mediet går til
  • u er brytningsvinkelen
  • v er innfallsvinkelen

Hvis du vil ha med luft som et valg, er brytningsindeksen til luft lik 1.

En løsning kan være slik:

I løsningsforslaget over har vi valgt å endre litt på if- og elif-setningene, siden begge valgene må gjøres før noe skrives ut. Hvis du legger inn veldig mange forskjellige medier, kan det bli litt tungvint å måtte legge til to elif-setninger for hvert av dem. Da kan det kanskje være lurere å legge verdiene inn i ei liste og hente dem ut igjen på indeksnummer.

Overlagring

I avsnittet om brytning forklarte vi hva sinus er. Noe av det sinus kan brukes til, er å tegne bølger. Det skal vi gjøre når vi nå skal se på bølgefenomenet overlagring.

Ute på åpent hav er ikke overlagring noe vi trenger å tenke på, men når vi nærmer oss land, holmer eller skjær, har du sikkert lagt merke til at bølgene endrer karakter og tilsynelatende blir mer kaotiske og ofte voldsomme. Grunnen til dette er overlagring. Det betyr at bølger som møtes, vil «legge seg oppå hverandre». Sagt på en mer matematisk måte vil bølgenes amplitude adderes.

Det er flere tilfeller hvor dette vil skje, for eksempel når bølger slår mot et høyt skjær og sendes tilbake til havet, eller når de bøyes mellom klipper eller trange sund. I slike tilfeller kan bølger få så store bølgedaler at de får skip til å gå på grunn.

Filmen under viser et eksempel på overlagring av lydbølger som kommer fra to høyttalere, mens avstanden mellom dem øker.

Film som viser eksempel på overlagring av lydbølger

Vi skal nå lage et program som simulerer dette ved at brukeren legger inn to bølger. Deretter setter programmet dem sammen og gir oss resultatet av overlagringen. Men først må vi introdusere noen flere begreper om bølger:

Amplitude

Maksimal høyde av en bølge (regnet fra midten, den såkalte likevektslinja).

Frekvens og bølgelengde

Hvor ofte bølgen går fra maksimal høyde, ned og tilbake til maksimal høyde igjen, kalles frekvens. Med andre ord er frekvens antall svingninger per tidsenhet. frekvens=svingningertid

Avstanden mellom bølgetoppene kalles bølgelengde. Hvis du bruker x-aksen som sekunder, vil antall bølgetopper mellom hver x-verdi gi frekvensen. Men hvis du i stedet bruker x-aksen som lengde, vil avstanden mellom bølgetoppene være bølgelengden.

Faseforskyving

Begge bølgene treffer hverandre ikke nødvendigvis i samme stadium av bølgebevegelsen. Hvis den ene bølgen er på topp samtidig som den andre er på bunn, vil det gi et helt annet utslag enn om bølgetopp treffer bølgetopp.

Alle disse egenskapene er representert i formelen vi bruker:

f(x) = A·sin(k·x + c)

Tegne bølger

Vi begynner med å lage et program som kan tegne bølger. Deretter skal vi legge inn en bølge til. Prøv å lage et program med den gitte formelen som en funksjon. Brukeren skal kunne skrive inn A-, k- og c-verdier, og programmet skal så tegne en graf som viser bølgen (la programmet bruke 1000 x-verdier mellom 0 og 25 til å tegne bølgen).

Når du har fått programmet til å virke, prøver du å kjøre det noen ganger med ulike verdier for A, k og c, helt til du har fått en forståelse av hva som styrer amplitude, frekvens/bølgelengde og faseforskyving.

Utvide programmet til to bølger

Prøv nå å utvide programmet slik at det lager to bølger som det først tegner hver for seg, og deretter sammen som en overlagret bølge.

Kjør programmet noen ganger, og se hvilke bølger du klarer å lage.

Kommentarer til løsningsforslaget

To bølger med ulik amplitude, frekvens og bølgelengde er slått sammen til en. Illustrasjon.

To bølger tegnet hver for seg og deretter summert (overlagring). Illustrasjon.

Sluttverdien til x er satt til 8·pi  (8·π), og ikke 25. Grunnen til det er som tidligere nevnt at NumPy bruker radianer, og ikke grader. Kort fortalt angir radianer hvor langt rundt en sirkel med radius 1 du flytter deg, altså lengden av sirkelbuen. Går du hele veien rundt, er lengden 2 pi (2π). Ved å sette sluttverdien til åtte pi vet vi at vi går fire runder, og det gir oss litt mer kontroll over hvor mange bølgetopper programmet kommer til å tegne (fire hvis k=1, åtte hvis k=2, osv.).

plt.ylim(-10, 10) er lagt til denne gangen. Vanligvis velger Python selv hvor y-aksen starter og stopper, basert på verdiene som skal plottes, men det er ikke så hensiktsmessig for oss. Vi vil gjerne se hvordan bølgene ser ut både før og etter overlagring, og da er det greit å se dem i samme størrelsesforhold. Vær oppmerksom på at dette setter noen begrensinger for hva brukeren kan velge som amplitude (A).

Noen utfordringer

  1. Lag to bølger som begge har amplitude større enn 1, men som ved overlagring gir et helt stille hav.
  2. Lag to bølger hvor bølgetopp alltid møter bølgetopp, men hvor bølgene har ulik verdi for c.
  3. Lag to bølger som sammen gir en bølge hvor den fjerde bølgebunnen er dypere enn de første tre når de to bølgene er overlagret.
Sist oppdatert 15.06.2020
Skrevet av Eirik Farestveit Erstad og Kristin Bøhle

Læringsressurser

Programmering i naturfag