Matematikk 1000. Øvingsoppgaver i numerikk leksjon 5 Skript



Like dokumenter
Matematikk Øvingsoppgaver i numerikk leksjon 4 m-ler

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 4 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 3. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 2 Funksjoner og plotting

Matematikk Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag

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 5 for-løkker

Matematikk Øvingsoppgaver i numerikk leksjon 3 Funksjoner og plotting

Matematikk Øvingsoppgaver i numerikk leksjon 3 Skript

Matematikk Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 7 Løsningsforslag

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

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 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 11 Eulers metode. Løsningsforslag

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

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

Matematikk Øvingsoppgaver i numerikk leksjon 9. Løsningsforslag

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

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

Utførelse av programmer, metoder og synlighet av variabler i JSP

Matematikk Øvingsoppgaver i numerikk leksjon 7. Løsningsforslag

Matematikk Eksamensaktuelle numerikk-oppgåver

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

Shellscripting I. Innhold

Matematikk Øvingsoppgaver i numerikk leksjon 8. Løsningsforslag

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

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 2 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 8 Numerisk integrasjon

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Matematikk Øvingsoppgaver i numerikk leksjon 7 Numerisk derivasjon

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Matematikk Øvingsoppgaver i numerikk leksjon 1. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 8. Løsningsforslag

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

INF109 - Uke 1b

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver veke 14

Matematikk Øvingsoppgaver i numerikk leksjon 3 Funksjoner og plotting

Spøkelsesjakten. Introduksjon

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

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

Løsningsforslag Prøveeksamen i MAT-INF 1100, Høsten 2003

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

MAT 1120: Obligatorisk oppgave 2, H-09

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Øvingsforelesning i Matlab TDT4105

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Læringsmål og pensum. v=nkiu9yen5nc

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

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

ITGK - H2010, Matlab. Repetisjon

Kanter, kanter, mange mangekanter

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

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

3. Introduksjon til prosjektet Hringr. Scratch fra scratch Enkel programmering for nybegynnere

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

MATLABs brukergrensesnitt

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

Øvingsforelesning TDT4105 Matlab

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

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

Øvingsforelesning 1 Python (TDT4110)

Løsningsforslag AA6516 Matematikk 2MX desember eksamensoppgaver.org

Høgskolen i Oslo og Akershus. i=1

MAT-INF 2360: Obligatorisk oppgave 1

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

TMA Kræsjkurs i Matlab. Oppgavesett 1/3

UNIVERSITETET I OSLO

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Leksjon 3. Kontrollstrukturer

Øvingsforelesning TDT4105

START MED MATLAB. Når du starter Matlab, kommer du inn i kommandovinduet. Dersom du har versjon 6.1, ser du dette :

Tabellen viser en serie med verdier for den uavhengige variabelen, og viser den tilhørende verdien til den avhengige variabelen.

Tall, vektorer og matriser

Løsningsforslag B = 1 3 A + B, AB, BA, AB BA, B 2, B 3 C + D, CD, DC, AC, CB. det(a), det(b)

Oppgaver uke 1: Løsningsforslag

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

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Øving 0 - Xcode TDT4102

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Transkript:

