Matematikk Øvingsoppgaver i numerikk leksjon 4 m-ler

Like dokumenter
Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

Matematikk Øvingsoppgaver i numerikk leksjon 2 Funksjoner og plotting

Matematikk Øvingsoppgaver i numerikk leksjon 4 Løsningsforslag

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 34

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 7 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 3 Skript

Matematikk Øvingsoppgaver i numerikk leksjon 5 for-løkker

Matematikk Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 3. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 9. Løsningsforslag

Matematikk Løsningsforslag

Løsningsforslag. Innlevering i BYFE/EMFE 1000 Oppgavesett 1 Innleveringsfrist: 14. september klokka 14:00 Antall oppgaver: 3.

Matematikk Øvingsoppgaver i numerikk leksjon 5. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 3 Funksjoner og plotting

Matematikk Øvingsoppgaver i numerikk leksjon 5 Litt oppsummering undervegs Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 35

Matematikk Øvingsoppgaver i numerikk leksjon 3 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Matematikk Øvingsoppgaver i numerikk leksjon 11 Eulers metode. Løsningsforslag

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

Høgskolen i Oslo og Akershus. sin 2 x cos 2 x = 0, x [0, 2π) 1 cos 2 x cos 2 x = 0 2 cos 2 x = 1 cos 2 x =

Matematikk Øvingsoppgaver i numerikk leksjon 2 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 2 Løsningsforslag

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

Matematikk Øvingsoppgaver i numerikk leksjon 7. Løsningsforslag

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Øvingsforelesning i Matlab TDT4105

Løsningsforslag. Innlevering i BYFE 1000 Oppgavesett 1 Innleveringsfrist: 10. oktober klokka 14:00 Antall oppgaver: 6. Oppgave 1

Matematikk Øvingsoppgaver i numerikk leksjon 3 Funksjoner og plotting

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

Matematikk Øvingsoppgaver i numerikk leksjon 8 Matriser. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 1 Løsningsforslag

For det aktuelle nullpunktet, som skal ligge mellom 0 og, kan vere eit greit utgongspunkt.

Matematikk Øvingsoppgaver i numerikk leksjon 7 Numerisk derivasjon

Matematikk Øvingsoppgaver i numerikk leksjon 1. Løsningsforslag

Kapittel Oktober Institutt for geofag Universitetet i Oslo. GEO En Introduksjon til MatLab. Kapittel 14.

Matematikk Øvingsoppgaver i numerikk leksjon 8. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

Matlab-tips til Oppgave 2

Tall, vektorer og matriser

Matematikk Øvingsoppgaver i numerikk leksjon 8. Løsningsforslag

Øvingsforelesning i Matlab (TDT4105)

Høgskolen i Oslo og Akershus. i=1

Shellscripting I. Innhold

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 40

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Matematikk Eksamensaktuelle numerikk-oppgåver

Øvingsforelesning i Matlab (TDT4105)

Matematikk Øvingsoppgaver i numerikk leksjon 1. Løsningsforslag

Øvingsforelesning 1 Python (TDT4110)

Noen innebygde funksjoner - Vektorisering

Kapittel august Institutt for geofag Universitetet i Oslo. GEO En Introduksjon til MatLab. Kapittel 2.

Noen innebygde funksjoner - Vektorisering

Løsningsforslag. Innlevering i BYFE/EMFE 1000 Oppgavesett 5 Innleveringsfrist: 15. april klokka 14:00 Antall oppgaver: 3.

1. Finn egenverdiene og egenvektorene til matrisen A = 2 1 A =

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 37 og 38

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

TDT4110 Informasjonsteknologi grunnkurs: Uke 41: «Matlab programs» (kapittel 6)

Læringsmål og pensum. Oversikt

16 Programmere TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

Verden. Steg 1: Vinduet. Introduksjon

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide

Læringsmål og pensum. v=nkiu9yen5nc

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Hydrostatikk/Stabilitet enkle fall

KONTROLLSTRUKTURER. MAT1030 Diskret matematikk. Kontrollstrukturer. Kontrollstrukturer. Eksempel (Ubegrenset while-løkke)

