MPZI_vj11_s_izradom

2477 days ago by fresl

Petlja for


1. zadatak

Napišite programsku funkciju zbroj() koja će izračunati zbroj komponenata liste.

Provjerite ispravnost rada programa na listama  $l_1 = [1, 2, 3, 4, 5]$  (zbroj je $15$)  i  $l_2 =\;$srange(20)  (lista $l_2$ sadrži brojeve  $0, 1, 2, \ldots, 19$,  pa joj je zbroj jednak $190$).

  •  Rješenje primjenom indeksiranja komponenata liste:
       
       
15
15

... ili:

       
       
15
15
  •  Sažetije, rješenje „neposrednim” pristupom komponentama:
       
       
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
190
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
190

... ili:

       
       
190
190

Napomena: SageMath ima i ugrađenu funkciju sum() koja zbraja komponente liste.

       
190
190


1. zadatak za zadaću

Što treba promijeniti u kôdu programske funkcije u 1. zadatku da funkcija vrati aritmetičku sredinu komponenata liste.  Podsjetnik: broj komponenata liste daje funkcija len().  Primijenite novu funkciju na listu srange(20); trebali biste dobiti rezultat $\dfrac{19}{2}$.

       

 

2. zadatak za zadaću

Napišite programsku funkciju zbroj_rec() koja će zbrojiti recipročne vrijednosti komponenata liste (pretpostavit ćemo da lista nema komponenata koje su jednake nuli).  Zbrojite recipročne vrijednosti komponenata liste  $[1, 2, 3, 4, 5]$;  rezultat je $\dfrac{137}{60}$.

       

 

3. zadatak za zadaću

Napišite programsku funkciju broj() koja će prebrojiti koliko lista ima komponenata. Primijenite funkciju na listu $[-1, 0, 1]$.  U rješenju prvoga zadatka za zadaću SageMath-ovu funkciju len() zamijenite vašom funkcijom broj()

Uputa:  „Neutralni” element za prebrojavanje je $0$.

       

 

4. zadatak za zadaću

Napišite programsku funkciju umnozak() koja će izračunati umnožak komponenata liste. Testirajte funkciju na listi  $l= [1, 2, 3, 4, 5]$  (trebali biste dobiti rezultat $120$).

Uputa:  Neutralni element za množenje je $1$.

       


5. zadatak za zadaću

Napišite programsku funkciju umnozak_kosinusa() koja će izračunati umnožak kosinusa komponenata liste. Primijenite funkciju na argument $[-1, 0, 1]$  (trebali biste dobiti rezultat $\cos^2 1$).

       

 

2. zadatak

Ako su zadane dvije lista brojeva iste duljine  $l_1=[x_0, x_1, x_2, \ldots, x_n]$  i  $l_2 = [y_0, y1, y2, \ldots, y_n]$,  njihov je skalarni umnožak definiran izrazom

        $l_1\cdot l_2 = x_0\, y_0 + x_1\, y_1 + x_2\, y_2 + \cdots + x_n\, y_n$.

Napišite programsku funkciju skalarni() koja će računati skalarni umnožak dviju lista brojeva iste duljine.  Funkciju primijenite na liste  $l_1 = [1, -1, 2, -2]$  i  $l_2 = [3, 1, 0, -1]$;  rezultat je $4$.

       
       
4
4

 

Međuigra

Nova se komponenta na kraj liste dodaje funkcijom .append():

       
1 [1]
2 [1, 4]
3 [1, 4, 9]
4 [1, 4, 9, 16]
5 [1, 4, 9, 16, 25]
1 [1]
2 [1, 4]
3 [1, 4, 9]
4 [1, 4, 9, 16]
5 [1, 4, 9, 16, 25]

 

3. zadatak

Na 7. predavanju (MPZI_predavanje_07) definiran je Taylorov polinom funkcije. Za prikaz kvalitete aproksimacije funkcije $f$ pomoću Taylorovih polinoma u točki $x_0$ od stupnja $0$ do stupnja $n$ upotrijebljena je animacija (koju tada nismo objašnjavali).

Podsjećamo da se Taylorov polinom stupnja $k$ funkcije $f(x)$ u točki $x_0$ u SageMath-u dobiva pozivom funkcije

     taylor (f, x, x0, k)

Napišite programsku funkciju taylor_lista() kojom ćete formirati listu slika koje se mogu animirati naredbom animate(). Svaka komponenta liste treba sadržavati grafički prikaz funkcije, prikaz točke u kojoj se računa Taylorov polinom, te prikaz Taylorovih polinoma od stupnja $0$ do stupnja $n$ za zadane $x_{min}$, $x_{max}$, $y_{min}$, $y_{max}$.

Napisanom programskom funkcijom odredite listu slika aproksimacije funkcije  $f(x) = x^2\,e^{-x}$  u okolišu točke $x_0 = 2$ pomoću Taylorovih polinoma do desetoga stupnja.  (Koliko će slika lista sadržavati?)  Neka su  $x_{min}=-0,\!6$,  $x_{max}=5$,  $y_{min}=-0,\!25$,  $y_{max}=0,\!70$  i neka su Taylorovi polinomi nacrtani crvenom bojom.  Na kraju prikažite animaciju tih slika s razmakom od pola sekunde između dvije slike, pri čemu će se izvesti deset iteracija prikaza slika.

Napomena:  ova je programska funkcija nešto jednostavnija nego funkcija u 5. predavanju, jer se na slikama ne ispisuje stupanj polinoma. Ako Vas zanima kako se to radi, pogledajte odgovarajući kôd u spomenutom  predavanju.

       
       
       
       
