Nedenstående er 1 opgave i databehandling og en opgave i Newtons metode med brug af function samt en række mindre øvelser under eksersits (Fra A. P. Ravn) de sidste kan være nyttige hvis man vil gøre erfaringer med de grundlæggende egenskaber af functions if-sætninger og løkker.
På filen dampflow findes dataoptagelser af det dampflow der er gået igennem turbinen på kraftværket i Esbjerg i løbet af en periode på 12 timer. Data er samplet med 20 sekunders mellemrum (samplingtiden h = 20 sek). Dampflowet er målt i kg/sekund. Der er tæt på at være proportionalitet mellem dampflow og den effekt der produceres.
fd(k+1)=(1-h/T)*fd(k)+(h/T)*d(k)
hvor fd betyder filtrerede data og d er de oprindelige data. Konstanten T kaldes tidskonstanten, og angiver hvor 'hårdt' der skal filtreres (prøv for eksempel med T=100 sek og T = 1000 sek). h er den tid der er mellem dataene (samplingstiden).
filtret ønskes opbygget som en funktion, der kaldes med følgende syntaks
filtrerededata = lavpasfilter(inputdata,h,T,startværdi)
'startværdi' bruges til at angive en værdi for første element i de filtrerede data.
resultat = newton(fx_dfxdx,xstart,tolerance)
hvor fx_dfxdx er navnet på en function som returnerer dels en funktionsværdi, dels den afledede af funtionsværdien mht argumentet. xstart er startpunkt for iterationen og tolerance er den ønskede tolerance på resultatet. Syntaksen bliver altså:
[fx,dfxdx] = fx_dfxdx(x)
Afprøv 'newton' med funktionen x-cosx som også skal lægges ind i en function.
Prøv med forskellige startpunkter og tolerancer
function resultat = test(argument)Nøgleordet "function" angiver at vi definerer en ny funktion med navnet "test". Resultatet skal kaldes "resultat" og den skal kaldes med en værdi, som vi kalder "argument".
if argument,Derpå gemmes med redigeringsprogrammets "Save", idet navnet skal være "test" ( med filtype bliver det "test.m").
resultat = 'argument har værdien sand';
end
elseog gentag afprøvningen med forskellige argumentværdier.
resultat = 'argument har værdien falsk';
end
switch x,og afprøv den ændrede funktion. Prøv også test([1 2]).
case 3,
r = 'argument er stort';
case {0, 1 2},
r = 'argument er lille';
end
r = 0;Resultatet er antal iterationer (antal gange løkken gentages). For hver trin udskrives den aktuelle værdi af løkke-variablen "k". Afprøv den med forskellige argumenter: test(0), test(5), test([]), test([ 1 5 7 ]), test([1 ; 5 ; 7]), test([1 2 3 ; 3 2 1]) er gode eksempler.
for k = x,
disp(k);
r = r+1;
end
function r = test(x)4. Vi kunne også skrive det som en while-løkke:
s = size(x);
if s(2),
k =x(:,1);
disp(k);
r = test(x(:,2:s(2))) +1;
else
r = 0;
end
function r = test(x)Afprøv denne version.
r = 0;
s = size(x);
columns = s(2);
while columns,
k =x(:,1);
disp(k);
r = r+1;
x = x(:,2:columns);
columns = columns-1;
end