Forelesning 2. Flere pseudokoder. Representasjoner av tall. Dag Normann januar 2008 KONTROLLSTRUKTURER. Kontrollstrukturer. Kontrollstrukturer

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

TDT4110 IT Grunnkurs Høst 2014

Matematikk Øvingsoppgaver i numerikk leksjon 8 Numerisk integrasjon

Obligatorisk oppgave MAT-INF1100. Lars Kristian Henriksen UiO

Notat 2, ST Sammensatte uttrykk. 27. januar 2006

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon:

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Norsk informatikkolympiade runde

a) f(x) = 3 cos(2x 1) + 12 LF: Vi benytter (lineær) kjerneregel og får f (x) = (sin(7x + 1)) (sin( x) + x) sin(7x + 1)(sin( x) + x) ( sin(x) + x) 2 =

Løsningsforslag. Innlevering i BYFE 1000 Oppgavesett 4 Innleveringsfrist:??? klokka 14:00 Antall oppgaver: 5, 20 deloppgaver.

Bygg et Hus. Introduksjon. Steg 1: Prøv selv først. Skrevet av: Geir Arne Hjelle

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TMA Kræsjkurs i Matlab. Oppgavesett 1/3

TDT4105 Informasjonsteknologi, grunnkurs MatLab: Filbehandling - load, save, type - fopen, fgetl, feof, fprintf, fclose

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt!

TDT4105 Informasjonsteknologi, grunnkurs

Verden - Del 2. Steg 0: Oppsummering fra introduksjonsoppgaven. Intro

En innføring i MATLAB for STK1100

Læringsmål og pensum. if (be): else (not_to_be):

