Funktioner i Matlab

Här följer några ord om hur man skriver funktioner i Matlab. Dessutom beskrivs hur globala variabler används och hur man skickar en funktion som parameter.

Den enklaste formen av Matlabfunktion har följande utseende:

function resultat = namn(parameter)

resultat = något uträknat;

namn är funktionens namn (spara filen som namn.m). Du ger funktionen ett värde genom att tilldela variabeln resultat ett värde i funktionen. parameter är den variabel som innehåller det värde för vilket funktionen skall beräknas.

Funktionen  kan sedan användas som vilken funktion (sin, cos etc.) som helst, t.ex.

a = namn(1.22) + 4.56 * namn(-2.33);

if namn(2.56) > 0
  b = c + 1;
end

resultat och även parameter kan givetvis vara en vektor eller en matris.

Funktioner med mer än en parameter

En Matlabfunktion kan ha flera inparametrar och kan även returnera mer än ett resultat.

function [res1, res2, ..., resn] = namn(par1, par2, ..., parm)

res1 = ...

res2 = ...

  etc.

resn = ...

Varje res och varje par kan vara en skalär variabel men även en vektor eller en matris.
Funktionen  anropas t.ex. genom:

[ut, a, z] = func(A, b, x, p);

Globala variabler

I vissa fall måste man skicka variabler till en funktion, där variabeln inte kan vara en parameter. Detta kan t.ex. vara fallet om man använder en rutin i Matlab som kräver en funktion som parameter och där denna funktion har en fix prototyp (parameterlista och typ har bestämts en gång för alla). Man kan då kommunicera mellan funktion och omgivning (huvudprogram eller en annan funktion t.ex.) genom att använda globala variabler. Detta gör man genom att i funktionen använda global-deklarationen (help global). Observera att deklarationen också måste finnas med i huvudprogrammet (eller den funktion, högre upp i anropskedjan, som man vill kommunicera med). Så här kan det se ut:

I main.m
 
global a temp x
a = ...;     % Deklarera först tilldela sedan
temp = ...;
x = ...;
...
y = func(z)

I funktionen func:

function y = func(z)
global a temp x
...
y = ...

Använd inte samma namn på en parameter och en variabel i global-listan. function y = func(a), i exemplet ovan, ger problem.

Funktioner som parametrar

En funktion kan även ta en funktion som parameter (som är fallet med lsqnonlin), man skickar då ett handtag till funktionen: lsqnonlin(@func, ...

Om man har enkla funktioner kan man ibland skicka ett numeriskt uttryck. Rutinen quadl (för integration) klarar detta t.ex.

Om vi vill approximera integralen av sin(exp(x)) för x i [0, 2] kan vi skriva:

>> F = @(x) sin(exp(x));
>> integral(F, 0, 2)
ans = 5.5094e-01

eller kortare

>> integral(@(x) sin(exp(x)), 0, 2)
ans = 5.5094e-01


Back