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. Ett enkelt exemepl ges
av:
function resultat =
namn(parameter)
resultat = parameter^2; % kvadrera argumentet
Funktionen kan sedan användas som vilken funktion
(sin
, cos
etc.) som helst, t.ex.
>> namn(3)
ans =
9
>> a = namn(1.22) + 4.56 * namn(-2.33);
>> if namn(d) > 6
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,
nödvändigt när vi använder ode45, till exempel.
Det finns lite olika syntax för detta.
I den senaste Matlabversionen skickar man normalt ett handtag till
funktionen:
ode45(@func,
...
Så @func
är ett handtag till funktionen func.
Om man har enkla funktioner
(detta är inte intressant i labbarna)
kan man ibland skicka ett numeriskt uttryck. Säg att vi
vill beräkna den bestämda integralen av sin(exp(x)) över
intervallet [0, 2]. Vi använder rutinen
quadl
och skapar en så kallad anonym funktion.
Om vi vill approximera integralen av sin(exp(x)) för x i [0, 2]
kan
vi skriva:
>> quadl(@(x) sin(exp(x)), 0, 2)
ans =
5.5094e-01
Vi kan alternativt använda en variabel:
>> F = @(x) sin(exp(x));
>> quadl(F, 0, 2)
ans = 5.5094e-01
Här ett exempel som också visar hur man använder funktionen som skickas som parameter:
function func_ex
my_func(@a_function) % anropa my_func
% Om funktionen är mycket enkel
F = @(x) sin(exp(x));
my_func(F)
% eller
my_func(@(x) sin(exp(x)))
% ------------------------------
function y = a_function(x)
y = sin(exp(x));
% ------------------------------
function my_func(f)
% my_func:s parameter är ett handtag till en funktion
f(2) % här använder vi funktionen, skriver bara ut ett värde