Matematikk 1000 Øvingsoppgaver i numerikk leksjon 5 Skript I denne øvinga skal vi lære oss mer om skript. Et skript kan vi se på som et lite program altså en sekvens av kommandoer. Til sist skal vi se litt på hvordan man kan lage sine egne funksjoner i MATLAB. Dette kan gjøres ved å lage egne funksjonsler. Men ofte kan det også gjøres på en litt mer kompakt måte ved å bruke en spesiell skrivemåte med @. Som vanlig forutsettes det at du har gjort de tidligere leksjonene 1. Oppgave 1 Hva gjør disse skriptene? a) Som i oppgave 5 b) i leksjon 3, kopiér eller skriv av dette skriptet, lagre det med et eller annet navn (husk at de må slutte på `.m') i ei passe mappe og kjør skriptet. Hva gjør dette skriptet? 1 x=-5:1e-:5; y=cos(-pi*x/10).^; 3 z=y.*sin(5*x); 4 5 plot(x,y,'k','linewidth',) 6 hold on 7 plot(x,-y,'k--','linewidth',) 8 plot(x,z,'r') 9 hold off Her har vi lagt til linjenummer for å lettere kunne referere til ulike deler av koden. (Disse er ikke med i selve skriptet.) Skriptet har en alvorlig mangel: Det er ikke kommentert. Å kommentere et skript vil si å legge til tekst som forklarer hva skriptet eller programmet 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... med mulig unntak av leksjon 4; den kan du eventuelt ta igjen senere. Dette gjøres i teksteditoren, som du får opp ved å klikke på new script oppe i venstre hjørne av kommandovinduet eller ved å skrive ` edit' i kommandovinduet 1

1 % Skript som plotter visse funksjoner 3 % Tilordner x-verdier 4 x=-5:1e-:5; 5 % Tilordner funksjonsverdier 6 y=cos(-pi*x/10).^; 7 z=y.*sin(5*x); 8 9 % Plotter funksjonene sammen 10 plot(x,y,'k','linewidth',) 11 hold on 1 plot(x,-y,'k--','linewidth',) 13 plot(x,z,'r') 14 hold off Vi bruker altså prosent-tegnet, %, for å legge til kommentarer. Det som står bak %, blir ignorert av MATLAB, men ikke nødvendigvis av en person som leser skriptet. Kommentarene er ofte helt avgjørende for at skriptet skal kunne bli forstått av andre eller av deg selv på et senere tidspunkt, for den saks skyld 3. b) Endre skriptet over slik at det i tillegg plotter funksjonen f(x) = cos (πx/10) cos(5x). Justér også x-vektoren slik at funksjonene blir plotta i intervallet [ 7, 7]. c) I det neste skriptet har vi brukt en funksjon som heter input. Når skriptet kjøres, vil denne kommandoen gjøre at det stopper opp og venter på at brukeren (du) gir en tallverdi fra kommandovinduet. Skriv av eller kopiér skriptet nedenfor i teksteditoren, lagre det i ei passe mappe med et passe navn (med.m til slutt) og kjør det. (Pass på at du er i samme mappe som la ligger i.) 1 a=input('gi verdien for a: '); b=input('gi verdien for b: '); 3 c=input('gi verdien for c: '); 4 5 x1=(-b-sqrt(b^-4*a*c))/(*a) 6 x=(-b+sqrt(b^-4*a*c))/(*a) Prøv å kjøre skriptet for ulike verdier av a, b og c. Forstår du hva skriptet gjør? Kommentér skriptet 4. d) La oss anta at én Euro er verd 9.00 norske kroner, ett britisk pund er verd 1.81 kroner, og 100 svenske kroner er verd 95.30 norske. Lag et lite skript som leser inn ett beløp i norske kroner og returnerer (til kommandovinduet) tilsvarende beløp i euro, britiske pund og svenske kroner. 3 Her snakker jeg av bitter erfaring. 4 Ikke muntlig; legg till kommentarer i selve la.

Oppgave Logiske variable, if-satser a) Som tidligere nevnt, betyr `=' tilordning ikke likhet i MATLAB. Likhet skrives slik: `=='. Større enn og mindre enn, derimot skrives som normalt. `Er ulik', og ikke-strenge ulikheter kan skrives slik: ` =', `<=' og `>=' tilsvarende ` ', ` ' og ` ' i vanlig matematikk-notasjon. Forsøk å skrive noen sanne og noen usanne logiske påstander i kommandovinduet, som for eksempel 3 = (husk å skrive likhet som `==' i MATLAB), 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 ` ' (tasten nest øverst til venstre på tastaturet ditt) og `og' kan skrives som `&'. For eksempel kan påstanden x [, 1] skrives slik i MATLAB: x>=- & x<=1. I denne sammenhengen, hva betyr `0' og `1'? b) I det neste skriptet, som vi kaller `TypeTall.m', introduserer vi if-satser. Skriv av og kjør skriptet: 1 x=input('gi verdien for x: ') 3 if x<0 4 disp('tallet er negativt') 5 else 6 disp('tallet er positivt') 7 end 8 9 if round(x)~=x 10 disp('tallet er ikke et heltall') 11 else 1 if round(x/)==x/ 13 disp('tallet er et partall') 14 else 15 disp('tallet er et oddetall') 16 end 17 end Om du lurer på hva funksjonen round gjør, skriv help round i kommandovinduet. disp-funksjonen gjør at det som står inni parantesen blir skrevet til skjerm uten variabelnavn. Apostroene bruker vi fordi det som skal skrivest til skjerm, er tekst ikke tall. Hva gjør skriptet? Kommentér det. c) For spesielt interesserte: For skriptet i oppgave 1 b), 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 (d.v.s. i kommandovinduet), er vel også det en fordel... Alle disse justeringene kan gjøres ved hjelp av if-satser av typen beskrevet nedenfor. 3

Litt mer om if-satser: De enkleste if-satsene har denne strukturen if <logisk påstand> <utfør kommandoer> end 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 end. Dette gjør koden mye mer oversiktlig. Så vi anbefaler at du også legger deg til denne vanen 5. Denne strukturen er også mye brukt: if <logisk påstand> <utfør kommandoer> else <utfør andre kommandoer> end 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 if-satsen fra og med linje 3 til og med linje 7 i skriptet fra oppgave b) over, for eksempel, er kommandoer `disp('tallet er negativt')', altså å skrive Tallet er negativt til skjerm, mens andre kommandoer her er ` disp('tallet er positivt')'. En tredje vanlig struktur er denne: if <logisk påstand> <utfør kommandoer> elseif <annen logisk påstand> <utfør andre kommandoer> else <utfør et tredje sett av kommandoer> end Her kan man bygge på med så mange elseif-satser man bar vil etter hverandre. Som vi så i oppgave b), kan man godt ha ere if-satser inni hverandre. I slike sammenhenger er det ekstra viktig å holde styr på innhoppene. 5 I Python er det faktisk påkrevd. 4

