HF 1 (15 pont)

  • Minden feladatot a feladatszámnak megfelelő számú megoldásnotebookban oldj meg. Az első feladatot az feladat01.ipynb notebookba és így tovább.
  • A megoldás tartalmazza a megoldandó feladat szövegét a megoldásnotebook első markdown cellájában!
  • Kommentekkel, illetve markdown cellákkal magyarázd, hogy éppen mit csinál az adott kódrészlet!
  • Magyarázat nélkül a beküldött feladatok csak fél feladatnak számítanak!
  • Az elkészített ábrák minden esetben rendelkezzenek ábrafeliratokkal (cím, tengelyfeliratok és − amennyiben indokolt − jelmagyarázat)! Amennyiben a beadott ábrákon nincsenek feliratok, az adott feladat automatikusan csak fél feladatnak számít!
  • A beadott notebookok Kernel -> Restart&Run All hatására a beadott formát reprodukálják!
  • A Feladatok megadott pontszámán túl a beadott feladatok külalakjáért összesen 3 pont-ot lehet szerezni!

Feladat 1 (2 pont)

Alakíts át matematikai műveleteket latex inputtá! Ehhez a követekezőket kell megtenned:

  • Hozz létre egy convert nevű függvényt
  • A függvény inputja és outpuja string legyen
  • A következő átalakításokat hajtsa végre:
    • szorzás * $\rightarrow$ \times
    • összeadás, kivonás: nem kell változtatni
    • osztás: ()/() $\rightarrow$ \frac{}{}
    • osztás zárójelek nélkül: nem kell rajta változtani

A feladat megoldása során feltételezheted, hogy, csak gömbölyű zárójelek és a 4 alapművelet fog szerepelni. A megoldás során írhatsz segédfüggvényeket, a feladatod lásd el kommentekkel.

Néhány példa a függvény helyes működésére:

  • x = convert("6+20/10-5") $\rightarrow$ print(x) $\rightarrow$ 6+20/10-5
  • x = convert("2*(4)/((5)/(6))") $\rightarrow$ print(x) $\rightarrow$ 2 \times \frac{4}{\frac{5}{6}}
  • x = convert("(1)/(2)/(3)") $\rightarrow$ print(x) $\rightarrow$ \frac{\frac{1}{2}}{3}

Feladat 2 (2 pont)

A feladat egy sorozat első néhány elemének legyártása és ábrázolása. A sorozatot a következő szabállyal adhatjuk meg. Első eleme az $a_1=1$, a következő elem kiszámítása azon múlik, hogy a következő elem sorszáma és az aktuális elem relatív prímek-e. Ha igen, akkor a következő elemet így számítjuk:

$a_{n+1}=a_n+n+2$

Ha nem relatív prímek, akkor az aktuális elemet leosztjuk az aktuális elem és a következő elem sorszámának legnagyobb közös osztójával (angol megfelelője, a greatest common divisor, rövidítése után gcd), azaz:

$a_{n+1}=a_n/\mathrm{gcd} \left(a_n,n+1 \right)$.

Ha jól programoztad be, akkor az első 10 elem a következő kell, hogy legyen:

n $a_n$
1 1
2 4
3 8
4 2
5 8
6 4
7 12
8 3
9 1
10 12

Ábrázold a sorozat első 500 tagját! Látsz valami érdekeset? Most ábrázold a sorozat első 1000 tagját! Látsz valami érdekeset? Figyelj arra, hogy ne kösd össze a pontokat, ábrázold őket pontokként!

Feladat 3 (2 pont)

Szimuláld az itt a piros, hol a piros játékot! Van három poharunk A, B és C pozíciókban. Kezdetben mindig az A pozíción van egy érme. Írj egy függvényt, aminek a bemenete egy lista. Ez a lista tartalmaz tetszőleges számúcserét a poharak között. Például "AB" vagy "BA" azt jelenti, hogy az A és B helyen levő poharakat megcseréljük. A függvény visszatérési értéke legyen az a pozíció, ahol az érme van a pohár alatt.

Az alábbi példákon mutasd meg, hogy jól működik:

  • csere(["BC", "AC"]) : "C"
  • csere(["AC", "CA", "CA", "AC"]) : "A"
  • csere(["BA", "AC", "CA", "BC"]) : "C"
  • csere(["CA", "AB", "CB", "BA","AC","CA","AC","CB"]) : "B"

Feladat 4 (2 pont)

