Dvostruka petlja for
1. zadatak
Napišite programsku funkciju umnozak() koja ima dva parametra, realan broj $r$ i matricu $\mathbf{A}$ s realnim komponentama, a vraća novu matricu koja je umnožak broja $r$ i matrice $\mathbf{A}$. Program izvedite s argumentima $r=3$ i $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$. Trebate dobiti matricu $\left[\begin{array}{rr} -3,\!3 & 6 \\ 9 & 3,\!9 \end{array}\right]$.
Podsjećamo:
|
[-3.30000000000000 6.00000000000000] [ 9.00000000000000 3.90000000000000] [-3.30000000000000 6.00000000000000] [ 9.00000000000000 3.90000000000000] |
1. zadatak za zadaću
Napišite programsku funkciju minus_jedan() koja ima jedan parametar, i to matricu, a vraća novu matricu dobivenu množenjem parametra sa $-1$. Program izvedite s argumentom $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$. Trebate dobiti matricu $\mathbf{B} = \left[\begin{array}{rr} 1,\!1 & -2 \\ -3 & -1,\!3 \end{array}\right]$.
|
2. zadatak za zadaću
Napišite programsku funkciju zbroj_matrica() koja će zbrojiti dvije matrice. Ako je $\mathbf{C} = \mathbf{A} + \mathbf{B}$, onda je $c_{i,j} = a_{i,j} + b_{i,j}$. Stoga se matrice mogu zbrajati samo ako imaju isti broj redaka i isti broj stupaca, ali u funkciji ne trebate provjeravati tu činjenicu, jer ćemo smatrati da ćemo je upotrebljavati samo u tom slučaju. Program izvedite s argumentima $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$ i $\mathbf{B} = \left[\begin{array}{rr} 1 & 2,\!1 \\ -3 & -1,\!2 \end{array}\right]$; rezultat je matrica $\left[\begin{array}{rr} -0,\!1 & 4,\!1 \\ 0 & 0,\!1 \end{array}\right]$.
|
2. zadatak
Napišite programsku funkciju zbroj_pn() koja će zbrojiti posebno pozitivne, a posebno negativne komponente matrice. Program izvedite s argumentom $\mathbf{A} = \left[\begin{array}{rrr} -1 & 2 & 0\\ 3 & 1 & -2 \\ 0,\!5 & 0 & -0,\!1 \end{array}\right]$; rezultat je par $(6,\!5; -3,\!1)$.
|
(6.50000000000000, -3.10000000000000) (6.50000000000000, -3.10000000000000) |
3. zadatak za zadaću
Modificirajte funkciju zbroj_pn() iz 2. zadatka tako da dobijete funkciju umnozak_pn() koja vraća umnoške pozitivnih i negativnih komponenata matrice. Za argument $\mathbf{A}$ iz 2. zadatka trebate dobiti par $(3; -0,\!2)$
|
4. zadatak za zadaću
Napišite programsku funkciju najveci() koje će pronaći najveću komponentu matrice. Program izvedite za argument $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$. Trebate dobiti broj 3.
Provedite potrebne promjene u programskoj funkciji najveci() tako da nova funkcija vraća najmanju komponentu matrice; novu funkciju nazovite najmanji(). Za argument $\mathbf{A}$ trebate kao rezultat dobiti $-1,\!1$.
|
5. zadatak za zadaću
Promijenite funkciju najveci() iz 4. zadatka za zadaću tako da umjesto najveće komponente vraća indekse retka i stupca u kojima se ta komponenta nalazi; funkciju nazovite indeksi_najvecega(). Ako program izvedete za argument $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$, trebate kao rezultat dobiti par brojeva $(1, 0)$.
Provedite promjene analogne promjenama iz drugoga dijela 4. zadatka za zadaću.
|
Dodatak: Množenje matrica ili trostruka petlja for
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. Ako matrica $\mathbf{A}$ ima $m$ redaka i $p$ stupaca, a matrica $\mathbf{B}$ $p$ redaka i $n$ stupaca, matrica $\mathbf{C}$ imat će $m$ redaka i $n$ stupaca, njezine su komponente određene izrazom $c_{i,j} = \displaystyle\sum_{k = 0}^{p - 1} a_{i,k}\,b_{k,j}$. (Preglednosti ispisa radi, programsku ćemo funkciju napisati za matrice s racionalnim komponentama ($\mathbb{Q}$, to jest QQ).)
|
[ 2 -1] [ 1/2 0] [ 0 -1/2] [ 2 -1] [ 1/2 0] [ 0 -1/2] |
[1/2 0 -1 2] [ 0 2 0 -1] [1/2 0 -1 2] [ 0 2 0 -1] |
[ 1 -2 -2 5] [ 1/4 0 -1/2 1] [ 0 -1 0 1/2] [ 1 -2 -2 5] [ 1/4 0 -1/2 1] [ 0 -1 0 1/2] |
Budući da matrica $\mathbf{B}$ ima 4 stupca, a matrica $\mathbf{A}$ 3 retka, umnožak $\mathbf{B\,A}$ nije definiran.
Traceback (click to the left of this block for traceback) ... IndexError: matrix index out of range Traceback (most recent call last): File "<stdin>", line 1, in <module> File "_sage_input_8.py", line 10, in <module> exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("dW1ub3pha19tYXRyaWNhIChCLCBBKQ=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py")) File "", line 1, in <module> File "/tmp/tmpNcZaZk/___code___.py", line 2, in <module> exec compile(u'umnozak_matrica (B, A) File "", line 1, in <module> File "/tmp/tmpL10Eng/___code___.py", line 10, in umnozak_matrica C[i,j] += A[i,k] * B[k,j] File "sage/matrix/matrix0.pyx", line 932, in sage.matrix.matrix0.Matrix.__getitem__ (build/cythonized/sage/matrix/matrix0.c:6849) IndexError: matrix index out of range |
SageMath je ispisao poruku o greški i prekinuo izvođenje. Greška je, međutim, u pristupu nepostojećoj komponenti matrice, što je tek posredno povezano s definicijom umnoška matrica, tako da je prekid izvođenja u stvari slučajan. Za matrice s nekim drugim brojem redaka ili stupaca do greške i prekida izvođenja ne mora doći, ali dobiveni rezultat ipak neće biti ispravan (zato što umnožak tih matrica ne postoji):
[ 0 1] [ -2 1] [ -2 -2] [ 0 1/2] [ 0 1] [ -2 1] [ -2 -2] [ 0 1/2] |
[ 0 0 0] [ 1 -1/2 1/2] [ 0 0 0] [ 1 -1/2 1/2] |
[ 0 0] [ 0 -1/2] [ 0 0] [ 0 -1/2] |
U funkciju umnozak_matrica() uključit ćemo stoga provjeru ispunjenosti uvjeta za postojanje umnoška:
|
Umnozak matrica: broj stupaca prve matrice mora biti jednak broju redaka druge! Umnozak matrica: broj stupaca prve matrice mora biti jednak broju redaka druge! |
[ 1 -1/2 1/2] [ 1 -1/2 1/2] [ -2 1 -1] [ 1/2 -1/4 1/4] [ 1 -1/2 1/2] [ 1 -1/2 1/2] [ -2 1 -1] [ 1/2 -1/4 1/4] |
Rješenje 1. zadatka za zadaću
Napišite programsku funkciju minus_jedan() koja ima jedan parametar, i to matricu, a vraća novu matricu dobivenu množenjem parametra sa $-1$. Program izvedite s argumentom $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$. Trebate dobiti matricu $\mathbf{B} = \left[\begin{array}{rr} 1,\!1 & -2 \\ -3 & -1,\!3 \end{array}\right]$.
|
[ 1.10000000000000 -2.00000000000000] [-3.00000000000000 -1.30000000000000] [ 1.10000000000000 -2.00000000000000] [-3.00000000000000 -1.30000000000000] |
Budući da već imamo, u 1. zadatku, definiranu funkciju umnozak() funkciju minus_jedan() možemo napisati i ovako:
|
[ 1.10000000000000 -2.00000000000000] [-3.00000000000000 -1.30000000000000] [ 1.10000000000000 -2.00000000000000] [-3.00000000000000 -1.30000000000000] |
Rješenje 2. zadatka za zadaću
Napišite programsku funkciju zbroj_matrica() koja će zbrojiti dvije matrice. Ako je $\mathbf{C} = \mathbf{A} + \mathbf{B}$, onda je $c_{i,j} = a_{i,j} + b_{i,j}$. Stoga se matrice mogu zbrajati samo ako imaju isti broj redaka i isti broj stupaca, ali u funkciji ne trebate provjeravati tu činjenicu, jer ćemo smatrati da ćemo je upotrebljavati samo u tom slučaju. Program izvedite s argumentima $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$ i $\mathbf{B} = \left[\begin{array}{rr} 1 & 2,\!1 \\ -3 & -1,\!2 \end{array}\right]$; rezultat je matrica $\left[\begin{array}{rr} -0,\!1 & 4,\!1 \\ 0 & 0,\!1 \end{array}\right]$.
|
[-0.100000000000000 4.10000000000000] [ 0.000000000000000 0.100000000000000] [-0.100000000000000 4.10000000000000] [ 0.000000000000000 0.100000000000000] |
Rješenje 3. zadatka za zadaću
Modificirajte funkciju zbroj_pn() iz 2. zadatka tako da dobijete funkciju umnozak_pn() koja vraća umoške pozitivnih i negativnih komponenata matrice. Za argument $\mathbf{A}$ iz 2. zadatka trebate dobiti par $(3; -0,\!2)$
|
(3.00000000000000, -0.200000000000000) (3.00000000000000, -0.200000000000000) |
Rješenje 4. zadatka za zadaću
Napišite programsku funkciju najveci() koje će pronaći najveću komponentu matrice. Program izvedite za argument $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$. Trebate dobiti broj 3.
|
3.00000000000000 3.00000000000000 |
Provedite potrebne promjene u programskoj funkciji najveci() tako da nova funkcija vraća najmanju komponentu matrice; novu funkciju nazovite najmanji(). Za argument $\mathbf{A}$ trebate kao rezultat dobiti $-1,\!1$.
|
-1.10000000000000 -1.10000000000000 |
Rješenje 5. zadatka za zadaću
Promijenite funkciju najveci() iz 4. zadatka za zadaću tako da umjesto najveće komponente vraća indekse retka i stupca u kojima se ta komponenta nalazi; program nazovite indeksi_najvecega(). Ako program izvedete za argument $\mathbf{A} = \left[\begin{array}{rr} -1,\!1 & 2 \\ 3 & 1,\!3 \end{array}\right]$, trebate kao rezultat dobiti par brojeva $(1, 0)$.
|
(1, 0) (1, 0) |
Provedite promjene analogne promjenama iz drugoga dijela 4. zadatka za zadaću.
|
(0, 0) (0, 0) |
|