11
11
       



6. zadatak za zadaću

Funkcijom taylor_lista(), definiranom u 3. zadatku, generirajte listu slika aproksimacija funkcije  $f(x) = \dfrac{1}{x^2}\sin\dfrac{1}{x}$  Taylorovim polinomima do 20.-oga stupnja u okolini točke $x_0=0,\!21$  za  $x_{min}=0,\!1$,  $x_{max}=0,\!6$,  $y_{min}=-60$  i  $y_{max}=80$.

Animirajte dobivene slike funkcijom animate() i prikažite animaciju funkcijom .show() uz opcije  delay = 75, iterations = 10.

       

 

7. zadatak za zadaću

Napišite programsku funkciju monomi() koja će generirati listu slika monoma $x^i$ za  $i = 0\; .. n$  na segmentu $[0, 1]$. Broj $n$ je parametar funkcije.  Ordinate najniže i najviše točke crteža neka budu $0$ i $1$.  Listu koju ćete dobiti animirajte.

       


8. zadatak za zadaću

Napišite programsku funkciju monomi2() koja će na istoj slici prikazati niz monoma $x^i$ za  $i = 0\; .. n$  na segmentu $[-1, 1]$.  Broj $n$ je parametar funkcije.  Ordinate najniže i najviše točke crteža neka budu $-1$ i $1$.

       

 



 

 

 

 

 

 

 

 

Rješenje 1. zadatka za zadaću

Što treba promijeniti u kôdu programske funkcije u 1. zadatku da funkcija vrati aritmetičku sredinu komponenata liste.  Uputa: broj komponenata liste daje funkcija len().  Primijenite novu funkciju na listu srange(20); trebali biste dobiti rezultat $\dfrac{19}{2}$.

       
       
19/2
19/2

Napomena:  Složenije programske funkcije „sastavljaju” se od jednostavnijih funkcija, pa umjesto prepisivanjem kôda uz varijacije (što može imati pedagoškoga, ali ne i praktičnog smisla) funkciju za izračunavanje aritmetičke sredine možemo napisati pomoću funkcija zbroj() i len():

       
       
19/2
19/2


Rješenje 2. zadatka za zadaću

Napišite programsku funkciju zbroj_rec() koja će zbrojiti recipročne vrijednosti komponenata liste (pretpostavit ćemo da lista nema komponenata koje su jednake nuli).  Zbrojite recipročne vrijednosti komponenata liste  $[1, 2, 3, 4, 5]$;  rezultat je $\dfrac{137}{60}$.

       
       
137/60
137/60


Rješenje 3. zadatka za zadaću

Napišite programsku funkciju broj() koja će prebrojiti koliko lista ima komponenata. Primijenite funkciju na listu $[-1, 0, 1]$.  U rješenju prvoga zadatka za zadaću SageMath-ovu funkciju len() zamijenite vašom funkcijom broj().

Uputa:  „Neutralni” element za prebrojavanje je $0$.

       
       
3
3

Izmjena funkcije arit_sredina():

       
       
19/2
19/2

U funkciji arit_sredina() može se upotrijebiti i ranije definirana funkcija zbroj():

       
       
19/2
19/2

 

Rješenje 4. zadatka za zadaću

Napišite programsku funkciju umnozak() koja će izračunati umnožak komponenata liste. Testirajte funkciju na listi  $l= [1, 2, 3, 4, 5]$  (trebali biste dobiti rezultat $120$).

Uputa:  Neutralni element za množenje je $1$.

       
       
120
120

ili:

       
       
120
120


Rješenje 5. zadatka za zadaću

Napišite programsku funkciju umnozak_kosinusa() koja će izračunati umnožak kosinusa komponenata liste. Primijenite funkciju na argument $[-1, 0, 1]$  (trebali biste dobiti rezultat $\cos^2 1$).

       
       
cos(1)^2
cos(1)^2


Rješenje 6. zadatka za zadaću

Funkcijom taylor_lista(), definiranom u 3. zadatku, generirajte listu slika aproksimacija funkcije  $f(x) = \dfrac{1}{x^2}\sin\dfrac{1}{x}$  Taylorovim polinomima do 20.-oga stupnja u okolini točke $x_0=0,\!21$  za  $x_{min}=0,\!1$,  $x_{max}=0,\!6$,  $y_{min}=-60$  i  $y_{max}=80$.

Animirajte dobivene slike funkcijom animate() i prikažite animaciju funkcijom .show() uz opcije  delay = 75, iterations = 10.

       
       

 

Rješenje 7. zadatka za zadaću

Napišite programsku funkciju monomi() koja će generirati listu slika monoma $x^i$ za  $i = 0\; .. n$  na segmentu $[0, 1]$. Broj $n$ je parametar funkcije.  Ordinate najniže i najviše točke crteža neka budu $0$ i $1$.  Listu koju ćete dobiti animirajte.

       
       


Rješenje 8. zadatka za zadaću

Napišite programsku funkciju monomi2() koja će na istoj slici prikazati niz monoma $x^i$ za  $i = 0\; .. n$  na segmentu $[-1, 1]$.  Broj $n$ je parametar funkcije.  Ordinate najniže i najviše točke crteža neka budu $-1$ i $1$. 

       
       

                                
                            

                                

Varijacija na temu:  Crtanje monoma različitim bojama, pri čemu je lista boja parametar funkcije (ako je najviši stupanj monoma (povećan za jedan) veći od broja boja, ponovo se upotrebljavaju iste boje):