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 (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:
[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 (Z⊂Q⊂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 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=→rB−→rA
(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,…,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:
(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‖=√n−1∑i=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) |
(a0√a20+a21+a22,a1√a20+a21+a22,a2√a20+a21+a22)
|
Normalizacija je dijeljenje vektora njegovom duljinom:
True True |
(a0√a20+a21+a22,a1√a20+a21+a22,a2√a20+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=a⋅b=n−1∑i=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:
a⋅b=‖a‖⋅‖b‖⋅cos(a,b)⇒cos(a,b)=a⋅b‖a‖⋅‖b‖
a0b0+a1b1+a2b2√a20+a21+a22√b20+b21+b22
|
-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 →F, a pomak vektorom →d, mehanički je rad sile na pomaku
W=→F⋅→d.
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,a2b0−a0b2,−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=→eo⋅→MF/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/o→eo=[→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:
[ 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 |
(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 |
[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] |
(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=n−1∑k=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] |
(−20137132726−126)
|
[-20/13 7/13] [ 27/26 -1/26] [-20/13 7/13] [ 27/26 -1/26] |
(−20137132726−126)
|
Prema definiciji, za inverznu matricu vrijedi AA−1=A−1A=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] |
(−2132−12)
|
... 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)
|
(−(a02a00−a01(a02a10a00−a12)a00(a01a10a00−a11))(a10(a01a20a00−a21)a00(a01a10a00−a11)−a20a00)(a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22+1a00−a01a10a200(a01a10a00−a11)(a01a20a00−a21)(a02a00−a01(a02a10a00−a12)a00(a01a10a00−a11))(a01a10a00−a11)((a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22)+a01a00(a01a10a00−a11)−a02a00−a01(a02a10a00−a12)a00(a01a10a00−a11)(a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22−(a02a10a00−a12)(a10(a01a20a00−a21)a00(a01a10a00−a11)−a20a00)(a01a10a00−a11)((a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22)+a10a00(a01a10a00−a11)−1a01a10a00−a11+(a02a10a00−a12)(a01a20a00−a21)(a01a10a00−a11)2((a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22)−a02a10a00−a12(a01a10a00−a11)((a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22)a10(a01a20a00−a21)a00(a01a10a00−a11)−a20a00(a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22−a01a20a00−a21(a01a10a00−a11)((a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22)1(a02a10a00−a12)(a01a20a00−a21)a01a10a00−a11−a02a20a00+a22)
|
(a12a21−a11a22(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22−a02a21−a01a22(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22a02a11−a01a12(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22−a12a20−a10a22(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22a02a20−a00a22(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22−a02a10−a00a12(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22a11a20−a10a21(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22−a01a20−a00a21(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22a01a10−a00a11(a02a11−a01a12)a20−(a02a10−a00a12)a21+(a01a10−a00a11)a22)
|
[1 0 0] [0 1 0] [0 0 1] [1 0 0] [0 1 0] [0 0 1] |
|