Processing math: 100%

MPZI_predavanje_05

2441 days ago by fresl


Vektori i matrice


Umjesto uvoda: liste


Lista je uređeni skup koji sadrži određeni, konačan broj komponenata koje mogu, ali ne moraju biti istoga tipa.

Komponente liste navode se unutar uglatih zagrada, a međusobno odvajaju zarezima.

       
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
       
       
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
       
<type 'list'>
<type 'list'>

Broj komponenata liste (njezinu „duljinu”) daje funkcija

       
5
5

S listom se može baratati kao sa cjelinom, ali se također može pristupati i baratati pojedinim njezinim komponentama. Komponentama liste pristupa se indeksiranjem. Indeks tražene komponente navodi se unutar uglatih zagrada:

       
2.00000000000000
2.00000000000000
       
Real Field with 53 bits of precision
Real Field with 53 bits of precision
       
'a'
'a'
       
<type 'str'>
<type 'str'>
       
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
       
[1, 2.00000000000000, 3, 3/2, 'zadnji element']
[1, 2.00000000000000, 3, 3/2, 'zadnji element']

Ako lista sadrži n komponenata, raspon je indeksa od 0 do n1:

       
1
1
       
'zadnji element'
'zadnji element'
       
Traceback (click to the left of this block for traceback)
...
IndexError: list index out of range
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_16.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("bFs1XQ=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpk_C6tE/___code___.py", line 3, in <module>
    exec compile(u'l[_sage_const_5 ]
  File "", line 1, in <module>
    
IndexError: list index out of range
       
'zadnji element'
'zadnji element'
       
1
1
       
Traceback (click to the left of this block for traceback)
...
IndexError: list index out of range
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_21.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("bFstNl0="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpsapbYq/___code___.py", line 3, in <module>
    exec compile(u'l[-_sage_const_6 ]
  File "", line 1, in <module>
    
IndexError: list index out of range

Listu komponenata istoga tipa (npr. brojeva koji pripadaju istom skupu brojeva (Z,Q ili R)) nazvat ćemo nizom.

       
       
[2, 1, 4, 3, 4]
[2, 1, 4, 3, 4]
       
[2.00000000000000,
 1.00000000000000,
 4.00000000000000,
 3.00000000000000,
 4.00000000000000]
[2.00000000000000,
 1.00000000000000,
 4.00000000000000,
 3.00000000000000,
 4.00000000000000]

Funkcija srange() oblikuje rastući ili padajući niz brojeva:

  • srange (end)  —  rastući niz  [zero,one,...,k×one]  uz  k×one<end  i  (k+1)×oneend,  pri čemu su ‚zero’ i ‚one’ nula i jedan odgovarajućeg tipa; ako je endzero, prazan niz;
  • srange (start, end)  —  rastući niz  [start, start +1, ..., start +k]  uz  start +k<end  i  start +(k+1)end;  ako je endstart, prazan niz;
  • srange (start, end, step)  —  ako su  end > start  i step > 0,  rastući niz  [start, start + step, ..., start +k× step]  uz  start +k× step < end  i  start +(k+1)× step end;  ako su pak  end < start  i  step < 0,  padajući niz  [start, start |step|, ..., start k× |step|]  uz  start k× |step| > end  i  start (k+1)× |step| end.
       
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
       
[0.000000000000000,
 1.00000000000000,
 2.00000000000000,
 3.00000000000000,
 4.00000000000000]
[0.000000000000000,
 1.00000000000000,
 2.00000000000000,
 3.00000000000000,
 4.00000000000000]
       
[0.000000000000000,
 1.00000000000000,
 2.00000000000000,
 3.00000000000000,
 4.00000000000000,
 5.00000000000000]
[0.000000000000000,
 1.00000000000000,
 2.00000000000000,
 3.00000000000000,
 4.00000000000000,
 5.00000000000000]
       
[1, 2, 3, 4]
[1, 2, 3, 4]
       
[2.10000000000000, 3.10000000000000, 4.10000000000000]
[2.10000000000000, 3.10000000000000, 4.10000000000000]
       
[-5.00000000000000, -4.00000000000000, -3.00000000000000]
[-5.00000000000000, -4.00000000000000, -3.00000000000000]
       
[]
[]
       
[2, 4, 6]
[2, 4, 6]
       
[2, 5/2, 3, 7/2, 4, 9/2, 5, 11/2, 6, 13/2, 7, 15/2]
[2, 5/2, 3, 7/2, 4, 9/2, 5, 11/2, 6, 13/2, 7, 15/2]
       
[-2.00000000000000, -3.00000000000000, -4.00000000000000]
[-2.00000000000000, -3.00000000000000, -4.00000000000000]

Komponenta liste može biti i lista:

       
[1,
 2.00000000000000,
 'a',
 3/2,
 [1,
  2.00000000000000,
  'a',
  3/2,
  [1, 2.00000000000000, 'a', 3/2, 'zadnji element']]]
[1,
 2.00000000000000,
 'a',
 3/2,
 [1,
  2.00000000000000,
  'a',
  3/2,
  [1, 2.00000000000000, 'a', 3/2, 'zadnji element']]]
       
5
5
       
[1,
 2.00000000000000,
 'a',
 3/2,
 [1, 2.00000000000000, 'a', 3/2, 'zadnji element']]
[1,
 2.00000000000000,
 'a',
 3/2,
 [1, 2.00000000000000, 'a', 3/2, 'zadnji element']]
       
5
5
       
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
[1, 2.00000000000000, 'a', 3/2, 'zadnji element']
       
5
5
       
'zadnji element'
'zadnji element'


Vektori


Postoje različite definicije vektora. Za nas će vektori biti nizovi brojeva na kojima su definirane određene algebarske operacije.


Zadavanje vektora

Vektor možemo zadati nizom brojeva:

       
(2.00000000000000, 4.00000000000000, 2.50000000000000, -1.00000000000000,
5.00000000000000)
(2.00000000000000, 4.00000000000000, 2.50000000000000, -1.00000000000000, 5.00000000000000)
       
Vector space of dimension 5 over Real Field with 53 bits of precision
Vector space of dimension 5 over Real Field with 53 bits of precision

Broj komponenata vektora (nazvan i njegovom dimenzijom ili dimenzijom vektorskog prostora kojemu pripada) daju funkcije

       
5
5
       
5
5

Zadamo li vektor listom brojeva koji (oblikom zapisa) pripadaju različitim skupovima brojeva, uzima se da svi brojevi pripadaju najsveubuhvatnijem skupu (ZQR):

       
(2.00000000000000, 4.00000000000000, 2.50000000000000, -1.00000000000000,
5.00000000000000)
(2.00000000000000, 4.00000000000000, 2.50000000000000, -1.00000000000000, 5.00000000000000)
       
Vector space of dimension 5 over Real Field with 53 bits of precision
Vector space of dimension 5 over Real Field with 53 bits of precision
       
(2, 4, 5/2, -1, 5)
(2, 4, 5/2, -1, 5)
       
Vector space of dimension 5 over Rational Field
Vector space of dimension 5 over Rational Field
       
(0.325000000000000, 1.35000000000000, 2.37500000000000, 3.40000000000000)
(0.325000000000000, 1.35000000000000, 2.37500000000000, 3.40000000000000)
       
(-2, -3, -4, -5)
(-2, -3, -4, -5)

Vektor možemo zadati oznakom skupa brojeva kojemu njegove komponente pripadaju (ZZ označava Z, QQ označava Q, a RR označava R) i brojem komponenata:

       
(0, 0, 0, 0)
(0, 0, 0, 0)

Dobiveni nul–vektor naknadno „popunjavamo”:

       
(0, 4, -3, 2)
(0, 4, -3, 2)

Pritom se brojevi koji pripadaju drugim skupovima brojeva „pretvaraju”, ako je moguće (to jest, bez zaokruživanja ili „rezanja”), u brojeve odgovarajućega skupa.

       
Traceback (click to the left of this block for traceback)
...
TypeError: Attempt to coerce non-integral RealNumber to Integer
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_51.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("djZbM10gPSAyLjE="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpnauV0U/___code___.py", line 3, in <module>
    exec compile(u'v6[_sage_const_3 ] = _sage_const_2p1 
  File "", line 1, in <module>
    
  File "sage/modules/free_module_element.pyx", line 1807, in sage.modules.free_module_element.FreeModuleElement.__setitem__ (build/cythonized/sage/modules/free_module_element.c:14111)
  File "sage/structure/parent.pyx", line 920, in sage.structure.parent.Parent.__call__ (build/cythonized/sage/structure/parent.c:9727)
  File "sage/structure/coerce_maps.pyx", line 271, in sage.structure.coerce_maps.NamedConvertMap._call_ (build/cythonized/sage/structure/coerce_maps.c:6016)
  File "sage/rings/real_mpfr.pyx", line 2151, in sage.rings.real_mpfr.RealNumber._integer_ (build/cythonized/sage/rings/real_mpfr.c:17484)
TypeError: Attempt to coerce non-integral RealNumber to Integer
       
(0, 0, 5/2, 137174210/1111111111, 0)
(0, 0, 5/2, 137174210/1111111111, 0)

Vektor možemo zadati oznakom skupa brojeva kojemu njegove komponente pripadaju i nizom komponenata:

       
(0, 4, -3, 2)
(0, 4, -3, 2)
       
Vector space of dimension 4 over Rational Field
Vector space of dimension 4 over Rational Field
       
Rational Field
Rational Field

... usporedite s

       
Integer Ring
Integer Ring

Vektor možemo zadati i kao rezultat određenih aritmetičkih operacija s drugim vektorima.

Primjerice, ako točke u ravnini ili prostoru prikažemo radijus–vektorima, onda je vektor od točke A do točke B  vA,B=rBrA

       
(2.00000000000000, -2.00000000000000, 1.00000000000000)
(2.00000000000000, -2.00000000000000, 1.00000000000000)
       
True
True

U ovom smo primjeru uveli operacije zbrajanja i oduzimanja te uspoređivanja jednakosti vektora. Te se operacije izvode po parovima komponenata: primjerice, ako je c=a+b, onda je ci=ai+bi za i=0,1,,n1.

 

Pri zadavanju vektor možemo „popuniti” slučajnim brojevima:

       
(0.664882731241566, -0.103211598990383, -0.151379680217410, 0.431617750541831,
-0.585912878973818)
(0.664882731241566, -0.103211598990383, -0.151379680217410, 0.431617750541831, -0.585912878973818)
       
(-4.46494715743736, 8.67813348610789, 6.54172669736717, 2.17344194916361,
0.725716525318730)
(-4.46494715743736, 8.67813348610789, 6.54172669736717, 2.17344194916361, 0.725716525318730)

Napokon, možemo zadati i „simbolički” vektor komponente kojega su simboli koji označavaju opće brojeve:

       
(a0,a1,a2)

                                
       
(a0+b0,a1+b1,a2+b2)

                                


Duljina ili (euklidska) norma vektora

Izraz za duljinu (realnog) vektora slijedi iz Pitagorina poučka:  v=v=n1i=0v2i.

       
5
5
       
4*sqrt(2)
4*sqrt(2)
       
5.00000000000000
5.00000000000000
       
5.65685424949238
5.65685424949238
       
|a0|2+|a1|2+|a2|2

                                
       
[a0 is real, a1 is real, a2 is real, b0 is real, b1 is real, b2 is real]
[a0 is real, a1 is real, a2 is real, b0 is real, b1 is real, b2 is real]
       
a20+a21+a22

                                

Jedinični vektor na pravcu i u smislu zadanoga vektora dobivamo „normalizacijom”:

       
(0.600000000000000, 0.800000000000000)
(0.600000000000000, 0.800000000000000)
       
1.00000000000000
1.00000000000000
       
(3.00000000000000, 4.00000000000000)
(3.00000000000000, 4.00000000000000)
       
(a0a20+a21+a22,a1a20+a21+a22,a2a20+a21+a22)

                                

Normalizacija je dijeljenje vektora njegovom duljinom:

       
True
True
       
(a0a20+a21+a22,a1a20+a21+a22,a2a20+a21+a22)

                                


Skalarni umnožak vektora

„Simbolički” nam vektori daju (gotovo) opći izraz za skalarni umnožak dvaju vektora:

       
a0b0+a1b1+a2b2

                                

Općenitije, za vektore s n komponenata (n–dimenzionalne vektore) skalarni je umnožak  s=ab=n1i=0aibi.

       
(-0.721821425853102, 0.334127628908061, 0.00625878883528919, -0.651465136266989,
-0.0394432001459331)
(-0.0141815405107260, -0.461629363612588, 0.870759218843308, 0.459172545641792,
-0.473524934101165)
(-0.721821425853102, 0.334127628908061, 0.00625878883528919, -0.651465136266989, -0.0394432001459331)
(-0.0141815405107260, -0.461629363612588, 0.870759218843308, 0.459172545641792, -0.473524934101165)
       
-0.419014253095592
-0.419014253095592
       
-0.419014253095592
-0.419014253095592
       
True
True

Skalarni umnožak međusobno okomitih vektora jednak je nuli:

       
0
0

Euklidska norma realnih vektora može se definirati pomoću skalarnoga umnoška:

       
sqrt(a0^2 + a1^2 + a2^2) == sqrt(a0^2 + a1^2 + a2^2)
sqrt(a0^2 + a1^2 + a2^2) == sqrt(a0^2 + a1^2 + a2^2)
       
True
True

... funkcija bool() izračunava logičku vrijednost (istina, laž) relacijskoga izraza (jednakost, nejednakost, veće, manje...)

 

Pomoću skalarnoga umnoška može se izračunati kut između dva vektora:  

       ab=abcos(a,b)cos(a,b)=abab

       
a0b0+a1b1+a2b2a20+a21+a22b20+b21+b22

                                
       
-0.343372049386055
-0.343372049386055
  • kut u radijanima:
       
1.92130122293467
1.92130122293467
  • kut u stupnjevima:
       
345.834220128241/pi
345.834220128241/pi
       
110.082451247480
110.082451247480


Primjena u mehanici

Pomoću skalarnoga umnoška definira se (mehanički) rad u razmjerno jednostavnom slučaju sile nepromjenjivoga smjera, smisla djelovanja i veličine i pomaka po pravcu koji može, ali ne mora biti pravac djelovanja sile. Prikažemo li silu vektorom F, a pomak vektorom d, mehanički je rad sile na pomaku

        W=Fd.


Vektorski umnožak vektora

Ponovno, općega ćemo se izraza za komponente vektorskog umnoška dvaju vektora prisjetiti pomoću „simboličkih” vektora:

       
(a2b1+a1b2,a2b0a0b2,a1b0+a0b1)

                                

Taj se izraz može izvesti razvojem determinante  c=a×b=|ıȷka0a1a2b0b1b2|.

Vektorski je umnožak definiran samo u trodimenzionalnomu (i, za nas nevažno, u sedmerodimenzionalnomu) prostoru, a okomit je na oba faktora:

       
-(a2*b1 - a1*b2)*a0 + (a2*b0 - a0*b2)*a1 - (a1*b0 - a0*b1)*a2
-(a2*b1 - a1*b2)*a0 + (a2*b0 - a0*b2)*a1 - (a1*b0 - a0*b1)*a2
       
0
0
       
-(a2*b1 - a1*b2)*b0 + (a2*b0 - a0*b2)*b1 - (a1*b0 - a0*b1)*b2
-(a2*b1 - a1*b2)*b0 + (a2*b0 - a0*b2)*b1 - (a1*b0 - a0*b1)*b2
       
0
0

Posebno, ako su vektori a i b u ravnini xy, vector c=a×b bit će usporedan s osi z:

       
(0,0,a1b0+a0b1)

                                

Za kolinearne vektore poput, primjerice,

       
(Ca0,Ca1,Ca2)

                                

vrijedi

       
(0, 0, 0)
(0, 0, 0)

Vektorski umnožak nije komutativan...

       
       
False
False

... nego antikomutativan:

       
True
True


Primjena u mehanici

Pomoću vektorskoga umnoška definira se moment sile u odnosu na točku. Momenti su, općenito, fizikalne veličine kojima se izražava utjecaj položaja sile na uvjete ravnoteže.

Vektor MF/A momenta sile F  u odnosu na točku A vektor je dobiven kao vektorski umnožak položajnoga vektora rF/A sile F  u odnosu na točku A i vektora F  kojim je prikazana sila:

        MF/A=rF/A×F.

Položajni vektor sile u odnosu na neku točku vektor je čiji je početak u toj točki, a vrh u bilo kojoj točki pravca djelovanja sile.

Moment sile oko osi definira se pomoću oba umnoška. Njegova je vrijednost

        MF/o=eoMF/A=eo(rF/A×F),

pri čemu je eo jedinični vektor kojim je određena os o, dok A sada bilo koja točka osi o.  Vektor momenta oko osi je

        MF/o=MF/oeo=[eo(rF/A×F)]eo.


Matrice


Kao i vektori, matrice se mogu definirati na različite načine. Mi ćemo matrice definirati kao pravokutne ili kvadratne tablice redci i stupci kojih su nizovi brojeva i s kojima se mogu izvoditi određene algebarske operacije.


Zadavanje matrica

Matricu možemo zadati:

  • navođenjem niza čije su komponente nizovi brojeva jednakih duljina:
       
[ 1  2  3  4]
[ 5  6  7  8]
[ 9 10 11 12]
[ 1  2  3  4]
[ 5  6  7  8]
[ 9 10 11 12]
       
Full MatrixSpace of 3 by 4 dense matrices over Integer Ring
Full MatrixSpace of 3 by 4 dense matrices over Integer Ring
  • navođenjem broja redaka r, broja stupaca c i niza koji mora sadržavati r×c brojeva:
       
(11.000000000000012.000000000000013.000000000000014.000000000000015.000000000000016.000000000000017.000000000000018.000000000000019.000000000000020.000000000000021.000000000000022.0000000000000)

                                
       
Full MatrixSpace of 4 by 3 dense matrices over Real Field with 53 bits of
precision
Full MatrixSpace of 4 by 3 dense matrices over Real Field with 53 bits of precision
  • navođenjem oznake skupa brojeva kojem komponente pripadaju, broja redaka i broja stupaca; time dobivamo nul–matricu koju treba kasnije „popuniti”:
       
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
       
[  0 5/4   0   0]
[  0   0 2/5   0]
[  0   0   0   0]
[  0 5/4   0   0]
[  0   0 2/5   0]
[  0   0   0   0]

(Treba napomenuti da nismo naveli sve moguće načine zadavanja matrica.)

 

Neke su posebne matrice:

  • jedinična matrica (budući da je jedinična matrica kvadratna, dovoljno je navesti broj redaka (ili stupaca)):
       
[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]
[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]
  • dijagonalna matrica (u nizu se navode komponente na dijagonali, čime je određen broj redaka i stupaca):
       
[2/5   0   0]
[  0   3   0]
[  0   0 4/3]
[2/5   0   0]
[  0   3   0]
[  0   0 4/3]
  • matrica popunjena jedinicama određenoga tipa:
       
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]

Kao i vektor, matricu možemo pri zadavanju „popuniti” slučajnim brojevima:

       
[   0.630131663745273   -0.376246708498328   -0.611983439358893]
[  -0.320208362639879    0.437056956010163    0.850579433918169]
[-0.00603447886179853    0.636277316679989    0.606433713282279]
[  -0.630904288743029   0.0531661183737404   -0.725247585299158]
[   0.630131663745273   -0.376246708498328   -0.611983439358893]
[  -0.320208362639879    0.437056956010163    0.850579433918169]
[-0.00603447886179853    0.636277316679989    0.606433713282279]
[  -0.630904288743029   0.0531661183737404   -0.725247585299158]
       
[ 2.92806948798616  3.66376721975917  4.68367838402043]
[ 4.64614526013908 0.146030551412419  3.50107130891024]
[0.293552110879814  4.41910394335943  1.67695631243610]
[0.997826030735991  4.17283960523662  3.36153338985163]
[ 2.92806948798616  3.66376721975917  4.68367838402043]
[ 4.64614526013908 0.146030551412419  3.50107130891024]
[0.293552110879814  4.41910394335943  1.67695631243610]
[0.997826030735991  4.17283960523662  3.36153338985163]

Vektor možemo „pretvoriti” u jednorednu ili u jednostupčanu matricu:

       
(2, 3, 4)
(2, 3, 4)
       
[2 3 4]
[2 3 4]
       
(234)

                                
       
[2]
[3]
[4]
[2]
[3]
[4]
       
(234)

                                

 

Pristupanje komponentama matrice

Pojedinim komponentama pristupamo pomoću para indeksa:

       
[11.0000000000000 12.0000000000000 13.0000000000000]
[14.0000000000000 15.0000000000000 16.0000000000000]
[17.0000000000000 18.0000000000000 19.0000000000000]
[20.0000000000000 21.0000000000000 22.0000000000000]
[11.0000000000000 12.0000000000000 13.0000000000000]
[14.0000000000000 15.0000000000000 16.0000000000000]
[17.0000000000000 18.0000000000000 19.0000000000000]
[20.0000000000000 21.0000000000000 22.0000000000000]
       
15.0000000000000
15.0000000000000
       
[11.0000000000000 12.0000000000000 13.0000000000000]
[14.0000000000000 15.0000000000000 16.0000000000000]
[17.0000000000000 18.0000000000000 19.0000000000000]
[20.0000000000000 21.0000000000000 500.000000000000]
[11.0000000000000 12.0000000000000 13.0000000000000]
[14.0000000000000 15.0000000000000 16.0000000000000]
[17.0000000000000 18.0000000000000 19.0000000000000]
[20.0000000000000 21.0000000000000 500.000000000000]

Može se pristupiti i cijelom stupcu ili cijelom retku matrice:

       
[11.0000000000000]
[14.0000000000000]
[17.0000000000000]
[20.0000000000000]
[11.0000000000000]
[14.0000000000000]
[17.0000000000000]
[20.0000000000000]
       
[11.0000000000000 12.0000000000000 13.0000000000000]
[14.0000000000000 15.0000000000000 16.0000000000000]
[2.00000000000000 3.00000000000000 4.00000000000000]
[20.0000000000000 21.0000000000000 500.000000000000]
[11.0000000000000 12.0000000000000 13.0000000000000]
[14.0000000000000 15.0000000000000 16.0000000000000]
[2.00000000000000 3.00000000000000 4.00000000000000]
[20.0000000000000 21.0000000000000 500.000000000000]

(U SageMath-u je postupak indeksiranja pomoću operatora [] poprilično fleksibilan i sofisticiran, ali u detalje ovdje ne možemo ulaziti. Zainteresirane upućujemo na pripadno poglavlje u Reference Manual-u.)

Broj redaka i broj stupaca matrice dobivamo funkcijama .nrows() i .ncols():

       
4
3
4
3
       
1
3
1
3
       
3
1
3
1

 

Neke martrične operacije

Matrice možemo množiti brojem i, ako su istoga tipa (jednakih brojeva redaka i stupaca), zbrajati ili oduzimati:

       
[  2.79004988935548   2.10221129850524   1.76752504178724]
[ -1.68757855399724   1.93465487397255  0.649779764346841]
[-0.939207035609904   3.40148708903697   1.08980872830426]
[  2.17108159718983   1.72380916081380   3.51897978092200]
[  2.79004988935548   2.10221129850524   1.76752504178724]
[ -1.68757855399724   1.93465487397255  0.649779764346841]
[-0.939207035609904   3.40148708903697   1.08980872830426]
[  2.17108159718983   1.72380916081380   3.51897978092200]

Kao i kod vektora, zbrajanje i oduzimanje matrica izvode se po parovima komponenata, dok se pri množenju matrice brojem sve njezine komponente množe tim brojem.

 

Umnožak C=AB dviju matrica A i B definiran je ako (i samo ako) je broj stupaca prve jednak broju redaka druge, jer je opći izraz za komponente umnoška  ci,j=n1k=0ai,kbk,j, gdje je n broj stupaca prve i broj redaka druge matrice.

       
Traceback (click to the left of this block for traceback)
...
IndexError: Number of columns of left must equal number of rows of other.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_125.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("RCAqIEU="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmplRTV4V/___code___.py", line 2, in <module>
    exec compile(u'D * E
  File "", line 1, in <module>
    
  File "sage/structure/element.pyx", line 3676, in sage.structure.element.Matrix.__mul__ (build/cythonized/sage/structure/element.c:23470)
  File "sage/matrix/matrix0.pyx", line 5136, in sage.matrix.matrix0.Matrix._matrix_times_matrix_ (build/cythonized/sage/matrix/matrix0.c:36045)
  File "sage/matrix/matrix_generic_dense.pyx", line 310, in sage.matrix.matrix_generic_dense.Matrix_generic_dense._multiply_classical (build/cythonized/sage/matrix/matrix_generic_dense.c:4158)
IndexError: Number of columns of left must equal number of rows of other.
       
3
4
3
4
       
[29]
[29]
       
[ 4  6  8]
[ 6  9 12]
[ 8 12 16]
[ 4  6  8]
[ 6  9 12]
[ 8 12 16]
       
[-4.84590024394137]
[-4.32123300473758]
[0.922718275626430]
[ 2.11752805590580]
[-4.84590024394137]
[-4.32123300473758]
[0.922718275626430]
[ 2.11752805590580]
       
Full MatrixSpace of 4 by 1 dense matrices over Real Field with 53 bits of
precision
Full MatrixSpace of 4 by 1 dense matrices over Real Field with 53 bits of precision

Vektor se, u stvari, u određenim kontekstima može smatrati jednostupčanom matricom i bez eksplicitne prevorbe, tako da je definirano i množenje matrice i vektora; rezultat je vektor (a ne jednostupčana matrica):

       
(-4.84590024394137, -4.32123300473758, 0.922718275626430, 2.11752805590580)
(-4.84590024394137, -4.32123300473758, 0.922718275626430, 2.11752805590580)
       
Vector space of dimension 4 over Real Field with 53 bits of precision
Vector space of dimension 4 over Real Field with 53 bits of precision

Ako je matrica tipa r×c, njoj transponirana matrica tipa je c×r. Komponente transponirane matrice B=AT su  bi,j=aj,i.

       
[ -0.532053471372643  -0.619998530533777  -0.480449427398689]
[ -0.859500297832003  -0.409579151899626  -0.343373738343674]
[ -0.506833951687727  0.0559534612385029   0.442131448821594]
[-0.0980986811025693   0.524912075560522   0.184747297857342]
[ -0.532053471372643  -0.619998530533777  -0.480449427398689]
[ -0.859500297832003  -0.409579151899626  -0.343373738343674]
[ -0.506833951687727  0.0559534612385029   0.442131448821594]
[-0.0980986811025693   0.524912075560522   0.184747297857342]
       
[ -0.532053471372643  -0.859500297832003  -0.506833951687727
-0.0980986811025693]
[ -0.619998530533777  -0.409579151899626  0.0559534612385029  
0.524912075560522]
[ -0.480449427398689  -0.343373738343674   0.442131448821594  
0.184747297857342]
[ -0.532053471372643  -0.859500297832003  -0.506833951687727 -0.0980986811025693]
[ -0.619998530533777  -0.409579151899626  0.0559534612385029   0.524912075560522]
[ -0.480449427398689  -0.343373738343674   0.442131448821594   0.184747297857342]
       
4
4
4
4
       
[ -2.89512942276003  -6.13439748981993  -3.14468208188622]
[ -1.41153445808602  -3.01531958382176 -0.812427097035628]
[ -1.52337823080763  -1.21050386655172  -1.34285920784301]
[ -2.89512942276003  -6.13439748981993  -3.14468208188622]
[ -1.41153445808602  -3.01531958382176 -0.812427097035628]
[ -1.52337823080763  -1.21050386655172  -1.34285920784301]
       
3
3
3
3
       
[ -5.81543355100599  -5.99080715341617 -0.569671108094060   2.03420216698322]
[ -2.73860230737928  -2.04921065649192  0.618201997877946   1.77184581745215]
[ -2.18749011591257  -1.59279998196433 0.0436184198551236   1.68908136027131]
[ -3.03670165780605  -3.30967899006378  0.162052375796337  0.567717573217992]
[ -5.81543355100599  -5.99080715341617 -0.569671108094060   2.03420216698322]
[ -2.73860230737928  -2.04921065649192  0.618201997877946   1.77184581745215]
[ -2.18749011591257  -1.59279998196433 0.0436184198551236   1.68908136027131]
[ -3.03670165780605  -3.30967899006378  0.162052375796337  0.567717573217992]

Matrica je regularna ako joj je determinanta različita od nula; u protivnom je singularna.

Matrice koje nisu singularne mogu se, znamo, invertirati.

       
[ 1/13 14/13]
[27/13 40/13]
[ 1/13 14/13]
[27/13 40/13]
       
(113141327134013)

                                
       
-2
-2
       
False
False
       
True
True
       
[-20/13   7/13]
[ 27/26  -1/26]
[-20/13   7/13]
[ 27/26  -1/26]
       
(20137132726126)

                                
       
[-20/13   7/13]
[ 27/26  -1/26]
[-20/13   7/13]
[ 27/26  -1/26]
       
(20137132726126)

                                

Prema definiciji, za inverznu matricu vrijedi  AA1=A1A=I.

       
[1 0]
[0 1]
[1 0]
[0 1]
       
(1001)

                                

Te jednakosti možemo i neposredno ispitati:

       
True
True
       
True
True

 

Rekli smo da se matrice koje nisu singularne mogu invertirati. Mogu li zaista?

       
[1 2]
[3 4]
[1 2]
[3 4]
       
-2
-2
       
False
False
       
False
False

Ops! Da, ali...

       
[  -2    1]
[ 3/2 -1/2]
[  -2    1]
[ 3/2 -1/2]
       
(213212)

                                

... naime, rezultat funkcije is_invertible() je True samo ako komponente inverzne matrice pripaduju istom skupu kojemu pripadaju komponente izvorne matrice.

       
Full MatrixSpace of 2 by 2 dense matrices over Integer Ring
Full MatrixSpace of 2 by 2 dense matrices over Integer Ring
       
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
       
True
True
       
True
True
       
(a00, a01, a02, a10, a11, a12, a20, a21, a22)
(a00, a01, a02, a10, a11, a12, a20, a21, a22)
       
(a00a01a02a10a11a12a20a21a22)

                                
       
((a02a00a01(a02a10a00a12)a00(a01a10a00a11))(a10(a01a20a00a21)a00(a01a10a00a11)a20a00)(a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22+1a00a01a10a200(a01a10a00a11)(a01a20a00a21)(a02a00a01(a02a10a00a12)a00(a01a10a00a11))(a01a10a00a11)((a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22)+a01a00(a01a10a00a11)a02a00a01(a02a10a00a12)a00(a01a10a00a11)(a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22(a02a10a00a12)(a10(a01a20a00a21)a00(a01a10a00a11)a20a00)(a01a10a00a11)((a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22)+a10a00(a01a10a00a11)1a01a10a00a11+(a02a10a00a12)(a01a20a00a21)(a01a10a00a11)2((a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22)a02a10a00a12(a01a10a00a11)((a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22)a10(a01a20a00a21)a00(a01a10a00a11)a20a00(a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22a01a20a00a21(a01a10a00a11)((a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22)1(a02a10a00a12)(a01a20a00a21)a01a10a00a11a02a20a00+a22)

                                
       
(a12a21a11a22(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a02a21a01a22(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a02a11a01a12(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a12a20a10a22(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a02a20a00a22(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a02a10a00a12(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a11a20a10a21(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a01a20a00a21(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22a01a10a00a11(a02a11a01a12)a20(a02a10a00a12)a21+(a01a10a00a11)a22)

                                
       
[1 0 0]
[0 1 0]
[0 0 1]
[1 0 0]
[0 1 0]
[0 0 1]