Taylor E 3011 Jan Böhm RECETOX March 20, 2024 Jan Böhm (RECETOX) Přednáška V March 20, 2024 1 / 15 Co nás dnes čeká 1 Neprogramování My bad for4 Tak trochu jiný while 2 Opakování matematiky Jan Böhm (RECETOX) Přednáška V March 20, 2024 2 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed 4 IndentationError: expected an indented block after 'for' statement on line 3 Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed 4 IndentationError: expected an indented block after 'for' statement on line 3 5 TypeError: unsupported operand type(s) for +: 'int' and 'str' Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed 4 IndentationError: expected an indented block after 'for' statement on line 3 5 TypeError: unsupported operand type(s) for +: 'int' and 'str' 6 TypeError: type str doesn't define __round__ method Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed 4 IndentationError: expected an indented block after 'for' statement on line 3 5 TypeError: unsupported operand type(s) for +: 'int' and 'str' 6 TypeError: type str doesn't define __round__ method 7 ModuleNotFoundError: No module named 'E3011' Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed 4 IndentationError: expected an indented block after 'for' statement on line 3 5 TypeError: unsupported operand type(s) for +: 'int' and 'str' 6 TypeError: type str doesn't define __round__ method 7 ModuleNotFoundError: No module named 'E3011' 8 ZeroDivisionError: division by zero Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed 4 IndentationError: expected an indented block after 'for' statement on line 3 5 TypeError: unsupported operand type(s) for +: 'int' and 'str' 6 TypeError: type str doesn't define __round__ method 7 ModuleNotFoundError: No module named 'E3011' 8 ZeroDivisionError: division by zero 9 ValueError: math domain error Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Chyby Napište program, který při pokusu jej spustit vypíše následující chybovou hlášku: 1 SyntaxError: expected ':' 2 SyntaxError: unterminated string literal (detected at line 3) 3 SyntaxError: '(' was never closed 4 IndentationError: expected an indented block after 'for' statement on line 3 5 TypeError: unsupported operand type(s) for +: 'int' and 'str' 6 TypeError: type str doesn't define __round__ method 7 ModuleNotFoundError: No module named 'E3011' 8 ZeroDivisionError: division by zero 9 ValueError: math domain error 10 NameError: name 'cos' is not defined Jan Böhm (RECETOX) Přednáška V March 20, 2024 3 / 15 Fóry Cyklus I: O programu níže rozhodněte: Kolik operací + proběhně? Co vypíše? 1 result = 0 2 for i in range(5): 3 result += i 4 5 print(result) Jan Böhm (RECETOX) Přednáška V March 20, 2024 4 / 15 Fóry Cyklus II: O programu níže rozhodněte: Kolik operací + proběhně? Co vypíše? 1 result = 0 2 for i in range(5): 3 result += i 4 for j in range(5): 5 result += j 6 7 print(result) Jan Böhm (RECETOX) Přednáška V March 20, 2024 5 / 15 Fóry Cyklus III: O programu níže rozhodněte: Kolik operací + proběhně? Co vypíše? 1 result = 0 2 for i in range(5): 3 result += i 4 for j in range(5): 5 result += j 6 7 print(result) Jan Böhm (RECETOX) Přednáška V March 20, 2024 6 / 15 Fóry Cyklus IV: O programu níže rozhodněte: Kolik operací + proběhně? Co vypíše? 1 result = 0 2 for i in range(5): 3 for j in range(5): 4 result += i 5 result += j 6 7 print(result) Jan Böhm (RECETOX) Přednáška V March 20, 2024 7 / 15 While jinak 1 x = 408849 2 while True: 3 x -= sum([int(b) for b in str(x)]) 4 if x <= 1: 5 break Co kód dělá? Jan Böhm (RECETOX) Přednáška V March 20, 2024 8 / 15 While jinak 1 x = 408849 2 while True: 3 x -= sum([int(b) for b in str(x)]) 4 if x <= 1: 5 break Co kód dělá? Zastaví se někdy? Jan Böhm (RECETOX) Přednáška V March 20, 2024 8 / 15 While jinak 1 x = 408849 2 while True: 3 x -= sum([int(b) for b in str(x)]) 4 if x <= 1: 5 break Co kód dělá? Zastaví se někdy? Zjistěte, kolik iterací proběhne Jan Böhm (RECETOX) Přednáška V March 20, 2024 8 / 15 While jinak 1 x = 408849 2 while True: 3 x -= sum([int(b) for b in str(x)]) 4 if x <= 1: 5 break Co kód dělá? Zastaví se někdy? Zjistěte, kolik iterací proběhne Přepište kód bez použití konstrukce while True -- break Jan Böhm (RECETOX) Přednáška V March 20, 2024 8 / 15 Co nás dnes čeká 1 Neprogramování My bad for4 Tak trochu jiný while 2 Opakování matematiky Jan Böhm (RECETOX) Přednáška V March 20, 2024 9 / 15 Jan Böhm (RECETOX) Přednáška V March 20, 2024 10 / 15 Taylorův rozvoj Taylorův rozvoj Taylorův polynom slouží k lokálnímu nahrazení funkce ”jednodušší” funkcí – polynomem. Dokonce jsme schopni říct, jak takový polynom spočítat: rozumnou funkci f můžeme v okolí bodu a aproximovat polynomem f (x) ≈ f (a) 0! + f (a) 1! · (a − x) + f (a) 2! (a − x)2 + · · · + f (n)(a) n! · (a − x)n neboli f (x) ≈ n k=0 f (k)(a) k! · (a − x)k Jan Böhm (RECETOX) Přednáška V March 20, 2024 11 / 15 Taylorův rozvoj Jan Böhm (RECETOX) Přednáška V March 20, 2024 12 / 15 Aplikace: Eulerovo číslo Python sám o sobě nemá zabudovanou konstantu e – pokud ji chceme, potřebujeme e povolat z knihovny math. Proto si napíšeme vlastní funkci, která bude vracet hodnotu e. Jak na to? Jan Böhm (RECETOX) Přednáška V March 20, 2024 13 / 15 Aplikace: Eulerovo číslo Python sám o sobě nemá zabudovanou konstantu e – pokud ji chceme, potřebujeme e povolat z knihovny math. Proto si napíšeme vlastní funkci, která bude vracet hodnotu e. Jak na to? Využijeme Taylorův rozvoj funkce f (x) = ex . Funkci rozvineme v bodě 0 a pak položíme x = 1. Jan Böhm (RECETOX) Přednáška V March 20, 2024 13 / 15 Aplikace: Eulerovo číslo Python sám o sobě nemá zabudovanou konstantu e – pokud ji chceme, potřebujeme e povolat z knihovny math. Proto si napíšeme vlastní funkci, která bude vracet hodnotu e. Jak na to? Využijeme Taylorův rozvoj funkce f (x) = ex . Funkci rozvineme v bodě 0 a pak položíme x = 1. Derivace se nám budou hezky počítat: f (x) = f (x) = f (x) = · · · = ex |x=0 = 1 Jan Böhm (RECETOX) Přednáška V March 20, 2024 13 / 15 Aplikace: Eulerovo číslo Python sám o sobě nemá zabudovanou konstantu e – pokud ji chceme, potřebujeme e povolat z knihovny math. Proto si napíšeme vlastní funkci, která bude vracet hodnotu e. Jak na to? Využijeme Taylorův rozvoj funkce f (x) = ex . Funkci rozvineme v bodě 0 a pak položíme x = 1. Derivace se nám budou hezky počítat: f (x) = f (x) = f (x) = · · · = ex |x=0 = 1 Rozvoj funkce ex okolo 0 můžeme jednoduše vyjádřit jako ex ≈ n k=0 xk k! = 1 + x + x2 2! + x3 3! + . . . Jan Böhm (RECETOX) Přednáška V March 20, 2024 13 / 15 Aplikace: Eulerovo číslo Python sám o sobě nemá zabudovanou konstantu e – pokud ji chceme, potřebujeme e povolat z knihovny math. Proto si napíšeme vlastní funkci, která bude vracet hodnotu e. Jak na to? Využijeme Taylorův rozvoj funkce f (x) = ex . Funkci rozvineme v bodě 0 a pak položíme x = 1. Derivace se nám budou hezky počítat: f (x) = f (x) = f (x) = · · · = ex |x=0 = 1 Rozvoj funkce ex okolo 0 můžeme jednoduše vyjádřit jako ex ≈ n k=0 xk k! = 1 + x + x2 2! + x3 3! + . . . Speciálně pro x = 1 je e1 = e naše hledané číslo: e ≈ n k=0 1 k! Jan Böhm (RECETOX) Přednáška V March 20, 2024 13 / 15 Jan Böhm (RECETOX) Přednáška V March 20, 2024 14 / 15 Aplikace: Eulerovo číslo Stop Ještě zbývá vyřešit, kdy se sčítáním přestat - jak zvolit n. Jan Böhm (RECETOX) Přednáška V March 20, 2024 15 / 15 Aplikace: Eulerovo číslo Stop Ještě zbývá vyřešit, kdy se sčítáním přestat - jak zvolit n. Jednoduchý přístup - jakmile začnou přírůstky být příliš malé, přestaneme. Algorithm 2: How to implement function that returns e Input: tol = 0.001 ind ← 0 e ← 0 newTerm ← 1 ind! while newTerm ≥ tol do e ← e + newTerm ind ← ind + 1 newTerm ← 1 ind! return result Jan Böhm (RECETOX) Přednáška V March 20, 2024 15 / 15