Løsningsforslag. Oppgave 1 Gitt matrisene ] [ og C = A = 4 1 B = 2 1 3

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

Norsk informatikkolympiade runde

Transkript:

Matematikk 1000 Øvingsoppgaver i numerikk leksjon 4 m-ler I denne øvinga skal vi lære oss å lage m-ler små tekstler som vi bruker i MATLAB-sammenheng. Der nst to typer m-ler: Funksjonsler og skript. Funksjonsler gjør oss i stand til å denere våre egne funksjoner og kalle dem på samme måte som de funsjonene som ligger inne fra før (sin, log etc.). Et skript kan vi se på som et lite program altså en sekvens av kommandoer. Den siste typen, skript, er den viktigste. Det forutsettes at du har gjort de tidligere oppgavesettene. Oppgave 1 Funksjonsler Vi skal nå se hvordan vi kan lage våre egne funksjoner i MATLAB. Disse kan brukes på samme måte som de funksjonene MATLAB har inne fra før. Vi skal ta utgangspunkt i funksjonen f(x) = sin(2x) x 2. Først åpner vi en teksteditor. Det mest naturlige er nok å bruke MATLAB sin egen. Den kan åpnes ved å trykke på New Script-knappen oppe til venstre. Du får da opp et vindu hvor du kan skrive inn tekst. a) Skriv av følge i teksteditoren: function F=FunksjonenMin(x) % Funksjonen f(x)=sin(2x) - x^2. % Funksjonen tar bare skalarer som input. F=sin(2*x)-x^2; Lagre la i en passe mappe og kall den FunksjonenMin.m. (Teksteditoren til MATLAB vil automatisk gi den etternavnet `.m'.) Om du er i den samme mappa som denne la i MATLAB, kan du regne ut funksjoneverdier for denne funksjonen på akkurat samme måte som for de 1

elementære funksjonene vi har sett på før; f(5) kan for eksempel nnes ved å skrive ` FunksjonenMin(5)' i kommandovinduet. Regn ut f(x) for noen x-verdier du velger selv på denne måten. Man kan lage funksjonsler på ere måter. Men to ting kommer man ikke utenom: 1) Den første linja skal ha denne strukturen: function <Navn på ut-variabel>=<navn på funksjon>(<liste med inn-variabler>) I eksempelet over, ser vi at ut-variabelen har fått navnet F og at funksjonen har fått navnet FunksjonenMin. Dette navnet bør være det samme som navnet på la (utenom `.m'). Til sist, inni en parantes, lister man opp de variablene som skal inn. I dette tilfellet er det bare én, x, men det er ingenting i veien for at det kan være ere 1. 2) Til sist i funksjonsla skal ut-variabelen, F i vårt tilfelle, ha blitt tilordna. b) Hva skjer hvis du skriver ` help FunksjonenMin'? c) Hvis vi skal plotte en funksjon gitt ved ei funksjonsl, er det en stor fordel om funksjonsla kan ta vektorer som inn-variabel på en slik måte at den gir som svar en vektor (ut-variabel) som består av funksjonsverdien av hvert element i vektoren vi gir inn. Vi har allerede sett at for eksempel sin funksjonen har denne egenskapen; hvis x=[1 2 3], vil ` sin(x)' gi vektoren [sin 1, sin 2, sin 3] som svar. Med ei ørlita ring kan funksjonen over bli i stand til dette. Gjør denne ringa 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 bruk denne til å plotte grafen til funksjonen. Oppgave 2 Delt forskrift if-satser Vi har sett av funksjoner kan bli gitt med delt forskrift altså at funksjonen er gitt ved ett uttrykk for visse x-verdier og et annet uttrykk for andre x-verdier. Det kan også være snakk om ere enn to ulike uttrykk. I denne oppgava skal vi se hvordan vi kan lage funksjonsler for, eller implementere, slike funksjoner. Men først skal vi se litt på logiske utsagn i MATLAB. a) Som tidligere nevnt, betyr `=' tilordning ikke likhet i MATLAB. Likhet skrives slik: `=='. Større enn og mindre enn, derimot skrives som normalt. 1 Det kan gjerne være ere ut-variable også. 2

`Er ulik', og ikke-strenge ulikheter kan skrives slik: ` =', `<=' og `>='. Forsøk å skrive noen sanne og noen usanne logiske påstander i kommandovinduet, som for eksempel 3 = 2, 1 < 0, 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 `&'. For eksempel kan påstanden x [ 2, 1] skrives slik: x>=-2 & x<=1. I en slik sammenheng, hva betyr 0 og 1? b) Skriv av denne funksjonsla i editoren din, lagre den og kall den `DeltForskrift.m': function F=DeltForskrift(x) % Her bør det stå noe om hvilken funksjon det er snakk om if x<2 F=cos(pi*x)+2; F=x^2-2; 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) Funksjonsla over har en alvorlig mangel: Den tar bare skalarer som variable; vi kan ikke gi vektorer som input. Om vi lar x være en vektor og kaller funksjonen med denne, DeltForkrift(x), vil bare det siste elementet i vektoren bli brukt i if-satsen. Men dette problemet kan løses. En mulig løsning er å lage ei for-løkke som går over alle elementene i x-vektoren. (Dette har vi ikke gått gjennom i dette kurset a.) En annen er å bruke logiske variable. Hva skjer når du skriver? >> x=1:10; >> x>5 Hvordan kan dette brukes til å lage ei funksjonl for funksjonen fra b) som kan ta vektor-input? 3

Litt mer om if-satser: De enkleste if-satsene har denne strukturen if <logisk påstand> <utfør kommandoer> Kommandoen eller kommandoene vil bare bli utført hvis den logiske påstanden er sann. Legg merke til at vi har gjort et lite innhopp i teksten i linja mellom if og. Dette gjør funksjonsla, eller hva det måtte være, mye mer oversiktlig. Så vi anbefaler at du også legger deg til denne vanen. Denne strukturen er også mye brukt: if <logisk påstand> <utfør kommandoer> <utfør andre kommandoer> Vi kjenner denne strukturen igjen fra funksjonsla over. Her blir altså andre kommandoer utført i stedet for kommandoer dersom den logiske påstanden er feil. I eksempelet over er andre kommandoer tilordninga `F=x ˆ 2-2;', mens kommandoer er tilordninga `F=cos(pi*x)+2;'. En tredje vanlig struktur er denne: if <logisk påstand> <utfør kommandoer> if <annen logisk påstand> <utfør andre kommandoer> <utfør et tredje sett av kommandoer> Her kan man bygge på med så mange if-satser man bar vil etter hverandre. 4

