Versions Compared

Key

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

Læringsmål:

  • Funksjoner
  • Elementvis operasjoner

Pensum:

  • Kap 2.3
  • Kap 4.4
  • Kap 10.1-10.4


Noen funksjoner er transcendentale og kan derfor ikke integreres analytisk. Men de kan (av og til) integreres nummerisk, altså tilnærmes. 
Nedenfor er Simpsons metode, som dere kanskje har lært om i matematikk 1, forklart kort.

      Hvor

Her er for en i = [0,1,2,...,n],og funksjonen du vil integrere, f(x). n må være et oddetall.


a)

Fordi n må være odedtall, må funksjonen isOdd(n) lages. Returvariabelen er 1 eller 0 om n er oddetall eller ikke.
Digresjon: Er det egentlig nødvendig å lage en egen funksjon for dette?

b)

Skriv funksjonen calcDeltaX(a,b,n)som returnerer steglengden.

c)

Lag simpsons(a,b,n) ved gitt pseudokode:

Code Block
languagenone
linenumberstrue
% Ta inn a, b, n og funksjonen fn.
% Sjekk at n er oddetall, gi feilmelding hvis ikke.
% Gå videre:
% La variabelen y inneha alle funksjonsverdiene til fn fra a til b med steglende deltaX.
% velg odde yer: y1, y3, y5 ... y_(n-1)
	% regn ut 4*summen av disse
% velg partall yer: y2, y4, y6 ... y_(n-2)
	% regn ut 2*summen av disse
% legg sammen de to summene sammen med y_0 og y_n
% gang alt med \deltaX/3 . 


d)

Test funksjonen ved følgende kall:

Code Block
f = @(t) sin(x)
simpsons(0,pi, 14, f)


e)

Lag funksjonen deviation(a,b,n, fn, corr). corr er det analytiske svaret som man finner for hånd. Funksjonen skal returnere feilen mellom det korrekte svaret, og svaret funnet ved hjelp av simpsons metode.

Code Block
f = @(t) sin(x)
deviation(a,b,n,fn, corr)


f)


Mattematisk bonusspørsmål:
Simpsons metode er en annenordens metode. Hva har det med det logaritmiske plottet under å gjøre?

Code Block
languagenone
n =200;
c = 1;
f = @(t) sin(x)
for i = [2:2:n]
	e(c) = simpsons(0,pi,i,f);
	c = c+1;
end
loglog([1:n/2], e-2)

 



Nyttig
Anchor
nyttig
nyttig
:


Du kan få bruk for følgende som ikke er pensum:

Definerer en vanlig (mattematisk) funksjon:

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

 

Slik definerer man 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

 

Kaller 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!