a)
Code Block | ||
---|---|---|
| ||
function result = simpsons(a,b,n,f |
...
) if mod(n, 2) ~= 0 error('Parameteren n må være et partall, var %d\n', n); end dx = (b-a)/n; |
...
y= |
...
f(a: |
...
dx:b |
...
) |
...
; yodd = 2*sum( |
...
y(3:2: |
...
n- |
...
1)) |
...
; yeven = 4*sum |
...
(y(2:2: |
...
result = h/3 * result;
end
b)
n));
ysum = y(1) + yodd + yeven + y(n+1);
result = dx/3 * ysum;
end |
b)
Code Block | ||
---|---|---|
| ||
function result = |
...
simpsons_error(start, stop, error, fn) |
...
N = |
...
2; % N må være et partall Si = simpsons(start, stop, N, fn); |
...
S2i = simpsons(start, stop, 2*N, fn); |
...
while abs(Si-S2i) >= |
...
N = 2 * N;
Si = simpsons(start, stop, N, fn);
...
error N = 2 * N; Si = S2i; S2i = simpsons(start, stop, 2*N, fn); |
...
end
result = Si;
end
c) Simpsons metode er en andre ordens funksjon, noe som vil si at stigningen på plottet under skal være 2, altså; feilen blir 2 størrelsesordner mindre hvor hver størrelsesorden n øker(se bilder under). Det at Simpsons metode er en andre ordens metode betyr at feilen vil være avhengig av O(h2), dette kan vises ved å utlede metoden, men det vil ikke gjennomgås her.
end
fprintf('Antal ledd: %d\n', N);
result = Si;
end |