Numerikus számolások során a lassan konvergáló sorok problémásak, de szerencsére léteznek olyan transzformációk, amelyek gyorsítják a konvergenciát. Ebben a feladatban az Euler-transzformációval ismerkedhetsz meg, ami alternáló sorozatok esetén alkalmazható. Ha az $\{a_n\}_n$ sorozat monoton fogyó, akkor $$\sum_{n=0}^{+\infty} (-1)^n a_n = \sum_{n=0}^{+\infty} (-1)^n \frac{\Delta^n a_0}{2^{n+1}},$$ ahol $$\Delta^n a_0 = \sum_{k=0}^n (-1)^k \binom{n}{k}a_{n-k}.$$

  • Készíts egy függvényt, ami kiszámolja egy véges sorozathoz tartozó Euler-transzformációt (például $(a_0, a_1, a_2)$-ből kiszámolja $\left(\frac{\Delta^0 a_0}{2}, -\frac{\Delta^1 a_0}{2^2}, \frac{\Delta^2 a_0}{2^3}\right)$-t).

  • Az alternáló harmonikus sor konvergens, a határértéke pedig $\log(2)$, azaz $\log(2)=\sum\limits_{n=1}^{+\infty}\frac{(-1)^{n+1}}{n}$. Az előző részben elkészített függvény segítségével ábrázold az alternáló harmonikus sorozathoz és az ő Euler-transzformáltjához tartozó részletösszeg-sorozatok első 42 tagját. Az ábrán tüntesd fel vízszintes vonallal a $\log(2)$ "egzakt" (numpy modul által biztosított logaritmus segítségével számolt) értékét is! Mit tapasztalsz?

Feladat 5 (2 pont)

Készíts egy Poligon osztályt ami megfelel a következő szempontoknak:

  • Egy új poligon létrehozásakor egy listát kelljen megadni, ami a (2 dimenziós térben lévő) csúcsokat tartalmazza (a feladat megoldása során végig feltételezheted, hogy ezek sorrendben vannak megadva).
  • Legyen egy plot osztálymetódus, ami ábrázolja a csúcsokat és az éleket. A csúcsok színe legyen piros, az éleké pedig kék. A piros pontok legyenek a vonalak "felett". Legyenek tengelyfeliratok is!
  • Legyen egy area osztálymetódus, ami a poligon területével tér vissza.
  • Legyen egy center osztálymetódus, ami a poligon középpontjával tér vissza.
  • A poligont lehessen valós számmal szorozni mindkét oldalról. Ennek a hatására a poligon minden csúcsának mindkét koordinátája szorzódjon meg a számmal. (Itt feltételezheted, hogy csak valós számmal fogjuk szorozni)
  • A poligonhoz lehessen egy két elemű listát hozzáadni. Ennek a hatására a poligon minden csúcsához adódjon hozzá a lista, mint vektor. (Itt feltételezheted, hogy csak két elemű listát fogunk hozzáadni)
  • A poligont lehessen hatványozni. A hatványozás hatására a poligon minden csúcsa forgatódjon el pozitív irányban a kitevőben lévő szöggel (radián).

Mutasd be egy szabályos tetracontakaidigonon (42 oldalú sokszög), hogy jól működik minden metódus!

Feladat 6 (2 pont)

Ebben a feladatban egy rezges osztályt kell megalkotni.

  • A harmonikus rezgés létrehozásának három paramétere legyen: amplitúdó, körfrekvencia, fázis.

  • Legyen egy osztálymetódus, ami a rezgés paramétereinek megfelelően egy megadott időintervallumban legenerálja és vissztérési értékként adja meg a kitérések értékeit.

  • Az egyiranyu osztálymetódus adjon össze két, egyirányú rezgést! Ábrázolja az idő függvényében a kialakuló mozgást!

  • Vizsgáld meg két nagyon közeli frekvenciájú (pl. $10^{-2}$ eltérés), egyirányú rezgések összetételét, írd le, amit tapasztaltál! Célszerű hosszabb időskálán vizsgálódni!

  • A + jel segítségével legyen lehetőség két merőleges rezgés összetételére. Az osztálymetóduson belül ábrázoljuk az eredő rezgést x-y síkban.

  • Mutass példát a Lissajous-görbékre racionális frekvenciaránnyal rendelkező merőleges rezgések összeadásával!

  • Az ábrákon legyenek tengelyfeliratok, a cím pedig tartalmazza a két rezgés paramétereit!