Vektorräkning
Att skapa vektorer
Utskriftsformat
Noll- och ettvektorer
Vektorer med slumptal
Vektoraddition och liknande operationer
Elementvisa operationer

Här följer några sätt att skapa vektorer

>> v = [1 -3 5 6]     % blank som separator, ger en radvektor
v =
     1    -3     5     6

>> v = [1, -3, 5, 6]  % eller komma
v =
     1    -3     5     6

>> v = [1 -3 5 6];    % ; sist på raden för att slippa utskrift

>> % En kolonnvektor
>> w = [3; 6; 7; -5]  % ; som separator ger radbyte
w =
     3
     6
     7
    -5

>> v_t = v'           % Vi kan transponera en radvektor
v_t =
     1
    -3
     5
     6

>> % Vi kan skriva ut värden och ändra värden
>> v(2)  % värdet hamnar i answer-variabeln
ans =
    -3

>> ans   % skriv ut värden av answervariabeln
ans =
    -3

>> % Minsta index = 1, inte noll som i Java
>> v(2) = 100 * v(2) + v(4)
v =
     1  -294     5     6

>> % Funktioner appliceras normalt elementvis
, inga loopar behövs
>> abs(v)  % Elementvis absolutbelopp. Ej vektorlängd.
ans =
     1   294     5     6

>> sqrt(abs(v))
ans =
    1.0000   17.1464    2.2361    2.4495

>> norm(v) % Vektorlängd
ans =
  294.1054

% Matlab räknar med komplexa tal:
>> [sqrt(-2), exp(sqrt(-1) * pi), 2 * log(sqrt(-1))]
ans =
        0 + 1.4142i  -1.0000 + 0.0000i        0 + 3.1416i


Olika utskriftsformat
Vill man se fler decimaler kan man byta utskriftsformat.  help format  för detaljer. Observera att antalet interna siffror ej ändras. Matlab räknar med 64-bitars flyttal.Jag brukar använda format compact också.

>> format         % default
>> format compact % färre blanka rader
>> s2 = sqrt(2)
s2 =
    1.4142

>> s2^2 - 2       % vi får normalt avrundningsfel
ans =
   4.4409e-16

>> format short e
>> s2             % Skriver man namnet på en variabel får man se dess värde.
s2 =
   1.4142e+00

>> format long
>> s2
s2 =
   1.41421356237310

>> format long e
>> s2
s2 =
     1.414213562373095e+00

Stegvektorer. Noll- och ettvektorer.
Man kan enkelt skapa vektorer med ett givet startvärde och ett givet steg mellan värdena.
Det finns också kommandon för några noll- och ettvektorer.

>> w = 1:4        % start:slut
w =
     1     2     3     4

>> w = -3:2:7     % start:steg:slut
w =
    -3    -1     1     3     5     7

>> w = 7:-2:-3    % negativt steg är OK
w =
     7     5     3     1    -1    -3

>> w = 1:5:8      % slutvärdet behöver ej antas
w =
     1     6
>> w = 0.2:0.3:1  % behöver ej vara heltal
w =
    0.2000    0.5000    0.8000

>> w = 1:-1       % en tom vektor
w =
   Empty matrix: 1-by-0


>> o = ones(1, 4)  % en 1 x 4-matris (radvektor) av ettor
o =
     1     1     1     1

>> o = ones(3, 1)  % en 3 x 1-matris (kolonnvektor) av ettor
o =
     1
     1
     1
>> z = zeros(3, 1) % nollvektor
z =
     0
     0
     0

Vektorer med slumptal

>> rand(1, 5)  % likformigt fördelade slumptal i (0, 1)
ans =
    0.9501    0.2311    0.6068    0.4860    0.8913

>> randn(1, 5) % normalfördelade slumptal
ans =
   -0.4326   -1.6656    0.1253    0.2877   -1.1465



Vektoraddition och liknande operationer

>> a = [1 0 3]  % skapa lite data
a =
     1     0     3

>> b = [2 3 1]
b =
     2     3     1

>> 2 * a        % skalär gånger vektor
ans =
     2     0     6

>> 5 + b        % Otillåtet in lin-algebrakursen
ans =           % men OK i Matlab
     7     8     6

>> a + b        % vanlig vektoraddition
ans =
     3     3     4

>> a - b
ans =
    -1    -3     2

>> c = [-1 3 2 5]
c =
    -1     3     2     5

>> a + c        % ej definierat; fel dimension
??? Error using ==> plus
Matrix dimensions must agree.

>> size(a)      % rad x kolonn
ans =
     1     3

>> size(c)
ans =
     1     4

>> c = [1 2 3]'
c =
     1
     2
     3

>> a + c   % ej definierat, fel orientering, rad + kolonn
??? Error using ==> plus
Matrix dimensions must agree.

>> size(c)
ans =
     3     1

>> a * b   % ej definierat. EJ skalärprodukt
??? Error using ==> mtimes
Inner matrix dimensions must agree.

>> a * b'  % inner- eller skalärprodukt; rad * kolonn
ans =
     5

>> a' * b  % OBS: matris, en sk ytterprodukt; kolonn * rad.
ans =
     2     3     1
     0     0     0
     6     9     3

Elementvisa operationer. Dessa markeras med .

>> a .* b
ans =
     2     0     3

>> a ./ b
ans =
    0.5000         0    3.0000

>> a .\ b  % Inf, ty division med 0
Warning: Divide by zero.
ans =
    2.0000       Inf    0.3333

>> 1 ./ b  % ettan expanderas till en vektor av ettor
ans =
    0.5000    0.3333    1.0000

En del skriver ut punker även där det inte behövs. Det finns två nackdelar med detta. Dels ser det amatörmässigt ut, det verkar som man inte kan kursen i linjär algebra. Man skriver alltså inte 2 .* a, där a är en vektor, utan man skriver 2 * a. Att sätta ut onödiga punkter kan också dölja fel. Om a och b är två radvektorer, så är ju a * b inte definierat, vilket dock a .* b är.

>> 2 .* a  % Skriv inte så här
ans =
     2     0     6

>> 2 * a   % utan så här
ans =
     2     0     6

Notera att a / b är definierat i Matlab (man kan ge det en tolkning i termer av minstakvadratproblem), men det betyder inte samma sak som a ./ b.

>> a / b
ans =
    0.3571

>> a .^ 2  % elementvis kvadrerat
ans =
     1     0     9

>> a.^2 .* b.^3  % ett lite mer komplicerat uttryck
ans =
     8     0     9


Back