Afsnit ML.1: MATLAB som primitiv lommeregner

Her følger nogle eksempler på, hvordan MATLAB kan bruges som lommeregner.

>> 2*3
 ans=  6

>> 2+3
 ans=  5

>> 2-3
 ans=  -1

>> 6/2
 ans=  3

>> 3^2
 ans=  9

>> 2+3*2
 ans=  8

>> (2+3)*2
 ans=  10

>> log(exp(10))) # log er den naturlige logaritme
 ans=  10

>> sqrt(4))
 ans=  2

ML.1.1 Variable i MATLAB

I MATLAB indføres variable ved at skrive det navn, man ønsker, og tildele variablen en værdi gennem et lighedstegn. Så selvom man umiddelbart læser "x=2" som "x er lig med 2", bør man retteligt læse dette som "x tildeles værdien 2".

>> x=2
 x =  2
 
>> y=3; % semicolon betyder at MATLAB ikke skrier et resultat

>> z=x*y;

>> z
 z =  6

>> 3*z
 ans=  18

Bemærk i eksemplerne ovenfor forskellen mellem at skrive, eller ikke skrive, et semikolon efter MATLAB-ordren: semikolon undertrykker udskrift af resultat.

ML.1.2 Vektorer i MATLAB

En af styrkerne ved et program som MATLAB er, at man kan samle en række tal i en vektor og derefter lave beregninger, der involverer hele vektoren ved simple ordrer. En vektor af længde består af tal med indeks fra 1 til Hvis MATLAB indeholder en vektor kan man få fat i for eksempel det tredje element ved at skrive En vektor kan dannes ved at skrive elementerne inden for de kantede parenteser i kommandoen [] med komma imellem.

>> v=[3,7,2,-1,2,5];

>> v
 v =     3     7     2    -1     2     5

>> v(3)  % udtrække det tredje element
 ans =     2

>> v(end)  % sidste element i v
 ans =     5

>> v([2,4])  % udtrække flere elementer
 ans =     7    -1
 
>> v(1:3)  # udtrækker elementerne 1 til 3
 ans=    3     7     2

>> 2*v
 ans =     6    14     4    -2     4    10

>> 2+v
 ans =     5     9     4     1     4     7

>> min(v)
 ans =    -1

>> max(v)
 ans =     7

>> [m,I]=min(v)
 m =    -1 % m indeholder den mindste værdi i v
 I =     4 % I angiver hvor minimum findes

>> sum(v)   % sum af alle elementerne
 ans =    18

>> cumsum(v)  % løbende sum af de første i elementer
 ans =     3    10    12    11    13    18

>> exp(v)
 ans =   1.0e+03 *
         0.0201  1.0966  0.0074  0.0004  0.0074  0.1484
          
% sætte tal og vektorer sammen i ny vektor
>> [sum(v(1:2)),v(3:5),v(6)]
 ans =    10     2    -1     2     5

Her følger en række specielle vektorer, der kan angives uden at skrive alle tallene i vektoren.

>> w=[3:7];

>> w
 w =     3     4     5     6     7

>> w(2:4)
 ans =     4     5     6

>> w(3:end)
 ans =     5     6     7

>> linspace(3,7,9)  % 9 ækvidistante værdier mellem 3 og 7
 ans =    3.0000    3.5000    4.0000    4.5000    5.0000    5.5000    6.0000    6.5000    7.0000

>> repelem(1,5)) # tallet 1 gentages 5 gange
 ans=  1   1   1   1   1

>> repelem([1,2],[3,4]) # 1 gentages 3 gange og 2 gentages 4 gange
 ans =    1     1     1     2     2     2     2

>> zeros(1,5)
 ans =     0     0     0     0     0

>> ones(1,5)
 ans =     1     1     1     1     1

MATLAB opfatter en vektor af længde som en matrix. Man kan lave en rækkevektor om til en søjlevektor ved at skrive v' (transponering). Beregninger med vektorer opfatter MATLAB som matrixberegninger. Ofte vil vi imidlertid lave elementvis beregninger på en vektor. Dette kan opnås ved at sætte punktum foran en operator.

>> x=[2,-1,3,8,4];

>> y=[4,1,0,3,3];

>> x+y
 ans =     6     0     3    11     7

>> x-y
 ans =    -2    -2     3     5     1

>> x.*y
an  =     8    -1     0    24    12

>> y./x
 ans =    2.0000   -1.0000         0    0.3750    0.7500

>> x.^2
 ans =     4     1     9    64    16

ML.1.3 Nul er ikke altid nul

Enhver elektronisk regnemaskine har en vis regnenøjagtighed. Når vi beregner -værdier, vil vi ofte gøre dette som , hvor selv er en sandsynlighed. Hvis er meget tæt på 1, kan beregningen af give værdien nul. I nogle tilfælde kan beregnes direkte, hvorved at man ikke får nul, men en mere præcis lille værdi. Situationen er vist nedenfor med en sandsynlighed fra en -fordeling med 1 frihedsgrad. Sandsynligheden for at ligge til venstre for et punkt beregnes med chi2cdf, hvorimod sandsynligheden for at ligge til højre for punktet beregnes med chi2cdf(..,'upper').

>> pval1=1-chi2cdf(80,1);
>> pval2=chi2cdf(80,1,'upper');
>> [pval1,pval2]
 ans =   1.0e-18 *         0    0.3744

ForegåendeNæste