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
). Det finns lite olika syntax
för detta.
Den äldsta formen är att skicka funktionens namn som en
textsträng, dvs. lsqnonlin('func', ...
I
senare Matlabversioner
kan man skicka 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));
>> quadl(F, 0, 2)
ans = 5.5094e-01
eller kortare
>>
quadl(@(x) sin(exp(x)), 0, 2)
ans = 5.5094e-01