Matlab, Octave (octave.org)

help parancs és doc

>> help rref

Mátrixok kezelése

Változók

Neve: betű, _, szám (számmal nem kezdődhet)

Dinamikus típuskezelés

Majdnem minden mátrix:

Mátrix megadása

>> a = [1 2 3 3;2 4 3 5;3 6 6 8]
a =

   1   2   3   3
   2   4   3   5
   3   6   6   8

>> b = [
1 2 3
4 5 6
]
b =

   1   2   3
   4   5   6

>> c = [1,2;3, 4]
c =

   1   2
   3   4

Sztring (karakterlánc):

>> s = 'Több hűtőházból kértünk színhúst'
s = Több hűtőházból kértünk színhúst
>> s(2:3)
ans = ö

Struktúra:

>> kurzus.nev = 'FelsőbbMat';
>> kurzus(2).nev = 'Torna';

Kifejezések értékének kiírása

Ha nincs értékadás, akkor a kifejezés értéke az ans változóba kerül.

>> s
s = Több hűtőházból kértünk színhúst
>> 1 + 1
ans =  2
>> x = ans
x =  2
>> ++x
ans =  3
>> x
x =  3
>> x = 3*x + 1
x =  10
>> ans
ans =  3

Függvény argumentumát/argumentumait kerek zárójelbe tesszük. Egyes számra számot adó matematikai függvények mátrix argumentum esetén azt annak minden elemére alkalmazzák. Pl. a lebegőpontos számok kerekítése, alsó és felső egészrésze, 0-hoz közelebbi érték kiírása:

>> x = [-1.9 1.9]
x =

  -1.9000   1.9000

>> round(x)
ans =

  -2   2

>> ceil(x)
ans =

  -1   2

>> floor(x)
ans =

  -2   1

>> fix(x)
ans =

  -1   1

Speciális mátrixok

Parancs funkció
eye(n) n × n-es egységmátrix
ones(n), ones(m,n) egyesekből álló mátrix
zeros(n), zeros(m,n) zérusmátrix
rand(n), rand(m,n) (0,1)-en egyenletes eloszlású véletlen számokból
randi(max), randi(max,m,n) egész számokból álló mátrix az [1,max] intervallumból
>> eye(2)
ans =

Diagonal Matrix

   1   0
   0   1

>> ones(2,3)
ans =

   1   1   1
   1   1   1

>> zeros(2,3)
ans =

   0   0   0
   0   0   0

>> rand(2)
ans =

   0.46813   0.46120
   0.40671   0.14030

>> rand(1,3)
ans =

   0.86310   0.92620   0.53375

>> randi(6,1,10)    % 10 kockadobás
ans =

   6   2   6   1   1   1   4   2   1   4

Számtani sorozatok

>> 1:5                % start:end
ans =

   1   2   3   4   5

>> 1:2:5              % start:step:end
ans =

   1   3   5

>> linspace(1,7,10)   % linspace(1,7) = linspace(1,7,100)
ans =

   1.0000   1.6667   2.3333   3.0000   3.6667   4.3333   5.0000   5.6667   6.3333   7.0000

Konstrukciók vektorból*

Parancs funkció
vander(c), vander(c,n) Vandermonde-mátrix n oszloppal (1-ek az utolsó oszlopban)
gallery ("circul",r) ciklikus (circulant) mátrix, r az első sor
toeplitz(c), toeplitz(c,r) Toeplitz-mátrix első oszlop c (opc. első sor r)
hankel(c), hankel(c,r) Hankel-mátrix első oszlop c (opc. utolsó sor r)
any(m) 1, ha van nemnulla elem, 0, ha nincs (mátrix esetén oszloponként)
all(m) 1, ha minden elem nemnulla (mátrix esetén oszloponként)
>> vander([2 1 3 4])
ans =

    8    4    2    1
    1    1    1    1
   27    9    3    1
   64   16    4    1

>> gallery ("circul", [1 2 3])
ans =

   1   2   3
   3   1   2
   2   3   1

