BYFE/EMFE 1000, 2012/2013 Numerikkoppgaver uke 34 I denne øvinga skal vi først og fremst lære oss å lage plott i Octave. I tillegg skal vi lære oss hvordan vi manøvrerer oss omkring i ulike kataloger. Det kan være nyttig å ha heftet Matlab Primer tilgjengelig (det ligger på Fronter). Dette kan leses gjennom eller brukes som en slags oppslagsbok (Matlab og Octave fungerer veldig likt). Funksjonene 'help' og 'lookfor' vil også være nyttige. I tillegg kan man nne mye nyttig literatur og demonstrasjoner på www om man søker. Det forutsettes at man har gjort oppgavesettet for forige uke. Oppgave 1 Å lage et plott a) La vektoren x starte med 0 og så gå i steg på 0.1 opp til 7π. (Utfør denne tilordninga i Octave.) b) La vektoren y bestå, elementvis, av sinusverdiene av vektoren x. (y=sin(x);) c) Plott sinusfunksjonen: plot(x,y). d) Undersøk hva som skjer når du skriver plot(x,y,'r') og plot(x,y,'linewidth',3). Oppgave 2 Å lagre et plott En kan skrive plottet til en l ved hjelp av kommandoen print. Men før det gir mening å gjøre dette, bør vi ha kontroll på hvor den blir plassert. a) Når du starter Octave, vil du i utgangspunktet bli plassert et eller annet sted i l-systemet ditt. Du kan nne ut hvor ved å skrive pwd. Gjør dette. Forsøk så å skrive cd og undersøk hvor du nå er plassert. b) Lag en katalog hvor du vil lagre de lene som har med Octave å gjøre. Forsøk, i Octave, å manøvrere deg fram til denne. Dette gjøres ved kommandoen cd change directory. (Linux-brukere vil nok kjenne igjen en del av disse kommandoene.) Etter cd, på samme kommandolinje med mellomrom mellom, skriver du navnet på katalogen du vil inn i. Du må vere i en 1
katalog rett over. Du kan også bygge på med ere kataloger skilt med skråstrek, / eller \, om du vil gå gjennom ere kataloger. Ei slik remse av kataloger som kommer under hverandre, kaller vi en sti. Å gå opp et nivå, gjøres slik: 'cd..'. For å få oversikt over hvilke ler og kataloger som ligger i den katalogen du selv er i, kan du skrive ls eller dir. Merk at det kan bli litt krøll dersom katalognavnene inneholder mellomrom eller de norske bokstavene æ, ø, å. Dersom stien inneholder kataloger med mellomrom i navnet, må man sette en apostro før og etter stien. Tabulator-tasten, oppe til venstre på tastaturet, kan være svært nyttig når man skal manøvrere mellom kataloger. (Prøv å nn ut hvordan eller spør!) c) Lagre plottet ditt som en bilde-l. Det gjør du ved å skrive for eksempel print -djpg FigurNavn.jpg. Du vil da få en jpg-l med det navnet FigurNavn.jpg. Du kan også velge andre formater som for eksempel pdf eller png. Merk at guren du har skrevet til l, ikke nødvendigvis kommer til å se helt likt ut som Octave-plottet; skriftstørrelser og format kan ha blitt noe endra. Oppgave 3 Flere grafer samtidig a) Lag et plott av grafen til funksjonen f(x) = x 2 + 1. Velg selv hvilket intervall x skal tilhøre og hvor n inndeling du vil ha på den tilsvarende vektoren. b) Lag en vektor med funksjonsverdier for funksjonen g(x) = e x med den samme x-vektoren som i a). (Her kan den innebygde funksjonen exp være nyttig undersøk gjerne hva denne funksjonen gjør ved å skrivce 'help exp'.) Lag et plott av g(x) også. Lag en gur som inneholder både grafen til f og g samtidig. Dette kan gjøres på to måter. Enten slik: plot(x,y,x,z) eller slik: plot(x,y) hold on plot(x,z) hold off Her har vi valgt å kalle funksjonsverdiene henholdsvis y og z. c) Vi kan zoome inn på en mindre del av grafen ved hjelp av funksjonen axis. Forsøk, ved hjelp av denne funksjonen, å avgrense plottet til x- verdier mellom 0 og 1. Hvilke verdier bør i så fall y-aksen være avgrensa til? 2
Oppgave 4 Funksjonsler a) Vi skal her lage ei funksjonsl for funksjonen f(x) = sin(2x) x 2. Det kan gjøres ved å åpne en teksteditor og skrive inn følgende: function F=FunksjonenMin(x) % Funksjonen f(x)=sin(2x) - x^2. % Funksjonen tar bare skalarer som input. F=sin(2*x)-x^2; Der er nok ere mulige teksteditorer tilgjengelig på datamaskina di. Vi vil anbefale editoren Notepad++, som fulgte med da Octave ble installert. Fila skal lagres som ei rein tekstl og navnet skal slutte på '.m'. Den kan for eksempel hete FunksjonenMin.m. b) Om du er i rett katlog, kan du nå regne ut funksjonsverdier for ulike vedier av argumentet x. Du skriver bare navnet på fuksjonsla (uten '.m') etterfulgt av x-verdien inni en parantes på samme måte som vi alt har gjort med sin- og exp-funksjonen: octave-3.2.4.exe:91> FunksjonenMin(0) ans = 0 octave-3.2.4.exe:92> FunksjonenMin(2) ans = -4.7568 Regn ut f(x) for noen verdier av x. Hva skjer hvis du skriver help FunksjonenMin? Alt det som står etter et %-sybmol i m-la vil bli oversett av Octave. Dette bruker vi til å kommentere koden. Dette er helt nødvendig for at den skal være lesbar for andre eller oss selv for den saks skyld. Gjør det til en vane å kommentere koden din allerede frå nå av. c) Hvis vi skal plotte en funksjon, er det en stor fordel om funksjonsla kan ta vektorer som input og regne ut funksjonsverdiene for hvert element. Med ei ørlita endring kan funksjonen over bli i stand til dette. Gjør denne endringa og plott funksjonen. Velg selv hvilket intervall argumentet skal gå over og hvilken steglengde du vil ha. d) Lag ei funksjonsl for en eller annen elementær funksjon du velger selv og plott grafen til funksjonen. 3
Oppgave 5 Delt forskrift if-satser a) Som tidligere nevnt, betyr '=' tilordning, ikke likhet, i Octave. Likhet skrives slik: '=='. Større enn og mindre enn, derimot skrives som normalt. 'Er ulik', og ikke-strenge ulikheter skrives slik: =, <= og >=. Forsøk å skrive noen sanne og noen usanne logiske påstander, som for eksempel 3 = 2 og 1 < 0 og se hva du får til svar. Forsøk gjerne å kombinere med eller og og også. Eller kan skrives som ' ' og og kan skrives som '&'. I en slik sammenheng, hva betyr 0 og 1? b) Skriv av denne funksjonsla og kall den DeltForskrift.m: function F=DeltForskrift(x) % Her bør det stå en forklaring om hva funksjonen gjør if x<2 F=cos(pi*x)+2; else F=x^2-2; end Regn ut noen funksjonverdiene for noen x-verdier du velger selv. Hvilken funksjon er dette ei implementering av? Merk at denne fuksjonsla bare tar skalarer (tall) som input (ikke vektorer). c) Lag ei funksjonsl som implementerer denne funksjonen: 0, 0 t < 10 a(t) = 9.8e 0.2(t 10), 10 t < 30, D a = [0, 40]. 50e 1.2(t 30), 30 t 40 Funksjonen beskriver akselerasjonen nedover for en fallskjermhopper. (a er gitt i m/s 2 og t er gitt i sekund.) Hvilke faser beskriver funksjonen? Hva skjer når t = 10 og når t = 30? (Her kan du nok ha nytte av kommandoen elseif.) Oppgave 6 Flo og fjære Figur 1 er laget slik: x=0:.1:24; y=3.2*sin(pi/6*(x-3)); plot(x,y,'linewidth',3) set(gca,'fontsize',20) xlabel('t [timar]'); ylabel('t [meter]') 4
hold on plot([0 24],[-1-1],'k-') plot([6 18],[3.2 3.2],'ro','linewidth',2) plot([2.39 9.61 14.39 21.61],-ones(1,4),'gd') legend('t(t)','y=-1','flo','t(t)=-1') axis([0 27-4 4]) hold off Utfør disse kommandoene en etter en og forsøk å forstå hva hver enkelt av dem gjør. Figur 1: Figuren viser en modell for o og fjære. De røde sirklene markerer o, og de grønne diamantene markerer tidspunktene da vannstanden var 1m under normalen. (Desverre blir gurforklaringen i øverste høgre hjørne noe sammenklistret med denne skriftsstørrelsen og dette lformatet.) 5