Øvingsforelesning i Matlab TDT4105 Øving 6. Tema: funksjoner med vektorer, plotting, while Benjamin A. Bjørnseth 12. oktober 2015
2 Oversikt Funksjoner av vektorer Gjennomgang av øving 5 Plotting Preallokering (Funksjoner som variabler)
3 Konsept 1. Funksjon y = f (x):
3 Konsept 1. Funksjon y = f (x): f (x 1 ) = [f (x 1 )]
3 Konsept 1. Funksjon y = f (x): f (x 1 ) = [f (x 1 )] f ([x 1, x 2 ]) = [f (x 1 ), f (x 2 )]
3 Konsept 1. Funksjon y = f (x): f (x 1 ) = [f (x 1 )] f ([x 1, x 2 ]) = [f (x 1 ), f (x 2 )] f ([x 1,..., x n]) = [f (x 1 ),..., f (x n)]
3 Konsept 1. Funksjon y = f (x): f (x 1 ) = [f (x 1 )] f ([x 1, x 2 ]) = [f (x 1 ), f (x 2 )] f ([x 1,..., x n]) = [f (x 1 ),..., f (x n)] Eksempel: sin(x)
3 Konsept 1. Funksjon y = f (x): f (x 1 ) = [f (x 1 )] f ([x 1, x 2 ]) = [f (x 1 ), f (x 2 )] f ([x 1,..., x n]) = [f (x 1 ),..., f (x n)] Eksempel: sin(x) 2. Funksjon skalar = f (x)
3 Konsept 1. Funksjon y = f (x): f (x 1 ) = [f (x 1 )] f ([x 1, x 2 ]) = [f (x 1 ), f (x 2 )] f ([x 1,..., x n]) = [f (x 1 ),..., f (x n)] Eksempel: sin(x) 2. Funksjon skalar = f (x) Funger uansett hvor lang x er
3 Konsept 1. Funksjon y = f (x): f (x 1 ) = [f (x 1 )] f ([x 1, x 2 ]) = [f (x 1 ), f (x 2 )] f ([x 1,..., x n]) = [f (x 1 ),..., f (x n)] Eksempel: sin(x) 2. Funksjon skalar = f (x) Funger uansett hvor lang x er Eksempel: sum(x)
4 Eksempler 1. Lag en funksjon f(x) som regner ut 2πx
4 Eksempler 1. Lag en funksjon f(x) som regner ut 2πx 2. Lag en funksjon g(x) som regner ut f 2 (x)
4 Eksempler 1. Lag en funksjon f(x) som regner ut 2πx 2. Lag en funksjon g(x) som regner ut f 2 (x) 3. Lag en funksjon h(x, i) som regner ut x i i!
4 Eksempler 1. Lag en funksjon f(x) som regner ut 2πx 2. Lag en funksjon g(x) som regner ut f 2 (x) 3. Lag en funksjon h(x, i) som regner ut x i Estimer e ved å bruke h! i!
4 Eksempler 1. Lag en funksjon f(x) som regner ut 2πx 2. Lag en funksjon g(x) som regner ut f 2 (x) 3. Lag en funksjon h(x, i) som regner ut x i Estimer e ved å bruke h! e(x) = i=0 xi i! i!
5 Oversikt Funksjoner av vektorer Gjennomgang av øving 5 Plotting Preallokering (Funksjoner som variabler)
6 Større oppgaver 1. Les oppgavene nøye (gjerne to-tre ganger). 2. Let etter enkle utgangspunkt Skal jeg lage en funksjon? Skal jeg bare opprette en variabel? Skal jeg sette sammen en løsning i et script? 3. Fyll ut med detaljer for å få løsningen til å stemme.
7 Oversikt Funksjoner av vektorer Gjennomgang av øving 5 Plotting Preallokering (Funksjoner som variabler)
8 Grafikk For visualisering Plottfunksjoner: plot(xverdier, yverdier) Kan være lister, eller matriser (plott per kolonne)
8 Grafikk For visualisering Plottfunksjoner: plot(xverdier, yverdier) plot(x1, y1, x2, y2,..., xn, yn) Flere plots samtidig (kan også være punkt)
8 Grafikk For visualisering Plottfunksjoner: plot(xverdier, yverdier) plot(x1, y1, x2, y2,..., xn, yn) plot(yverdier) Typisk blir x-verdier indekser (med mindre y-verdiene er komplekse)
8 Grafikk For visualisering Plottfunksjoner: plot(xverdier, yverdier) plot(x1, y1, x2, y2,..., xn, yn) plot(yverdier) Merk: for linjeplott må alle punktene være samlet i en matrise.
9 Eksempel: sannsynlighetsfordelinger 1. Plott en standard normalfordeling for x [ 5, 5] f (x) = 1 2π e x2 2
9 Eksempel: sannsynlighetsfordelinger 1. Plott en standard normalfordeling for x [ 5, 5] f (x) = 1 2π e x2 2 1. Plott en standard eksponensialfordeling for x [ 1, 10] { e x if x >= 0 f (x) = 0 if x < 0
10 Oversikt Funksjoner av vektorer Gjennomgang av øving 5 Plotting Preallokering (Funksjoner som variabler)
11 Effektiv matlab Hvis du trenger en vektor, lag hele med en gang Raskere enn å lage vektoren litt og litt Preallokering v = zeros(0, 1, 100); for i = 1:100 v(i) = f(i); end Uten preallokering v = []; for i = 1:100 v(i) = f(i); end
12 Eksempel 1. Lag en funksjon fibonacci(n) som returnerer en liste med fibonaccitallene 1 til n. Lag to varianter: 1.1 En med preallokering. 1.2 En uten preallokering. 2. Lag et script som måler forskjell i tid på regne ut fibonacci(1e6)
13 While-løkker og preallokering Vi vet ikke hvor mange ganger løkken kjører Det er derfor vi bruker while og ikke for Hvis vi skal produsere en vektor: hvordan kan vi vite hvor stor den må være?
13 While-løkker og preallokering Vi vet ikke hvor mange ganger løkken kjører Det er derfor vi bruker while og ikke for Hvis vi skal produsere en vektor: hvordan kan vi vite hvor stor den må være? Løsning: estimer, og øk eventuelt etter hvert. Kutt eventuelt bort ekstra elementer til slutt.
14 While-løkker og preallokering: eksempel Modifiser Newtons metode til å ikke skrive ut midlertidige resultater, men returnere dem i en vektor.
15 Oversikt Funksjoner av vektorer Gjennomgang av øving 5 Plotting Preallokering (Funksjoner som variabler)
16 Konsept Egentlig ikke noe nytt konsept. (Bare litt ny syntaks) Man kan også se på en funksjon som et objekt som kan sendes rundt i koden Ikke bare en fil
16 Konsept Egentlig ikke noe nytt konsept. (Bare litt ny syntaks) Man kan også se på en funksjon som et objekt som kan sendes rundt i koden Ikke bare en fil Eksempler: integrer(funksjon, a, b) finn_nullpunkt(funksjon)
16 Konsept Egentlig ikke noe nytt konsept. (Bare litt ny syntaks) Man kan også se på en funksjon som et objekt som kan sendes rundt i koden Ikke bare en fil Eksempler: integrer(funksjon, a, b) finn_nullpunkt(funksjon) Gitt funksjonen f(x): min_funksjon = @f lager en ny variabel som referer til f(x) finn_nullpunkt(@f) kaller funksjonen finn_nullpunkt med funksjonen f som parameter.
17 Eksempel: numerisk integrering Estimer 100 0 x 2 dx ved å bruke matlabs integral-funksjon
18 Nytt konsept Kan lage funksjoner mens matlab kjører Kan brukes for funksjoner med bare ett uttrykk som regner ut resultatet.
18 Nytt konsept Kan lage funksjoner mens matlab kjører Kan brukes for funksjoner med bare ett uttrykk som regner ut resultatet. Syntaks: min_funksjon = @(<parameterliste>) = <uttrykk>;
18 Nytt konsept Kan lage funksjoner mens matlab kjører Kan brukes for funksjoner med bare ett uttrykk som regner ut resultatet. Syntaks: min_funksjon = @(<parameterliste>) = <uttrykk>; Eksempel: x_i_annen = @(x) x^2; x_i_annen(2) x_i_annen(5)
19 Eksempel: parametriserte sannsynlighetsfordelinger 1. Plott flere normalfordelinger med forskjellige forventningsverdier og varianser Eksempelbilde på wikipedia.
20 Eksempel: generisk newtons metode 1. Modifiser newtons metode til å fungere for vilkårlige funksjoner Nytt navn: finn_nullpunkt(f, df) 2. Bruk den nye newtons metode-funksjonen til å implementere kvadratrot
21 Eksempel: arrayfun Matlabfunksjonen arrayfun kaller en gitt funksjon for hvert element i en gitt liste. Bruk arrayfun til å estimere flere verdier av e x ved hjelp av h(x, i) fra tidligere eksempel.