>> toeplitz([1 2 3])
ans =

   1   2   3
   2   1   2
   3   2   1

>> toeplitz([1 2 3],[1 6 7 8])
ans =

   1   6   7   8
   2   1   6   7
   3   2   1   6

>> hankel([1 2 3],[3 6 7 8])
ans =

   1   2   3   6
   2   3   6   7
   3   6   7   8

>> any([1 2 0])
ans = 1
>> any([1 2 0; 0 0 0])
ans =

  1  1  0

>> all([1 2 3])
ans = 1
>> all([1 2 3; 4 5 0])
ans =

  1  1  0

Mátrix mátrixból

>> [eye(2) ones(2); zeros(1,3) rand(1)]
ans =

   1.00000   0.00000   1.00000   1.00000
   0.00000   1.00000   1.00000   1.00000
   0.00000   0.00000   0.00000   0.67609

Indexek

>> a = [1 2 3 3;2 4 3 5;3 6 6 8]
a =

   1   2   3   3
   2   4   3   5
   3   6   6   8

>> a(2,4)
ans =  5
>> a(1,:)    % a ':' itt 'wildcard', azaz az összes oszlop
ans =

   1   2   3   3

>> a(:,2)
ans =

   2
   4
   6

>> a([1 3],[2 4])
ans =

   2   3
   6   8

>> a(2:3,2:end)    % a([2 3],[2 3 4])
ans =

   4   3   5
   6   6   8

>> a(4,:) = 1:4    % a(4,:) = [1 2 3 4]
a =

   1   2   3   3
   2   4   3   5
   3   6   6   8
   1   2   3   4

>> a(4,:) = 0
a =

   1   2   3   3
   2   4   3   5
   3   6   6   8
   0   0   0   0

>> a(4,:) = []
a =

   1   2   3   3
   2   4   3   5
   3   6   6   8

>> b = a(:,[1 3 4])
b =

   1   3   3
   2   3   5
   3   6   8

>> b(:,end+1) = 0     % ua. b = [b [0;0;0]]
b =

   1   3   3   0
   2   3   5   0
   3   6   8   0

>> b(:,end) = [7;6;5]  
b =

   1   3   3   7
   2   3   5   6
   3   6   8   5

>> b(:,end:-1:1)
ans =

   7   3   3   1
   6   5   3   2
   5   8   6   3

>> vander([2 4 1 3])(:,end:-1:1)
ans =

    1    2    4    8
    1    4   16   64
    1    1    1    1
    1    3    9   27

Műveletek

Művelet jelentés
* mátrixszorzás
.* elemenkénti szorzás
/ „jobb osztás” X / Y = XY+
\ „bal osztás” X \ Y = X+Y
^ hatványozás (x^y-ban nem lehet mindkettő mátrix)
.^ elemenkénti hatványozás
' adjungált (valós mátrixra = transzponálás)
.' komplex mátrix transzponáltja
>> E = ones(2) + eye(2)
E =

   2   1
   1   2

>> R = rand(2)
R =

   0.36726   0.85526
   0.65364   0.78828

>> E.*R
ans =

   0.73453   0.85526
   0.65364   1.57657

>> E*R
ans =

   1.3882   2.4988
   1.6745   2.4318

>> 2^E
ans =

   5   3
   3   5

>> 2.^E
ans =

   4   2
   2   4

>> E^(1/2)
ans =

   1.36603   0.36603
   0.36603   1.36603

>> ans^2
ans =

   2.00000   1.00000
   1.00000   2.00000

>> R^-1         % ! itt kihagyható a zárójel
ans =

  -2.9247   3.1732
   2.4252  -1.3626

>> c = [1+5i i; 2 3-2i]
c =

   1 + 5i   0 + 1i
   2 + 0i   3 - 2i

>> c'
ans =

   1 - 5i   2 - 0i
   0 - 1i   3 + 2i

