Avlusning
Det finns en sk avlusare (debugger)
i Matlab men man brukar klara sig med enklare tekniker. Här
några tips.
Man kan skriva ut variablers värden. Säg att man får
ett fel på raden:
r = A * b - x;
Man kan då förvissa sig om att variablerna är
definierade, har rätt storlek, innehåller rimliga
värden etc. genom att skriva ur variablernas värden.
A, b, x
% skriv ut värdena
r = A * b - x;
Om r
beräknas och man vill se
värdet avlägsnar man bara ; sist på raden. Denna
teknik fungerar även i funktioner. Om man kör scriptfiler
behöver man kanske inte lägga utskriftsraden i filen, utan
man kan ge utskriftskommandot direkt i Matlab.
Om man har stora datamängder vill man kanske inte skriva ut allt.
Om Matlab klagar på att matris/vektor-storlekar inte passar ihop
kan man skriva ut dimensionerna, size(A),
t.ex. Om variabler inte är lokala till funktioner kan man ge
kommandot whos.
I bland undrar man om en loop eller if-sats exekveras. Man kan då
lägga in en utskrift, t.ex. så här:
for k = 1:n
k
% skriv ut loopindex k
if a(k) * b(k) > 0
disp('if') % disp ger en utskrift
c(k +
3) = a(k) - 3;
else
disp('else')
c(k + 3) =
a(k+1) - 4;
end
end
Om man får fel i ett komplicerat uttryck kan man
försöka att exekvera delar av det (klipp och klistra). Man
bör också kontrollera att man satt ut parenteser korrekt.
Det är t.ex. skillnad på a = (1:10)'; och a = 1:10'; . Man skall inte
sätt ut för många parenteser heller, koden blir
då oläslig. Helst skall man bara sätta ut
nödvändiga parenteser.
I en Z-lab skall man skicka en egen funktion, func säg, som parameter
till en Matlab-funktion (ode45,
t.e.x). Man kan då testa sin egen funktion genom att anropa den
på lämpligt sätt, så att man ser att den
returnerar ett rimligt resultat. Skickar man en felaktig funktion som
parameter kan man få rätt komplicerade felmeddelanden.
Matlab har inte reserverade funktionsnamn. Man kan t.ex. skriva sin = 2; men sinusfunktionen
är då dold och sin(1.22)
kommer inte att fungera. Om man undrar vilken typ sin har kan man skriva which sin (generellt which variabelnamn). Här
är ett exempel:
>> which sin
built-in % double
method
>> sin(1.22)
ans =
0.9391
>> sin = 2; % använd sin som variabel
>> sin(1.22)
??? Subscript indices must either
be real positive integers or logicals.
>> which sin
sin is a variable.
>> clear sin % ta bort variabeln sin
>> sin(1.22) % sinusfunktionen igen
ans =
0.9391