Oppgave 3 Funksjoner i MATLAB Som vi har sett, har MATLAB de grunnleggende elementære funksjonene innebygd altså funksjoner som sin x, e x, arctan x etc. Men vi kan også denere våre egne funksjoner i MATLAB. Dette er en måte å gjøre det på 6 : Funk=@(x) x^*cos(x); Vi har nå tilordna ein funksjon som heiter Funk og som kan kalles med et argument akkurat som sin(x) og log(x) etc. I kommandovinduet kan vi for eksempel nå skrive >> Funk(0) ans = 0 >> Funk(pi) ans = -9.8696 >> Funk(-3) ans = -8.9099 Funksjonen vil nå leve i minnet til MATLAB til den blir fjerna (clear) eller til MATLAB blir slått av. Man kan denere funksjoner på denne måten både direkte i kommandovinduet og i et skript. a) I kommandolinja i MATLAB: Lag deg en funksjon på denne måten og regn ut funksjonsverdier for noen argumentverdier (x-verdier) du velger selv. b) Man kan også bruke egendenerte funksjoner til å plotte: >> x=-6:1e-:6; >> plot(x,funk(x)) Med Funk denert som over fungerer dette dårlig. Prøv å justere funksjonsuttrykket slik at dette går bra; det er ei veldig lita justering som skal til... 6 I MATLAB-sammenheng kalles funksjoner lagt på denne måten anonyme funksjoner. 5

Man kan også lage funksjoner ved hjelp av egne ler. Funksjonen over kan for eksempel implementeres slik: 1 function F=Funk(x) 3 % Funksjonen f(x)=x^ cos x. 4 % Funksjonen tar bare skalarer som input. 5 6 F=x^*cos(x); Man lagrer denne la og bør gi den det samme navnet som navnet på høgre side i linje 1. Videre skal navnet, som med skript, slutte på.m. Denne funksjons- la skal altså hete Funk.m. Dersom man i kommandovinduet er i den samme mappa som denne la ligger i, kan man kalle den på samme måte som over. Ekstraoppgave Funksjonsler a) Implementér funksjonen f(x) = x cos x på måten beskrevet over altså som ei funksjonl. Som i oppgave 3: Regn ut funksjonsverdien for visse argumentverdier. b) Hva skjer hvis du skriver ` help Funk' i kommandovinduet? I eksempelet over er selve funksjonen gitt ved èi linje. Men slik trenger det ikke være. Dette er ein funksjon gitt med delt forskrift: f(x) = { cos(πx) +, x < x, x. c) Lag ei funksjonsl som implementerer denne. Navnet velger du selv. d) Dersom man løser deloppgave c) ved hjelp av en if-sats, har man ett problem: Funksjonen tar ikke vektor-argument; if-satsen leser ikke vektorer. Klarer du å lage ei implementering av fuksjonen som tar vektor-argument? Hint: Hva får du i kommandovinduet om du skriver >> x=0:10 x = 0 1 3 4 5 6 7 8 9 10 >> x>4 6

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. ( Funk(5).) Et skript, derimot, har ikke noen spesiell struktur; det er bare ei oppramsing av kommandoer. Og når vi kjører skriptet, skal det ikke stå noe i noe argument 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 til forskjell fra tilordninger som blir gjort i et skript. 7