>> c.'
ans =

   1 + 5i   2 + 0i
   0 + 1i   3 - 2i

>> A = [1 2; 3 4], b = [0; 2]
A =

   1   2
   3   4

b =

   0
   2

>> A\b  % az Ax=b egyenletrendszer megoldása
ans =

   2.00000
  -1.00000

>> A = [1 2; 2 4], b = [0; 2]
A =

   1   2
   2   4

b =

   0
   2

>> A\b   % az Ax=b min. absz. értékű optimális megoldása
warning: matrix singular to machine precision
ans =

   0.16000
   0.32000

>> pinv(A)*b   % ugyanez pszeudoinverzzel
ans =

   0.16000
   0.32000

Relációk: ==, <, >, <=, >=, ~=

Elemenkénti logikai műveletek: & (és), | (vagy), ~ (nem)

>> (ones(2)+eye(2))^2 == 3*ones(2)+2*eye(2)
ans =

  1  0
  0  1

Függvények

Alapfüggvények

Függvény funkció
det(A) determináns
lambda = eig(A) sajátértékek
[V lambda] = eig(A) sajátvektorok mátrixa, sajátérték
G = givens(x, y) Givens-forgatás, ami (x,y)-t (r,0)-ba viszi
norm(A), norm(A,p) p-norma, alapért: p = 2, "inf", "fro"
null(A) ortonormált bázis a nulltérben
orth(A) ortonormált bázis az oszloptérben
mgorth(x,v) GS: x egységnyi merőleges összetevője a szemiortogonális v-re
pinv(A) pszeudoinverz
rank(A) rang
trace(A) nyom
rref(A) redukált lépcsős alak
[R K] = rref(A) K a bázisoszlopok indexeinek vektora

Mátrixfaktorizációk

Függvény felbontás
[L U P] = lu(A) PLU-felbontás: A = P'*L*U (P*A = L*U)
[Q R] = qr(A,0) QR-felbontás (a 0 nélkül teljes QR-felbontás)
s = svd(A) szinguláris értékek
[U S V] = svd(A) SVD, ahol A = U*S*V'
S = schur(A), S = schur(A,rc) S felső háromszög, rc = 'complex' vagy 'real'
[U S] = schur(A) A = U*S*U', S = U'*A*U, U unitér
>> A = [1 2;3 4;5 6]
A =

   1   2
   3   4
   5   6

>> [L U P] = lu(A)
L =

   1.00000   0.00000
   0.20000   1.00000
   0.60000   0.50000

U =

   5.00000   6.00000
   0.00000   0.80000

P =

Permutation Matrix

   0   0   1
   1   0   0
   0   1   0

>> P'*L*U
ans =

   1.0000   2.0000
   3.0000   4.0000
   5.0000   6.0000

>> A == round(P'*L*U)
ans =

  1  1
  1  1
  1  1

>> A = [1 -1 4; 1 4 -2; 1 4 2; 1 -1 0]
A =

   1  -1   4
   1   4  -2
   1   4   2
   1  -1   0

>> [Q R]=qr(A,0)
Q =

  -0.50000   0.50000  -0.50000
  -0.50000  -0.50000   0.50000
  -0.50000  -0.50000  -0.50000
  -0.50000   0.50000   0.50000

R =

  -2  -3  -2
   0  -5   2
   0   0  -4

Függvény írása

Írjunk függvényt a bázisfelbontás megvalósítására:

function [B R] = bazisf(A)
  [R k] = rref(A);
  r = rank(A);
  R = R(1:r, :);
  B = A(:, k);
end

Vagy az interaktív felületen megadva, vagy egy bazisf.m fájlba írva:

>> a=[1 2 3 4;2 4 3 4;3 6 6 8]
a =

   1   2   3   4
   2   4   3   4
   3   6   6   8

>> [B R] = bazisf(a)
B =

   1   3
   2   3
   3   6

R =

   1.00000   2.00000   0.00000   0.00000
   0.00000   0.00000   1.00000   1.33333