Oppgave 3 Hva gjør disse skriptene? Vi så et eksempel på et skript i oppgave 5 i forrige leksjon. Nedenfor har vi gitt to andre eksempler på skript. I begge tilfeller har vi brukt funksjonen input, som vi kan bruke til å gi verdier fra kommandovinduet når vi kjører skriptet. Skriv av eller kopiér disse skriptene i teksteditoren og kjør skriptene. Forstår du hva de gjør? a) Skriptet ABCformel.m: a=input('gi verdien for a: '); b=input('gi verdien for b: '); c=input('gi verdien for c: '); x1=(-b-sqrt(b^2-4*a*c))/(2*a) x2=(-b+sqrt(b^2-4*a*c))/(2*a) b) Skriptet TypeTall.m: if x<0 'Tallet er negativt' 'Tallet er positivt' if round(x)~=x 'Tallet er ikke et heltall' if round(x/2)==x/2 'Tallet er et partall' 'Tallet er et oddetall' Tips: Om du lurer på hva funksjonen round gjør, skriv help round i kommandovinduet. c) Begge skriptene over har en alvorlig mangel: De er ikke kommenterte. Å kommentere et skript eller ei funksjonsl vil si å legge til tekst som forklarer hva det gjør. Dette gjør vi både i starten og underveis i koden. For eksempel kan en kommentert versjon av skriptet fra oppgave a) se slik ut: 1 % Skript som løser likninga a x^2 + b x + c = 0 2 3 % Gir verdiene på a, b og c: 5

4 a=input('gi verdien for a: '); 5 b=input('gi verdien for b: '); 6 c=input('gi verdien for c: '); 7 8 % Regner ut løsningene og skriver dem til skjerm: 9 x1=(-b-sqrt(b^2-4*a*c))/(2*a) 10 x2=(-b+sqrt(b^2-4*a*c))/(2*a) Vi bruker altså prosent-tegnet, %, for å legge til kommentarer. Det som står bak %, blir ignorert av MATLAB, men ikke nødvigvis av en person som leser programmet. Her har vi også lagt til linjenummer for å lettere kunne referere til ulike deler av koden. (Disse er selvsagt ikke med i selve skriptet.) Gjør det samme med skriptet fra oppgave b) altså legg til forklare kommentarer. d) Ekstra: For skriptet i a), klarer du å bruke if-satser til å lage en mer idiotsikker versjon av skriptet? Kanskje du kan sjekke at a er ulik null eller at andregradslikninga har reelle løsninger? Om vi kan unngå å skrive to identiske løsninger til skjerm, er vel også det en fordel... Alle disse justeringene kan gjøres ved hjelp av if-satser av typen beskrevet mellom oppgave 2 og 3. I tillegg får du bruk for kommandoen return, som avslutter skriptet selv om man ikke har kommet til en av det. Litt om forskjellen på funksjonsler og skript: Ei funksjonsl skal, som vi har sett, ha en viss struktur. Den skal for eksempel alltid starte med function. I tillegg skal vi alltid gi (minst) et tall (eller en vektor) inn til ei funksjonsl. Dette gjør vi, som vi har sett, ved å skrive dette tallet eller denne vektoren i parantes etter navnet på funksjonen i kommandoviunduet. ( FunksjonenMin(5).) Der er ikke noen spesiell struktur for skript; et skript er bare ei oppramsing av kommandoer. Og når vi kjører skriptet, skal det ikke stå noe i noen parantes etter navnet på skriptet. I tillegg: Eventuelle variable som blir tilordna i ei funksjonl, vil bare være å nne i funksjonla; de vil ikke dukke opp i minnet til MATLAB. Tilordninger som blir gjort i et skript, derimot, vil også dukke opp i minnet til MATLAB når skriptet blir kjørt. 6