next up previous contents index
Next: Profiler Up: M-filer Previous: Scriptfiler   Contents   Index


Funktionsfiler

Funktionsfiler adskiller sig fra scriptfilerne ved at kunne tage argumenter til filen. Kun variable oprettet lokalt i filen kendes og der er ikke umiddelbar tilgang til Workspaces globale variable. Det er via argumenter at eventulle variabelværdier overføres.

En funktionsfil består i hovedtræk af 4 dele: En funktion definitionslinie, en række hjælpeliner, selve funktionen og en række kommentare. Det allerførste er en definitionslinie, der starter med ordet function, som fortæller MATLAB at m-filen indeholder en funktion og dens specifikationer. Herefter følger en række linier med kommentarer, der alle er markeret med et procenttegn forest. Som hjælp vil disse kommentarlinier umiddelbart efter funktionslinien, blive indlemmet som en hjælpetekst. Hvis der søges om hjælp (med help 'filnavn'), så udskrives disse kommentarlinier til commandvinduet. Ved søgning med lookfor kommandoen vises kun den første hjælpelinie. Derfor skrives der på disse hjælpelinier kort, hvad funktionsfilen kan og gør. Det er ikke et krav med disse hjælpelinier, det er udelukkende en service til brugere af funktionen. Generelt er det sådan, at linier i funktionsfiler, der starter med et procenttegn af MATLAB vil blive opfattet som en kommentar og ikke som en del af funktionen. Det er derfor muligt at fortælle en bruger (evt. sig selv nogle uger efter at funktionsfilen er lavet) hvad de forskellige dele af funktionen gør. Endelig er der specifikationen af selve funktionen.

Eksempel

Der ønskes en funktionsfil til at repræsentere polynomier af 3. grad. I en M-fil med navnet pol3.m oprettes følgende funktionsfil.

      function y = pol3(x)
      global A B C D;
      y = A .* x.^3 + B .* x.^2 + C .* x + D;
Når A, B, C og D er sat som globale vil MATLAB søge ude i Workspace efter parametrene A, B, C og D. Da der fra en funktionsfil ikke er direkte adgang til de størrelser, der er defineret i workspace, er det nødvendigt at definere disse som globale. Bemærk, at de forskellige variable der erklæres globalt er adskilt af mellemrum. I denne fil er der ikke indlagt hjælpetekst til andre brugere.

Alternativt kan programmet skrives uden brug af globalt defineret størrelser, ved i stedet at skrive:

      function y=pol3ny(x)
      A=3;
      B=-2;
      C=1;
      D=7;
      y=A.*x.^3+B.*x.^2+C.*x+D
Hvis man ønsker at variere parametrene A, B, C og D, skal dete gøres i selve M-filen (som så skal gemmes på ny).

Efter ordet function står der et variabelnavn y. Denne variabel vil i filen få tildelt den værdi som er funktionens resultat. Det vil sige y er det resultat der returneres og f.eks. udskrives som svar i Commandvinduet. Når filen anvendes kaldes filen, i dette tilfælde med plo3. Det ses at pol3-funktionen tager et argument x, hvilket er den vektor funktionen opererer på. Det er muligt at lade funktionsfiler returnere mere end kun en værdi. Til sidst følger selve funktionen, der er et generel 3. grads polynomium.

Nu kunne funktionsfilen pol3.m anvendes til at konstruere grafen for $ f(x) = 4x^3 - 2x^2 + x - 3$. På kommandoelinien (eller i en scriptfil) skrives nu:

      t = -5 : 5;
      A = 4; B = -2; C = 1; D = -3;
      y = pol3(t);
      plot(t,y);

Bemærk, at variablen y her ikke er den samme som i pol3-filen.

$ \Box$

De MATLAB funktioner, der er præsenteret her i manualen er for manges vedkommende programmeret som funktionsfiler. Ved at brugeren selv konstruerer funktionsfiler i MATLAB vil denne hele tiden kunne udvide MATLAB til sit eget behov. Ved at kikke på funktionsfilerne for nogle af de indbyggede hjælpefunktioner, kan man få en et indtryk af hvordan mere kompliceret funktionsfiler opbygges.

F.eks. kunne man åbne funktinsfilen for std, der beregner spredningen af elementerne i en vektor eller matrix. Funktionen tager således en vektor eller matrix som input til filen. Indholdet af std-filen listes i Command-vinduet ved at taste type std.m. Herefter listes:

function y = std(x)
%STD  Standard deviation.
%     For vectors, STD(x) returns the standard deviation.
%     For matrices, STD(X) is a row vector containing the
%     standard deviation of each column.
%
%     STD computes the "sample" standard deviation, that
%     is, it is normalized by N-1, where N is the sequence
%     length.
%
%     See also COV, MEAN, MEDIAN.

%     J.N. Little 4-21-85
%     Revised 5-9-88 JNL
%     Copyright (c) 1984-93 by The MathWorks, Inc.


[m,n] = size(x);
if (m == 1) + (n == 1)
    m = max(m,n);
    y = norm(x-sum(x)/m);
else
    avg = sum(x)/m;
    y = zeros(size(avg));
    for i=1:n
        y(i) = norm(x(:,i)-avg(i));
    end
end
if m == 1
    y = 0;
else 
    y = y / sqrt(m-1);
end

Som det fremgår af std-filen er det selvfølgelig muligt at anvende andre funktionsfiler i denne fil. std-filen gør brug af funktionerne size, max, norm, sum, zeros og sqrt. Bemærk, at efter alle kommandoerne står et semikolon, der indikerer at resultatet af denne kommando ikke skal skrives ud i kommando-vinduet. Hvis de ikke stod der, ville alle mellemregningerne blive skrevet ud i kommandovinduet. I filen anvendes den specielle if-sætning flere gange til at kontrollere udførelsen af beregningen.

Som det allersidste i filen, tildeles variablen y resultatværdien. Bemærk, at y både kan være en skalar (hvis x argumentet er en vektor) og en vektor (hvis x er en matrix).

I std-filen anvendes variablene m, n, avg og y som lokale variable. Men for funktioner der f.eks. skal repræsentere matematiske funktioner, hvori der indgår en række parametre kan det være hensigtsmæssigt at erklære disse parametre for globale, således at værdierne kan blive tildelt udenfor funktionsfilen.


next up previous contents index
Next: Profiler Up: M-filer Previous: Scriptfiler   Contents   Index
Bo Jakobsen 2000-08-15