1. Feilretting
I oppgaveteksten står det i pseudokoden at man skal bruke ligning 5 for å regne ut første utslag (i tilfelle null hastighet i starten) og ligning 4 deretter for å ta alle senere step. Ligningsnumrene skulle vært 7 og 5 hhv.
I ligning (3) er det sneket seg inn en t_i i stedet for t_j midt i teller.
Merk forøvrig at når vi f.eks. i oppgave 3.4 sier at ustlaget y(x_i,t_-1) skal være lik 98 % av utslaget y(x_i,t_0) i alle punkt, så refererer "punkt" seg til posisjoner langs strengen (x-aksen), IKKE i tid. Tvert om, det er bare initialbetingelsene vi her diskuterer, slik at indeksen på t er nettopp -1 og 0 som svarer til "utslaget for bitte litt siden" og "utslaget nå", gitt i starten alene!
2. Valg av parametre
Vi har ikke valgt stramming av streng, masse pr lengde, oppdeling i posisjon (delta_x) eller tid (delta_t). Du kan velge det meste av dette fritt. MEN strammer du strengen mye, eller gjør strengen tynn, svarer det til at bølgehastigheten blir stor. Det betyr at strengen vil svinge raskere, og det betyr at du må velge finere tidssteg for å følge med i hva som skjer. Ligningen som står under 3.1 er derfor meget viktig å ta hensyn til, mens stramming og masse pr lengde nærmest kan velges fritt.
3. Programmeringen
Det er ikke svært vanskelig programmering i denne obligen, men det kan likevel lønne seg å følge samme prosedyre som for store programmeringsoppgaver: Stykk opp programmeringen i relativt små oppgaver og test dem ut hver for seg før du går videre med neste steg. I vårt tilfelle kan oppstykkingen f.eks. gjøres slik:
- Start med å få inn parametrene, lage arrayer for posisjon (du trenger tre av dem), få satt inn én initialbetingelse for utslag i en av de tre (f.eks. den gitt i oppgave 3.2) og plott resultatet og se at plottet er slik du forventer det skal være.
- Lag en enkel løkke for animering ut fra eksempelprogrammet som er lagt ut. Du kan starte med initialbetingelsen fra forrige punkt og bare multiplisere utslagene med en sinusfunksjon etter som "tiden" (indeksene i løkka) går for å modellere en stående bølge. Du kan da få sjekket at animeringen går bra.
- Tiden er da moden for å legge inn bølgeligningen. For oppgave 3.1 og 3.2 (null hastighet ved start) må du legge inn en liten løkke for å beregne utslaget like etter (= utslag like før) "nå"-utslaget i initialbetingelsen (dvs ut fra ligning 7). Dernest må du ha en løkke som skal følge hele bevegelsen i tiden som følger (ifølge ligning 5). Animeringsbiten er uforandret.
- Kjør programmet og se at alt er ok før du legger om til andre initialbetingelser osv.
4. Forståelse av fenomenet
Det er flere læringsmål med obligen. For det første ønsker vi at dere skal møte anvendelige numeriske beregningsmetoder som dere kan ha bruk for i senere kurs og i en fremtidig jobb. For det andre (og minst like viktig!!!) er ønsket om at dere skal få en dypere forståelse av bølger og hva som ligger bak en bølgebevegelse enn dere ellers ville ha fått. Forståelse av uttrykkene øverst side tre i oppgaveteksten er meget viktig. I tillegg er det svært viktig å forsøke å skjønne hva vi gjør når vi velger andre initialbetingelser enn den som er gitt gjennom ligning 7 ("hastigheten lik null i startpunktet"). For tilfellet som ligger bak ligning 7 avtar hastigheten oppover mot null i de siste tidsstegene før nullpunktet for tid (fra å være på vei oppover til null), mens hastigheten etterpå øker (nedover) i neste tidssteg. Reduksjon og økning av hastighet svarer nøyaktig til strammingen og masse pr lengde i stystemet. Det sørger ligning 7 for helt av seg selv.
Figur 1: Figuren viser utslaget de siste tidsstegene før man når toppunktet i et slikt tilfelle som er gitt gjennom ligning 7. Indeksene på y indikerer hvor mange tidssteg man er før nullpunktet. Vi ser at endring i utslag i løpet av ett tidssteg avtar når vi nærmer oss toppunktet. Det betyr selvfølgelig at hastigheten avtar når vi nærmer oss maksimalt utslag. Hvor mye hastigheten avtar er gitt av stramming og masse pr lengde. Tenk deg da at du ikke velger et utslag y_-1 som på figuren, men et helt annet utslag. Initialbetingelser man i så fall gir vil selvfølgelig ikke svare til at strengen har sitt maksimale utslag i y_0 (ved tiden t=0).
Hva da dersom vi velger en annen gjennomsnittlig hastighet i siste intervallet før "nå" (t=0) i initialbetingelsen? Vil den gjennomsnittshastigheten man da implisitt velger, sørge for at vi akkurat når toppen i slutten av intervallet vi gir initialbetingelsene i forhold til? Forsøk å følge denne type argumentasjon slik at du kan forstå hvorfor resultatene blir slik de blir.
En ekstra utfordring følger når initialbetingelsen er spesifisert ved at det også er en sidesveis forskyvning mellom "utslaget for bitte litt siden" og "utslaget nå". Hva kan man da forvente?
Når du velger å la "utslaget for bitte litt siden" være forskjøvet sideslengst i forhold til "utslaget nå" (alt relatert bare til initialbetingelsene!), vil du få et litt komplisert tidsforløp. Forsøk å beskrive det du ser med ord. Få med deg hvordan hovedbølgen beveger seg. Du får også en ekstrabølge som du neppe hadde forventet. Beskriv den også, både bevegelse og størrelse relativt til hovedbølgen. Årsaken til ekstra-bølge kan du spekulere på. (Noen aspekter du kan tenke på i den sammenheng: Vil en bølge kunne forplante seg med samme bølgeform langs en uendelig lang streng? Vil det samme skje dersom strengen er fastklemt i endene som i vårt tilfelle? Hvor enkelt er det å finne initialbetingelser som perfekt svarer til den løsningen man er ettertrakter for et system?).
NB: Husk forøvrig å endre skalering langs y-aksen i animeringer dersom bølgen går ut over det intervallet du først valgte!