Programování 2 pro matematiky

Ve školním roce 2019/2020 vedeme společně s Tomášem Lysoňkem cvičení z matematického Programování 2. Cvičení má dvě části: praktickou ve středu od 9:00 v K11 (tu vedu já) a teoretickou ve čtvrtek od 10:40 v M2 (vede Tomáš).

Kvůli karanténním opatřením je fyzická výuka do odvolání zrušena, takže cvičení probíhá virtuálně. Úkoly budou posílat e-mailem a také se budou objevovat na této stránce. Každou středu od 10:00 probíhá dálková konzultace na Zoomu (odkaz jste dostali e-mailem; pokud ne, řekněte si).

Pokud chcete cokoliv konzultovat, napište mi prosím e-mail na mares+p2m@kam.mff.cuni.cz a domluvíme se.

K získání zápočtu je potřeba:

Co jsme dělali

datum téma
19. 2. Základní aritmetické algoritmy pracující po číslicích:
  • Součet a součin (program)
  • Porovnáváni (větší/menší/rovno)
  • Dělení (jednodušší: dělíme malým číslem)
  • Výpočet Eulerova čísla: Σn≥0 1/n!.
26. 2.
  • Slidy: NumPy
  • Dokumentace k NumPy:
  • Úkoly (snažte se používat jenom operace s poli, žádné cykly):
    • Vyrobte matici tvaru R×S vyplněnou číslem X.
    • Vyrobte matici tvaru R×S, která má na okrajích jedničky a jinde nuly.
    • Vyrobte matici tvaru R×S, která bude mít v i-tém řádku samá čísla i.
    • Spočítejte determinant 10 matic 10×10 vyplněných náhodnými čísly mezi -1 a 1 (viz np.linalg.det)
    • Uvažujme "průměrovací Fibonacciho čísla" definovaná rekurentním vztahem xi = (xi-1 + xi-2) / 2. Víme-li, že x8=426 a x9=427, kolik je x0 a x1? Vyřešte soustavu lineárních rovnic pomocí np.linalg.solve. Pro výrobu matic s jedničkami na posunuté diagonále se hodí np.eye.
    • Pokusy s dělitelností:
      • Vyrobte booleovskou matici, která má na pozici (i,j) True právě tehdy, je-li i dělitelné j.
      • Vyrobte vektor, který pro každé číslo od 1 do N uvádí počet jeho dělitelů.
      • Vyrobte vektor všech prvočísel mezi 1 a N.
4. 3.
11. 3. Kreslení grafů pomocí knihovny MatPlotLib:
18. 3. Pokračujeme s procvičováním řídkých polynomů a MatPlotLibu.
25. 3. Spojové seznamy:

Prohlédněte si vzorové programy a doplňte jak do jednosměrných, tak do obousměrných seznamů funkce pro následující operace:

  • find(self, x): nalezení prvku s danou hodnotou (vrátí None, pokud tam žádný není)
  • remove_node(self, n): odstranění prvku zadaného referencí (třeba nalezeného předchozí funkcí)
  • pred_node(self, x): zjištění předchůdce prvku zadaného referencí (None pro první prvek)
  • succ_node(self, n): zjištění následníka prvku zadaného referencí (None pro poslední prvek)
  • reverse(self): přehází prvky seznamu do opačného pořadí (nevyrábí nové prvky, jen přepojuje odkazy)
1. 4. Pokračujeme se spojovými seznamy.

Odkazy

Stránku spravuje Martin Mareš