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
