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 $n-1$:
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 ($\mathbb{Z},\;\mathbb{Q}$ ili $\mathbb{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:
[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 ($\mathbb{Z} \subset \mathbb{Q} \subset \mathbb{R}$):
(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 $\mathbb{Z}$, QQ označava $\mathbb{Q}$, a RR označava $\mathbb{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 $\vec{v}_{A,B} \,=\, \vec{r}_B - \vec{r}_A$
(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 $\mathbf{c} = \mathbf{a} + \mathbf{b}$, onda je $c_i = a_i + b_i$ za $i = 0, 1, \ldots, n-1$.
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:
|
|
Duljina ili (euklidska) norma vektora
Izraz za duljinu (realnog) vektora slijedi iz Pitagorina poučka: $v = \|\mathbf{v}\| = \displaystyle\sqrt {\sum_{i=0}^{n-1}\, v_i^2}$.
5 5 |
4*sqrt(2) 4*sqrt(2) |
5.00000000000000 5.00000000000000 |
5.65685424949238 5.65685424949238 |
|
[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] |
|
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) |
|
Normalizacija je dijeljenje vektora njegovom duljinom:
True True |
|
Skalarni umnožak vektora
„Simbolički” nam vektori daju (gotovo) opći izraz za skalarni umnožak dvaju vektora:
|
Općenitije, za vektore s $n$ komponenata ($n$–dimenzionalne vektore) skalarni je umnožak $s = \mathbf{a}\cdot\mathbf{b} = \displaystyle\sum_{i=0}^{n-1}\, a_i\, b_i$.
(-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:
$\mathbf{a}\cdot\mathbf{b} = \|\mathbf{a}\|\cdot \|\mathbf{b}\|\cdot\cos\, (\mathbf{a},\,\mathbf{b}) \quad\Rightarrow\quad \cos\, (\mathbf{a},\,\mathbf{b}) = \dfrac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{a}\|\cdot \|\mathbf{b}\|} $
|
-0.343372049386055 -0.343372049386055 |
1.92130122293467 1.92130122293467 |
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 $\vec{F}$, a pomak vektorom $\vec{d}$, mehanički je rad sile na pomaku
$W = \vec{F} \cdot \vec{d}$.
Vektorski umnožak vektora
Ponovno, općega ćemo se izraza za komponente vektorskog umnoška dvaju vektora prisjetiti pomoću „simboličkih” vektora:
|
Taj se izraz može izvesti razvojem determinante $\vec{c} = \vec{a}\times\vec{b} = \left| \begin{array}{ccc} \vec{\imath} & \vec{\jmath} & \vec{k} \\ a_0 & a_1 & a_2 \\ b_0 & b_1 & b_2 \end{array} \right|$.
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 $\vec{a}$ i $\vec{b}$ u ravnini $xy$, vector $\vec{c} = \vec{a}\times\vec{b}$ bit će usporedan s osi $z$:
|
Za kolinearne vektore poput, primjerice,
|
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 $\vec{M}_{F/\mathsf{A}}$ momenta sile $\vec{F}$ u odnosu na točku $\mathsf{A}$ vektor je dobiven kao vektorski umnožak položajnoga vektora $\vec{r}_{\!F/\mathsf{A}}$ sile $\vec{F}$ u odnosu na točku $\mathsf{A}$ i vektora $\vec{F}$ kojim je prikazana sila:
$\vec{M}_{F/\mathsf{A}} = \vec{r}_{\!F/\mathsf{A}}\times \vec{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
$M_{F/\mathsf{o}} = \vec{e}_{\mathsf{o}}\cdot \vec{M}_{F/\mathsf{A}} = \vec{e}_{\mathsf{o}}\cdot (\vec{r}_{\!F/\mathsf{A}}\times \vec{F}\,) $,
pri čemu je $\vec{e}_{\mathsf{o}}$ jedinični vektor kojim je određena os $\mathsf{o}$, dok $\mathsf{A}$ sada bilo koja točka osi $\mathsf{o}$. Vektor momenta oko osi je
$\vec{M}_{F/\mathsf{o}} = M_{F/\mathsf{o}}\;\vec{e}_{\mathsf{o}} = [\vec{e}_{\mathsf{o}}\cdot (\vec{r}_{\!F/\mathsf{A}}\times \vec{F}\,) ]\;\vec{e}_{\mathsf{o}}.$
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:
[ 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 |
|
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 |
[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:
[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] |
[2/5 0 0] [ 0 3 0] [ 0 0 4/3] [2/5 0 0] [ 0 3 0] [ 0 0 4/3] |
[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] |
|
[2] [3] [4] [2] [3] [4] |
|
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 $\mathbf{C} = \mathbf{A\,B}$ dviju matrica $\mathbf{A}$ i $\mathbf{B}$ definiran je ako (i samo ako) je broj stupaca prve jednak broju redaka druge, jer je opći izraz za komponente umnoška $c_{i,j} = \displaystyle\sum_{k = 0}^{n - 1} a_{i,k}\,b_{k,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\times c$, njoj transponirana matrica tipa je $c\times r$. Komponente transponirane matrice $\mathbf{B} = \mathbf{A}^{\!\mathrm{T}}$ su $b_{i,j} = a_{j,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] |
|
-2 -2 |
False False |
True True |
[-20/13 7/13] [ 27/26 -1/26] [-20/13 7/13] [ 27/26 -1/26] |
|
[-20/13 7/13] [ 27/26 -1/26] [-20/13 7/13] [ 27/26 -1/26] |
|
Prema definiciji, za inverznu matricu vrijedi $\mathbf{A}\,\mathbf{A}^{\!-1} = \mathbf{A}^{\!-1}\mathbf{A} = \mathbf{I}$.
[1 0] [0 1] [1 0] [0 1] |
|
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] |
|
... 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) |
|
|
|
[1 0 0] [0 1 0] [0 0 1] [1 0 0] [0 1 0] [0 0 1] |
|