Modellering og analyse av trigonometriske funksjonar
Mange periodiske fenomen i naturen kan modellerast med sinusfunksjonar. Når vi skal analysere funksjonane, er det lurt å bruke det vi veit om korleis slike funksjonar ser ut og oppfører seg. Nedst på sida kan du laste ned oppgåvene som Word- og pdf-dokument.
Det er ikkje gitt noka definisjonsmengde, så då må vi gå ut frå at .
Nullpunkta er .
b) Bestem dei stasjonære punkta til og avgjer kva slags stasjonære punkt det er snakk om.
Løysing
Funksjonen er ein variant av den generelle sinusfunksjonen. Vi bruker derfor at ein sinusfunksjon er periodisk slik at toppunkta kjem med mellomrom på éin periode. Det same gjeld botnpunkta.
Ein generell sinusfunksjon har den største verdien sin når argumentet er der . Dette gir oss
Vi vil få nye toppunkt med eit mellomrom på mellom kvart toppunkt. Det betyr at perioden . -koordinatane blir
Toppunkta til er derfor .
Botnpunkta ligg midt mellom toppunkta, det vil seie når
-koordinatane blir
Botnpunkta til er derfor .
Ein generell sinusfunksjon har ingen terrassepunkt.
c) Analyser krummingsforholda og finn vendepunkta til .
Løysing
Vendepunkta til ein sinusfunksjon ligg der grafen kryssar likevektslinja. Derfor vil dei ligge med mellomrom på ein halv periode midt mellom eit topp- og eit botnpunkt. Til dømes er -koordinaten til nokre av vendepunkta ein kvart periode større enn -koordinaten til toppunkta. Dette gir oss at vi får vendepunkt når
-koordinaten til vendepunktet er . Koordinatane til vendepunkta blir
Sidan det første ekstremalpunktet etter vendepunktet i er botnpunktet i , vil grafen vende den hole sida opp i intervallet mellom og det "neste" vendepunktet, det vil seie i intervallet . I intervallet mellom og det neste vendepunktet vil grafen vende den hole sida ned. Slik vil det halde fram.
I denne oppgåva tek vi for oss den same funksjonen som i den førre oppgåva:
No skal du gjere funksjonsanalyse ved å bruke derivasjon, slik du ville gjort det med ein kva som helst annan type funksjon. Kontroller at du får det same svaret som i den førre oppgåva.
a) Finn dei stasjonære punkta til .
Løysing
Vi må først finne . Vi set , som gir og og bruker kjerneregelen når vi deriverer.
Vi finn nullpunkta til den deriverte.
No må vi finne ut kva for nokre av desse -verdiane som gir eit toppunkt, og kva som gir eit botnpunkt. Når , får vi at . Argumentet til sinusfunksjonen blir då
Dette må vere eit toppunkt sidan er den største verdien sinus kan ha. Det neste nullpunktet til den deriverte, som vi får når , må vere eit botnpunkt til funksjonen. må gi eit toppunkt igjen.
Vi får derfor at -koordinaten til toppunkta er
og botnpunkta
Alternativt kan vi ta dobbeltderiverttesten for å sjekke kva slags type stasjonære punkt vi får.
Vi set inn nullpunkta til den deriverte.
Svaret skiftar mellom å vere positivt og negativt. Svaret er negativt når er 0 eller eit partal, og positivt når er eit oddetal. Dette gir same resultat som over.
Vi bruker at -koordinaten til toppunkta får vi når sinus til uttrykket i parentes er 1. Då treng vi ikkje setje inn -koordinaten til toppunkta for å rekne ut -verdien. Dette gir
-koordinaten til botnpunkta får vi tilsvarande når sinus til uttrykket i parentes er lik . Dette gir
Oppsummert får vi dette:
Toppunkt:
Botnpunkt:
Stemmer dette med resultatet i den førre oppgåva?
b) Finn vendepunkta til .
Løysing
Vi finn vendepunkta ved å setje den dobbeltderiverte lik 0.
Nedst har vi skrive om uttrykket for å skrive det første leddet som ein vinkel i første omløp, men vi må ikkje gjere det.
a) Kan vi bruke ein forenkla metode for funksjonsanalysen utan å derivere i dette dømet slik vi kunne med funksjonen i den første oppgåva?
Løysing
Svaret er nei. Her har vi ein kombinasjon av ein sinusfunksjon og ein polynomfunksjon som er avhengig av . Då må vi derivere.
b) Finn eventuelle stasjonære punkt på grafen til funksjonen.
Løysing
Vi deriver . Vi bruker kjerneregelen igjen, her i kortform:
Vi finn eventuelle ekstremalpunkt ved å setje .
For begge løysingane kan vi berre bruke -verdiar på 0 og 1 for at løysingane skal vere innanfor definisjonsmengda. Vi får desse moglege ekstremalpunkta:
Så tek vi ein stikkprøve for å avgjere monotonieigenskapane i staden for dobbeltderiverttesten:
Sidan den deriverte er ein rein cosinusfunksjon, veit vi at han skifter forteikn i nullpunkta. Vi treng derfor ikkje å ta fleire stikkprøvar.
Vi kan no setje opp forteiknslinja for .
Forteiknslinja viser at grafen til stig i intervalla , og og søkk i intervalla og .
-koordinatane til toppunkta blir og , og botnpunkta har -koordinatane og .
-verdien til toppunkta blir
-verdien til botnpunkta blir
Toppunkt: og
Botnpunkt: og
c) Er funksjonen periodisk?
Løysing
Ekstremalpunkta kjem med periodiske mellomrom, men sidan ekstremalverdiene varierer, vil ikkje funksjonen vere periodisk.
d) Finn eventuelle vendepunkt på grafen til funksjonen.
Løysing
Vi finn infleksjonspunkt ved å setje . Først finn vi
Så set vi den andrederiverte lik null.
Vi får løysing når . I stigande rekkefølge får vi desse infleksjonspunkta:
Vendepunkt:
og
e) Kvar stig funksjonen raskast, og kor raskt stig han då?
Løysing
Funksjonen må stige raskast i eit av vendepunkta. Vi må sjå etter eit vendepunkt som kjem etter eit botnpunkt. Det første botnpunktet er . Det næraste vendepunktet etter dette er . Det andre botnpunktet har ikkje noko vendepunkt etter seg. Vi reknar ut
Funksjonen stig raskast når , og då er den momentane vekstfarten 6.
f) Finn vendetangenten i det vendepunktet som har minst -verdi.
Løysing
Vendepunktet med minst -verdi er punktet . Stigingstalet til tangenten er
Vi bruker eittpunktsformelen for å finne vendetangenten:
g) Teikn grafen til inkludert vendetangenten og kontroller at resultata over stemmer.
h) Kontroller resultata med CAS.
Løysing
Vi bruker funksjonen som alt er skriven inn i algebrafeltet i GeoGebra.
I linje 1 finn vi ekstremalpunkta.
I linje 2 bruker vi dobbeltderiverttesten for å finne ut om ekstremalpunkta er minimal- eller maksimalpunkt.
I linje 3 reknar vi ut ekstremalverdiane.
I linje 4 finn vi nullpunkta til den dobbeltderiverte. Ut frå verdiane vi fekk rekna ut i linje 2, ser vi at den dobbeltderiverte skiftar forteikn i desse nullpunkta, som då er infleksjonspunkt.
I linje 5 finn vi -koordinatane til vendepunkta.
I linje 6 reknar vi ut den deriverte i vendepunkta sidan det må vere i eit av desse funksjonen stig raskast.
Til kvar av oppgåvene skal du lage ein modell for svingingane ved å bruke informasjonen i oppgåva.
a) Ein friksjonsfri pendel svingar frå side til side. Avstanden mellom ytterpunkta av svinginga held seg på 80 cm. Pendelen bruker 4 sekund mellom kvart ytterpunkt.
Løysing
Den generelle sinusfunksjonen skriv vi som
Sidan det er tida som er den frie variabelen, kan vi byte ut med dersom vi vil.
Den første opplysninga betyr at
Når pendelen bruker 4 s frå ytterpunkt til ytterpunkt, betyr det at perioden . Det betyr at
Sidan vi ikkje har fleire opplysningar om svinginga, kan vi ikkje rekne oss fram til kva og er. Vi kan derfor setje . Funksjonen blir
b) Besøka på ein nettstad følger eit mønster som gjentek seg veke for veke. Besøkstoppen plar vere torsdagar med cirka 30 000 unike brukarar. Så avtek det jamt til søndag, då det er på det lågaste med cirka 15 000 unike brukarar, før det igjen aukar fram mot neste torsdag.
Løysing
Likevektslinja må ligge midt mellom lågaste og høgaste verdi. Vi får derfor at
Dersom vi lar stå for dagar, betyr det at perioden til funksjonen er ei veke, eller . Då får vi at
Dersom vi lar bety ein måndag, betyr det at funksjonen skal ha toppunkt når . Dette gir
der . Det enklaste er då å velje . Funksjonen som passar best til å beskrive besøksmønsteret blir
c) Det plar vere 4 år mellom kvar gong det er lemenår. Ei kartlegging viser at når det er lemenår, bruker talet på lemen i eit fjellområde å ligge på 50 000. Midt mellom to lemenår kan talet vere nede i 4 000.
Løysing
Vi kan finne og på tilsvarande måte som i den førre oppgåva.
Dersom vi lar stå for talet på år, betyr det at perioden . Det betyr at
Vi kan seie at det skal vere lemenår når . Det betyr at det skal vere eit toppunkt der. Dette gir
Vi treng ikkje ta med "" sidan vi er fornøgde med ein enkelt verdi for . Funksjonen for talet på lemen blir
d) Vi lagar eit tverrsnitt av Sør-Noreg som går omtrent på tvers av dalane Østerdalen, Gudbrandsdalen, Valdres og Hallingdal. Desse fire dalane er tilnærma parallelle. Bruk til dømes karttenesta Norgeskart og finn ein sinusfunksjon som passar nokolunde med høgdeprofilen på dette tverrsnittet. Prøv å vurdere kor godt sinusfunksjonen du kjem fram til, passar.
Tips til oppgåva
Du kan bruke verktøyet "Tegne og måle", som ligg under hovudmenyen på Norgeskart, til å måle avstandar. Du kan finne høgder over havet ved å klikke direkte i kartet (gå ut av "Tegne og måle" først) og sjå øvst til venstre.
Løysing
Vi vel å lage eit tverrsnitt frå Gol i Hallingdal til Koppang i Østerdalen. Dette måler vi til cirka 148 km. Denne avstanden skal svare til 3 periodar i sinusfunksjonen sidan Østerdalen er den tredje dalen etter Hallingdal (vi reknar ikkje med nokre mindre dalføre som òg blir passerte, slik som Gausdal og Imsdalen).
Dalbotnane i dei 4 dalane ligg mellom cirka 200 og 300 meter over havet. Då seier vi at den lågaste verdien til sinusfunksjonen skal vere 250. Tilsvarande måler vi at dei høgaste toppane langs linja ligg rundt 1 250 meter over havet.
Vi får derfor at
Vi lar stå for avstand frå Gol målt i km. Sidan det skal vere 3 periodar mellom Gol og Koppang, betyr det at
Dette gir vidare at
Til slutt må vi bestemme . Vi skal ha eit botnpunkt i Gol, det vil seie for . Dette gir
Funksjonen blir derfor
Ein sinusfunksjon passar eigenleg ikkje så veldig godt. Til dømes er det nesten dobbelt så langt mellom Valdres og Gudbrandsdalen som mellom Valdres og Hallingdal.
Tabellen nedanfor viser den månadlege gjennomsnittstemperaturen i Trondheim frå desember 2021 til desember 2022.
Temperatur i Trondheim
Månad
Gjennomsnittstemperatur, °C
Desember 2021
-2,9
Januar 2022
-0,7
Februar 2022
-1,3
Mars 2022
2,3
April 2022
2,6
Mai 2022
8,1
Juni 2022
12,8
Juli 2022
12,5
August 2022
13,1
September 2022
9,4
Oktober 2022
6,0
November 2022
2,7
Desember 2022
-5,3
Dataa er henta frå Meteorologisk institutt.
a) Forklar kvifor ein sinusfunksjon kan passe godt som modell for desse tala.
Løysing
Sidan temperaturen går opp og ned mellom sommar og vinter, kan vi gå ut frå at ein periodisk funksjon som ein sinusfunksjon passar godt.
b) Finn ein modell for temperaturen ved å finne den sinusfunksjonen som passar best mogleg med tala. Teikn modellen saman med tala i eit koordinatsystem.
Tips til oppgåva
La bety januar 2022.
Løysing
Vi utvidar tabellen med ein kolonne for .
Temperatur i Trondheim
Månad
Gjennomsnittstemperatur, °C
Desember 2021
0
-2,9
Januar 2022
1
-0,7
Februar 2022
2
-1,3
Mars 2022
3
2,3
April 2022
4
2,6
Mai 2022
5
8,1
Juni 2022
6
12,8
Juli 2022
7
12,5
August 2022
8
13,1
September 2022
9
9,4
Oktober 2022
10
6,0
November 2022
11
2,7
Desember 2022
12
-5,3
Vi skriv tala inn i reknearkdelen i GeoGebra, markerer dei og vel regresjonsanalyseverktøyet. Vi vel vidare regresjonsmodellen "sin".
Resultatet blir
Grafisk framstilling av den månadlege gjennomsnittstemperaturen i Trondheim saman med den trigonometriske modellen som passar best med tala
Funksjonen passar sånn nokolunde. Det kan sjå ut som at desember 2021 var veldig kald i Trondheim.
c) Kva er perioden til funksjonen? Kommenter resultatet.
Løysing
Perioden er
Perioden er 12,1 månader, altså omtrent eit år, som vi kunne forvente. Grunnen til at vi ikkje får nøyaktig 12 månader, kan komme av at temperaturane varierer ganske mykje innanfor ein månad. Dersom vi hadde hatt tal for ein tiårsperiode, ville nok perioden på den funksjonen vi hadde komme fram til, vore endå nærare 12.
d) Kva blir høgaste og lågaste gjennomsnittstemperatur i Trondheim etter modellen?
Løysing
Amplituden til sinusfunksjonen er 8,1 og sinusfunksjonen svingar rundt .
Høgaste temperatur blir
Lågaste temperatur blir
e) Kva er gjennomsnittstemperaturen i Trondheim igjennom eit år etter modellen? Korleis stemmer det med målingane?
Løysing
Sidan sinusfunksjonen svingar rundt likevektslinja, blir gjennomsnittstemperaturen igjennom året 5,1° etter modellen.
For å finne den årlege gjennomsnittstemperaturen direkte frå målingane lagar vi ei liste av målingane frå og med januar 2022 til og med desember 2022. Så bruker vi kommandoen gsnitt for å få gjennomsnittet av tala i lista.
Utrekning av gjennomsnittstemperaturen
Målingane gir årleg gjennomsnittstemperatur i Trondheim lik 5,2°, altså svært liten forskjell i forhold til kva modellen gir.
f) Når var temperaturen høgast, og når var han lågast etter modellen? Stemmer resultatet med målingane?
Løysing
Vi bruker verktøyet eller kommandoen "Ekstremalpunkt" og får eit botnpunkt med koordinatane og eit toppunkt med koordinatane , sjå figuren.
Grafisk framstilling av den månadlege gjennomsnittstemperaturen i Trondheim saman med den trigonometriske modellen som passar best med tala. Eit botnpunkt og eit toppunkt er teikna inn.
betyr januar, mens betyr juli. Temperaturen er etter modellen lågast i januar og høgast i juli.
Vi ser at målingane tyder på at det er kaldast i desember og varmast i august, så det stemmer ikkje heilt med modellen. Det vil variere frå år til år kva månad som er kaldast, og kva som er varmast.
Tabellen viser temperaturar målt igjennom eit sommardøgn ved Lindesnes fyr. Temperaturen, , er målt i gradar celsius, og er talet på timar etter midnatt.
TEmperaturar ved lindesnes fyr
0
1
4
7
9
10
12
13
15
17
20
22
24
19
17
15
17
19
21
25
26
27
26
24
22
18
a) Bruk GeoGebra og finn den modellen i form av ein sinusfunksjon som passar best med tala.
Løysing
Vi skriv tala inn i reknearkdelen i GeoGebra, markerer tala, vel regresjonsanalyseverktøyet og regresjonsmodellen "Sin".
Modellen passar godt med målingane. Sinusfunksjonen som passar best med tala, er
1# importerer nødvendige bibliotek2from scipy.optimize import curve_fit
3import numpy as np
4import matplotlib.pyplot as plt
5# lagar funksjonen som beskriv modellen6defmodell(x,A,k,fi,d):7return A*np.sin(k*x + fi)+ d
8# legg inn måledataa i lister9x_verdiar =[0,1,4,7,9,10,12,13,15,17,20,22,24]10y_verdiar =[19,17,15,17,19,21,25,26,27,26,24,22,18]11# bruker metoden curve_fit og legg resultata i to lister12konstantar,kovarians = curve_fit(modell,x_verdiar,y_verdiar)13# hentar ut konstantane frå lista konstantar14A, k, fi, d = konstantar
1516# lagar utskrift av funksjonen17print(f"Funksjonen blir T(x) = {A:.2f}sin({k:.3f}x{fi:+.2f}){d:+.2f}")18# plottar data og modell som ein kontroll19# plottar data20plt.plot(x_verdiar,y_verdiar,'.', label="Målingar")21# plottar modell22x_array = np.linspace(min(x_verdiar),max(x_verdiar),300)23y_array = modell(x_array,A, k, fi, d)24plt.plot(x_array,y_array,"brown", label="Modell")25plt.grid(True)26plt.xlabel("Tid (timar)")27plt.ylabel("Temperatur (°C)")28plt.legend(bbox_to_anchor=(0.9,0.2))29# endrar på skalaen på x-aksen til å passe betre med klokka30plt.xticks(np.arange(min(x_verdiar),max(x_verdiar)+1,3.0))31plt.show()
Programmet gir funksjonen . Dette er ikkje den same funksjonen som vi fekk med regresjon i GeoGebra. Biletet nedanfor viser den grafiske framstillinga som programmet lagar.
Døme på regresjon som gir feil modell
Modellen passar ikkje med målingane. Regresjonen feilar, rett og slett. Heldigvis finst eit triks eller hjelpemiddel vi kan bruke. Det ser vi på i neste oppgåve.
c) Årsaka til at modellen funnen med scipy.optimize passar svært dårleg med måledataa, kan vere at startverdien 1 som regresjonsverktøyet bruker som utgangspunkt for dei fire konstantane, ligg eit stykke frå dei riktige verdiane. Prøv i tilfelle å legge til følgande kodeord til kommandoen "curve_fit":
p0 = [A0,k0,fi0,d0]
der dei fire konstantane i lista har nokolunde riktige verdiar. Til dømes kan vi prøve med verdiane vi fann for modellen på teorisida. Dette gir regresjonsmotoren eit betre utgangspunkt for jobben han skal gjere.
Finn gode verdiar for dei fire konstantane, legg inn kodelinja over med desse verdiane, og køyr programmet på nytt. Blir resultatet betre no?
Løysing
Temperaturen varierer mellom cirka 15 og 25 gradar. Det betyr at amplituden . Perioden er omtrent 24 timar. Då veit vi at . Vi prøver om det går bra å behalde startverdien . Likevektslinja må ligge i nærleiken av 20, så vi får .
Vi legg inn følgande kode i parameterslista til "curve_fit":
p0 = [5,0.25,1,20]
Då blir resultatet
Plottet programmet gir oss, viser at funksjonen passar godt.
Er dette den same funksjonen som vi fekk med GeoGebra? Med GeoGebra fekk vi
Vis at dei to funksjonane er like ved å bruke at
d) Kva var høgaste og lågaste temperatur ifølge modellen?
Løysing
Høgaste temperatur var
Lågaste temperatur var
e) Kor langt er tidsrommet mellom høgaste temperatur denne dagen og høgaste temperatur dagen etter?
Løysing
Oppgåva spør etter perioden . Tidsrommet i timar mellom høgaste temperatur denne dagen og dagen etter er
f) Vil modellen vere gyldig utom det aktuelle døgnet?
Løysing
Vi veit ikkje noko om vêret dagen før eller dagen etter. Dersom vêret blir annleis med til dømes regn, vil modellen mest sannsynleg ikkje passe særleg godt lenger.
Ein annan ting er at perioden ikkje vart nøyaktig 24 timar. Det betyr at tidspunkta for den høgaste temperaturen kjem tidlegare og tidlegare for kvar dag som går. Slik kan det ikkje halde fram særleg lenge.
g) Kva var gjennomsnittstemperaturen dette døgnet?
Løysing
Gjennomsnittstemperaturen blir det same som verdien for , altså 21,3°, sidan tidsrommet er éin periode.
h) Kva var gjennomsnittstemperaturen mellom klokka 06.00 og klokka 18.00?
Løysing
Her må vi rekne ut eit integral. Vi vel å bruke CAS i GeoGebra.
CAS-utrekning av gjennomsnittstemperaturen mellom klokka 06.00 og klokka 18.00
Gjennomsnittstemperaturen i dette tidsrommet var 23,1°.
På teorisida ser vi på svingingar i vasstanden på grunn av tidvatn. Vi fekk dette resultatet:
Tidvatn ved Mandal 3. og 4. november 2022. Måledata frå Kartverket
I denne oppgåva skal du laste ned måledataa frå Kartverket, som er vist på figuren over, og lage ein modell for svingingane i vasstanden. Dataa kan lastast ned nedanfor. Hugs å forandre filnamnet etter nedlastinga.
Du kan også prøve å finne dataa sjølv på Kartverkets side for tidvatn ved Mandal. Vel datoar frå 3. november 2022 til 4. november 2022, vel "Tabell" og "Hvert 10. minutt". Du må laste ned som ei tekstfil, importere tekstfila i Excel, passe på at tala kjem i kvar sin kolonne og eksportere reknearket som ei semikolonseparert csv-fil.
a) Opne datafila med til dømes eit rekneark. Finn i kva kolonnar tidspunkta og måledataa står.
Løysing
De øvste 15 linjene er informasjon om målingane. Tidspunkta står i første kolonne inkludert dato. I andre kolonne er måledataa vi er på jakt etter. Tredje kolonne inneheld det som var forventa nivå (desse tala skal vi ikkje bruke).
b) Du kan lese fila inn i Python og sjå på resultatet av innlesinga med koden nedanfor.
python
1import pandas as pd
23data = pd.read_csv("tidvatn.csv", header =None, skiprows =(range(0,15)), \
4 sep =";", encoding ="latin-1")5data.columns =["Tid","Vasstand","Ikkje i bruk"]6print(data)
Først blir biblioteket "pandas" importert. Det blir brukt til innlesinga av datafila.
I linje 3 blir datafila lesen inn og lagra i dataramma data. Vi såg i oppgåve a) at det ikkje var overskrifter i csv-fila. Derfor skriv vi header = None. Vi ønsker ikkje å importere dei 15 første radene, så vi spesifiserer det med kodeordet skiprows og funksjonen range. Med kodeordet sep skriv vi at csv-fila er semikolonseparert. Kommandoen encoding = latin-1 gjer at vi kan ha til dømes skandinaviske bokstavar i datafila.
I linje 5 blir det laga nye kolonneoverskrifter til dataramma data.
I linje 6 blir dataramma skriven ut til skjermen.
Resultatet blir omtrent som nedanfor, der dei tre første målingane blir viste:
Resultat
Tid
Vasstand
Ikkje i bruk
0
2022-11-03T00:00:00+01:00
105.5
67.3
1
2022-11-03T00:10:00+01:00
105.7
67.3
2
2022-11-03T00:20:00+01:00
105.5
67.2
...
c) Ta utgangspunkt i programmet i førre oppgåve, gjer nødvendige endringar, og finn ein sinusfunksjon som passar godt med måledataa. Plott både måledataa og modellen i same koordinatsystem.
Tips 1
Det er vanskeleg å bruke måledataa for tid direkte slik dei er presenterte i datafila. Vi kan lage -verdiane vi treng, ved å generere ein array med funksjonen "arange" eller "linspace". Sjå utskrifta av dataa for å finne ut kva -verdiane er.
Tips 2
Det kan hende modellen passar svært dårleg med måledataa, at regresjonen rett og slett feilar. Årsaka til det kan vere at startverdiane regresjonsverktøyet bruker som utgangspunkt for dei fire konstantane, ligg eit stykke frå dei riktige verdiane. Dette er tilfelle i førre oppgåve om temperaturen på Lindesnes. Løys i tilfelle problemet på same måte ved å gi startverdiar for konstantane i funksjonen ved hjelp av kodeordet p0.
Løysing
Regresjonen feilar her òg utan å spesifisere startverdiar for regresjonskonstantane med kodeordet p0. Det held å setje nye startverdiar for A og for k. Nedanfor finn du fullstendig kode.
python
1import pandas as pd
2import numpy as np
3from scipy.optimize import curve_fit
4import matplotlib.pyplot as plt
56# lagar funksjonen som beskriv modellen7defmodell(x,A,k,fi,d):8return A*np.sin(k*x + fi)+ d
910data = pd.read_csv("tidvatn.csv", header =None, skiprows =(range(0,15)), \
11 sep =";", encoding ="latin-1")12# lagar overskrifter til kolonnane13data.columns =["Tid","Vasstand","Ikkje i bruk"]14# lagar liste med måleverdiane, som står i kolonnen med overskrift "Vasstand"15vasstand =list(data.Vasstand)16# lagar array med x-verdiane (tidspunkta for målingane)17tid = np.arange(0,48+1/6,1/6)1819# bruker metoden curve_fit og legg resultata i to lister20konstantar,kovarians = curve_fit(modell, tid, vasstand, p0 =[15,2*np.pi/12,1,1])21# hentar ut konstantane frå lista konstantar22A, k, fi, d = konstantar
2324# lagar utskrift av funksjonsuttrykket til modellen25print(f"Funksjonen blir f(x) = {A:.2f}sin({k:.3f}x{fi:+.2f}){d:+.2f}")26# lagar y-verdiar for modellen til plottinga av han27modellverdiar = modell(tid,A,k,fi,d)28plt.plot(tid,vasstand,'.', label ="Målingar")# plottar måledataa29plt.plot(tid,modellverdiar,"brown", label ="Modell")# plottar modellen30plt.grid(True)31plt.xlabel("Tid (timar)")32plt.ylabel("Vasstand (cm)")33plt.legend(bbox_to_anchor=(0.9,0.2))34# endrar på skalaen på x-aksen til å passe betre med klokka35plt.xticks(np.arange(min(tid),max(tid)+1,3.0))36plt.show()
Programmet gir oss funksjonen
og plottet nedanfor.
d) Vurder resultatet i førre deloppgåve.
Løysing
Det finst ikkje ein sinusfunksjon som passar godt til målingane av tidvatnet sidan vasstanden berre delvis følger ei sinuskurve. Vi reknar ut perioden til modellen.
På teorisida har vi at tidsrommet mellom to høgvatn, altså perioden, er 12,4 h. Vi får derfor litt for liten periode. Elles kan vi seie at amplituden og faseforskyvinga passar nokolunde med tala for den 4. november, det vil seie det andre døgnet. Likevektslinja er det vanskeleg å seie noko om, men det ser ut som ho ligg på ein slags gjennomsnittsverdi.
Ein amplitude på 11,3 cm gir ein forskjell mellom høgvatn og lågvatn på 22,6 cm. Det er lite, sidan vi har frå teorisida at forskjellen for Mandal skal vere 35 cm.
e) Sidan vi veit at modellen bør ha periode på 12,4 h, kan vi forandre modellen slik at programmet ikkje bestemmer kva skal vere, men lagar ein sinusfunksjon som har periode 12,4. Endre programmet slik at det berre er og som skal bestemmast. Køyr programmet og vurder om den nye modellen blir betre enn den førre.
Løysing
Vi reknar ut først.
Koden kan sjå slik ut:
python
1import pandas as pd
2import numpy as np
3from scipy.optimize import curve_fit
4import matplotlib.pyplot as plt
56# lagar funksjonen som beskriv modellen7defmodell(x,A,fi,d):8return A*np.sin(0.507*x + fi)+ d
910data = pd.read_csv("tidvatn.csv", header =None, skiprows =(range(0,15)), \
11 sep =";", encoding ="latin-1")12# lagar overskrifter til kolonnane13data.columns =["Tid","Vasstand","Ikkje i bruk"]14# lagar liste med måleverdiane, som står i kolonnen med overskrift "Vasstand"15vasstand =list(data.Vasstand)16# lagar array med x-verdiane (tidspunkta for målingane)17tid = np.arange(0,48+1/6,1/6)1819# bruker metoden curve_fit og legg resultata i to lister20konstantar,kovarians = curve_fit(modell, tid, vasstand, p0 =[15,1,1])21# hentar ut konstantane frå lista konstantar22A, fi, d = konstantar
2324# lagar utskrift av funksjonsuttrykket til modellen25print(f"Funksjonen blir f(x) = {A:.2f}sin(0.507x{fi:+.2f}){d:+.2f}")26# lagar y-verdiar for modellen til plottinga av han27modellverdiar = modell(tid,A,fi,d)28plt.plot(tid,vasstand,'.', label ="Målingar")# plottar måledataa29plt.plot(tid,modellverdiar,"brown", label ="Modell 2")# plottar modellen30plt.grid(True)31plt.xlabel("Tid (timar)")32plt.ylabel("Vasstand (cm)")33plt.legend(bbox_to_anchor=(0.9,0.2))34# endrar på skalaen på x-aksen til å passe betre med klokka35plt.xticks(np.arange(min(tid),max(tid)+1,3.0))36plt.show()
Vi får funksjonen
Grafen til funksjonen har vi kalla "Modell 2" på figuren nedanfor.
Det vart ikkje veldig stor endring. Det kan sjå ut som ein periode på 12,4 timar er litt større enn tida mellom to høgvatn, iallfall for den andre dagen. Perioden til den første modellen passar litt betre enn denne. Den nye modellen fekk elles litt mindre amplitude enn den førre, noko som passar endå dårlegare med opplysningane om nivåforskjellen på tidvatn for Mandal.
Eit lodd heng i ei spiralfjør. Vi dreg loddet litt ned, slepper det og observerer at det svingar opp og ned.
Vi observerer òg at svingeutslaget blir mindre og mindre etter kvart. Vi seier at svinginga er dempa. Ein generell sinusfunksjon passar ikkje så godt til å modellere korleis utslaget til loddet varierer med tida sidan ein slik funksjon svingar like mykje heile tida. Men vi kan multiplisere sinusfunksjonen med faktoren der er ein positiv konstant. Denne faktoren blir mindre og mindre jo større blir.
Nedanfor kan du dra i glidaren og observere korleis grafen til forandrar seg når verdien for blir forandra.
a) Konstanten seier noko om kor stor dempinga er.
Kva skjer dersom du set ?
b = 0
Då får vi , og funksjonen blir ein rein sinusfunksjon utan demping.
b) Med ein posisjonsloggar kan vi logge utslaget til loddet. Vi har gjort det, og viss du ikkje kan gjere forsøket sjølv, kan du laste ned loggfila nedanfor.
Vi må gjere ein regresjon med dataa for å bestemme konstanten . Funksjonen for svingerørsla blir
Det er derfor 5 konstantar som må finnast:
og
Vi vel å bruke Python og metoden curve_fit. For å rekne ut kan vi bruke numpyfunksjonen exp(x).
Løysing
Forslag til programkode:
python
1import pandas as pd
2import numpy as np
3from scipy.optimize import curve_fit
4import matplotlib.pyplot as plt
56# lagar funksjonen som beskriv modellen7defmodell(t,A,b,k,fi,d):8return A*np.exp(b*t)*np.sin(k*t + fi)+ d
910data = pd.read_csv("sving.csv", skiprows =(0,1), sep =";", encoding ="latin-1")1112# lagar liste med måleverdiane, som står i kolonnen med overskrift "Utslag"13utslag =list(data.Utslag)14# lagar liste med t-verdiane, som står i kolonnen med overskrift "Tid"15tid = np.array(list(data.Tid))1617# bruker metoden curve_fit og legg resultata i to lister18konstantar,kovarians = curve_fit(modell, tid, utslag)19# hentar ut konstantane frå lista konstantar20A, b, k, fi, d = konstantar
21# lagar y-verdiar for modellen til plottinga av han22modellverdiar = modell(tid,A,b,k,fi,d)2324# lagar plott av modell og målingar25plt.plot(tid,utslag,'.', label ="Målingar")# plottar måledataa26plt.plot(tid,modellverdiar,"brown", label ="Modell")# plottar modellen27plt.grid(True)28plt.xlabel("Tid (s)")29plt.ylabel("Utslag (cm)")30# skriv ut funksjonen med matematisk teiknsetting31plt.suptitle(f"Modell: $f(x)={A:.2f}e^{{{b:.3f}t}}\sin({{{k:.3f}t{fi:+.2f}}}){d:+.2f}$")32plt.legend(bbox_to_anchor=(0.9,0.2))3334plt.show()
Koden gir utskrifta nedanfor.
Dempa svingingar
Vi får at dempingskonstanten .
Kommentarar til koden:
I dette tilfellet var det ikkje behov for å setje nye startverdiar for regresjonskonstantane med kodeordet p0.
For å få finare utskrift av funksjonsuttrykket har vi lagt det inn som ein undertittel i plottet. Der kan vi få matematisk formatering med LaTeX ved å setje funksjonsuttrykket mellom dollarteikn ($). Sidan sløyfeparentesar blir brukte både av LaTeX for å gruppere ting og av Python til å markere at noko i ein tekststreng er ein variabel, må vi bruke doble sløyfeparentesar der LaTeX vil ha sløyfeparentes. Vi bruker som før enkel sløyfeparentes rundt variablar. Nokre stader blir det derfor tre sløyfeparentesar etter kvarandre.
Koden \sin er Latex-kommandoen som gir "sin" som ikkje står i kursiv.
c) Kor lang tid tek det før utslaget til svinginga er halvert i forhold til det opphavlege utslaget?
Løysing
Vi prøvde å løyse likninga med CAS, men det gjekk ikkje bra.
Vi studerer funksjonen. Det er faktoren i funksjonen som gir dempinga av utslaget. Vi kan bruke at utslaget blir halvert når denne faktoren er 0,5. Dette gir oss likninga
Vi får at svingingane er halverte etter cirka 16 sekund.
d) Kor mange heile svingingar har loddet gjort då?
Løysing
Vi kan sjå på sinusdelen av funksjonen for å svare på dette. Talet på heile svingingar blir kor mange heile periodar sinusdelen har i løpet av dei 16 sekunda.
Vi fekk at . Det betyr at
I løpet av 16 s blir talet på periodar 2,55, så det går berre 2–3 heile svingingar før utslaget er halvert.