Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 2.3 - Scalar and Array Operations on Vectors and Matrices
  • 3.7 - User-Defined Functions That Return a Single Value
  • 3.5 - Scripts to Produce and Customize Simple Plots
  • 5.1 - The for loop

Denne Deler av denne oppgaven krever omhandler bruk av såkalte function-handles i Matlab. Dersom du ikke vet hvordan man bruker disse finner du en forklaring nedenfor:

 

...

Include Page

...

Function handles i Matlab

...

Du har til nå forhåpentligvis blitt godt kjent med funksjoner i matlab, og hvordan de kan ta inn forskjellige variabler som parametere. I denne oppgaven skal vi nå introdusere et nytt konsept: Funksjoner kan i tillegg til vanlige variabler også ta inn andre funksjoner som parametre. Dette gjøres på ganske lik måte som når man tar inn en variabel som parameter, og du får her et eksempel på hvordan dette gjøres:
Vi definerer først en helt vanlig funksjon f(x) som vi skal bruke i neste steg, denne tar bare inn tallet x og opphøyer det i andre:
 
Code Block
function y = f(x)
 y = x^2;
end
 
 
Her kommer det nye, vi definerer nå en ny funksjon g(x) som tar inn et parameter fn. Dette er navnet på en vilkårlig funksjon som skal tas inn, og kan brukes som en hvilken som helst annen type funksjon:
 
Code Block
function y = g(x, fn)
 y = sqrt( fn(x) ); % her kaller vi på funksjonen som er lagret i parameteren fn, sender inn x i denne og tar kvadratroten av resultatet.
end
 
 
Nedenfor kaller vi på funksjonen g(x) med x=2 og sender inn funksjonen f(x) som fn. Forskjellen fra det man er vandt til her er at nå må det stå et krøllalfa foran funksjonen som skal være en parameter.
 
Code Block
x = 2;
y = g(x, @f)) % legg merke til krøllalfa-tegnet forann f!
 
Kan du se hva resultatet av dette vil gi? Det kan kanskje være enklere å se hvis vi omformulerer det til god gammeldags matematikk:

 

LaTeX Formatting
y = g(f( x ) )

 

Vi erstatter deretter x, f(x) og g(x) med deres respektive verdier/definisjoner:

 

LaTeX Formatting
x = 2, \ f(x) = x^2, \ g(x) = \sqrt{x}
\\
y = g(f(x)) = \sqrt{2^2} = 2

 

, svaret blir 2, samme som x!

- forklaring
Function handles i Matlab - forklaring

 

a) 

 

a)

Lag funksjonen f gitt avDenne skal også kunne ta inn lister. Bruk Matlabs innebygde funksjon, exp()

...

 

Code Block
languagetitlenoneEksempel på kjøring
f(0) % skal returnere 1
 
f (1) % skal returnere 0.3679
 
f ([-1.5:0.5:1.5]) % skal returnere [0.1054, 0.3679, 0.7788, 1.0000, 0.7788, 0.3679, 0.1054]



b) Benytt funksjonen fra oppgave a) og plot resultatet -2 til 2 med steglengde 0.01



c)

...

 Gjenta deloppgave b), men med en steglengde 0.5.

...

Ved å ikke lukke plottet fra b) og skrive hold on i konsollen før du gjennomfører dette steget, vil dette plottet tegnes over det forrige. Det vil da bli seende slik ut:

 

 

For å finne arealet under en graf er det vanlig å integrere funksjonen. Men det er ikke alle funksjoner som er enkle å integrere: funksjonen i denne oppgaven er et eksempel på en slik funksjon. Med litt programmering kan vi likevel tilnærme oss arealet av denne funksjonen. 

Du skal nå lage en funksjon som kan integrere numerisk. Se på plottet ovenfor, og legg merke til at de to grafene nesten ligger oppå hverandre. Legg også merke til at den røde linjen og bunnlinjen, sammen danner trapeser med bredde 0.5. Trapes er enkelt å regne ut arealet for (smile)



d) Lag funksjonen trapezoidArea(a, b, w) som returnerer arealet til et trapes.

og b er lengden på de parallelle sidene i trapeset. w (width) er avstanden mellom disse.



e)          Lag Lag funksjonen trapezoidMethod(start, stop, n, fn). 

 Her er start start-punktet for arealet (-2 i eksempelet over), stop er stopp-punktet (2 i eksempelet over), n er antall trapeser (8 i eksempelet over) og fn er    er funksjonen som arealet skal regnes ut for. Se forklaring øverst på siden for . Denne å se hvordan man tar inn funksjoner som parametre (såkalte function handles). Denne funksjonen estimerer integralet numerisk, ved bruk av trapesmetoden (Matematikk 1).

          Se punktene lengre nede på siden for en forklaring på hva som foregår.

Code Block
languagetitlenoneEksempel på kjøring
trapezoidMethod (-2, 2, 8, @f) % skal skrive ut 1.7612
trapezoidMethod (0, 10, 10, @f) % skal skrive ut 0.8863
trapezoidMethod (0, 10, 100, @cos) % skal skrive ut -0.5436
trapezoidMethod (0, pi , 10, @sin ) % skal skrive ut 1.9835
% Hva skjer når du øker n?

...

  • Definerer en vanlig (matematisk) funksjon:

    Code Block
    languagenone
    function y = f(x)
    	y = x;
    end

 

  • Slik defineres en funksjon som benytter seg av en annen funksjon (fn) som parameter. I dette tilfellet opphøyes fn(x) i andre.

    Code Block
    languagenone
    function y = g(x, fn)
    	% her kaller vi på funksjonen som er lagret i parameteren fn
    	y = fn(x) * fn(x);
    end

 

  • Nedenfor kaller vi på funksjonen g med x=2 og sender inn f som fn. Når man står utenfor funksjonen må det stå et krøllalfa foran funksjonen som skal være en parameter.

    Code Block
    languagenone
    disp (g(2, @f)); % legg merke til krøllalfa - tegnet!

...