mathsoftware

A course about LaTeX and SageMath
git clone https://git.tronto.net/mathsoftware
Download | Log | Files | Refs | README | LICENSE

8-SageCalculus.tex (77571B)


      1 \documentclass[11pt]{article}
      2 
      3     \usepackage[breakable]{tcolorbox}
      4     \usepackage{parskip} % Stop auto-indenting (to mimic markdown behaviour)
      5     
      6     \usepackage{iftex}
      7     \ifPDFTeX
      8     	\usepackage[T1]{fontenc}
      9     	\usepackage{mathpazo}
     10     \else
     11     	\usepackage{fontspec}
     12     \fi
     13 
     14     % Basic figure setup, for now with no caption control since it's done
     15     % automatically by Pandoc (which extracts ![](path) syntax from Markdown).
     16     \usepackage{graphicx}
     17     % Maintain compatibility with old templates. Remove in nbconvert 6.0
     18     \let\Oldincludegraphics\includegraphics
     19     % Ensure that by default, figures have no caption (until we provide a
     20     % proper Figure object with a Caption API and a way to capture that
     21     % in the conversion process - todo).
     22     \usepackage{caption}
     23     \DeclareCaptionFormat{nocaption}{}
     24     \captionsetup{format=nocaption,aboveskip=0pt,belowskip=0pt}
     25 
     26     \usepackage[Export]{adjustbox} % Used to constrain images to a maximum size
     27     \adjustboxset{max size={0.9\linewidth}{0.9\paperheight}}
     28     \usepackage{float}
     29     \floatplacement{figure}{H} % forces figures to be placed at the correct location
     30     \usepackage{xcolor} % Allow colors to be defined
     31     \usepackage{enumerate} % Needed for markdown enumerations to work
     32     \usepackage{geometry} % Used to adjust the document margins
     33     \usepackage{amsmath} % Equations
     34     \usepackage{amssymb} % Equations
     35     \usepackage{textcomp} % defines textquotesingle
     36     % Hack from http://tex.stackexchange.com/a/47451/13684:
     37     \AtBeginDocument{%
     38         \def\PYZsq{\textquotesingle}% Upright quotes in Pygmentized code
     39     }
     40     \usepackage{upquote} % Upright quotes for verbatim code
     41     \usepackage{eurosym} % defines \euro
     42     \usepackage[mathletters]{ucs} % Extended unicode (utf-8) support
     43     \usepackage{fancyvrb} % verbatim replacement that allows latex
     44     \usepackage{grffile} % extends the file name processing of package graphics 
     45                          % to support a larger range
     46     \makeatletter % fix for grffile with XeLaTeX
     47     \def\Gread@@xetex#1{%
     48       \IfFileExists{"\Gin@base".bb}%
     49       {\Gread@eps{\Gin@base.bb}}%
     50       {\Gread@@xetex@aux#1}%
     51     }
     52     \makeatother
     53 
     54     % The hyperref package gives us a pdf with properly built
     55     % internal navigation ('pdf bookmarks' for the table of contents,
     56     % internal cross-reference links, web links for URLs, etc.)
     57     \usepackage{hyperref}
     58     % The default LaTeX title has an obnoxious amount of whitespace. By default,
     59     % titling removes some of it. It also provides customization options.
     60     \usepackage{titling}
     61     \usepackage{longtable} % longtable support required by pandoc >1.10
     62     \usepackage{booktabs}  % table support for pandoc > 1.12.2
     63     \usepackage[inline]{enumitem} % IRkernel/repr support (it uses the enumerate* environment)
     64     \usepackage[normalem]{ulem} % ulem is needed to support strikethroughs (\sout)
     65                                 % normalem makes italics be italics, not underlines
     66     \usepackage{mathrsfs}
     67     
     68 
     69     
     70     % Colors for the hyperref package
     71     \definecolor{urlcolor}{rgb}{0,.145,.698}
     72     \definecolor{linkcolor}{rgb}{.71,0.21,0.01}
     73     \definecolor{citecolor}{rgb}{.12,.54,.11}
     74 
     75     % ANSI colors
     76     \definecolor{ansi-black}{HTML}{3E424D}
     77     \definecolor{ansi-black-intense}{HTML}{282C36}
     78     \definecolor{ansi-red}{HTML}{E75C58}
     79     \definecolor{ansi-red-intense}{HTML}{B22B31}
     80     \definecolor{ansi-green}{HTML}{00A250}
     81     \definecolor{ansi-green-intense}{HTML}{007427}
     82     \definecolor{ansi-yellow}{HTML}{DDB62B}
     83     \definecolor{ansi-yellow-intense}{HTML}{B27D12}
     84     \definecolor{ansi-blue}{HTML}{208FFB}
     85     \definecolor{ansi-blue-intense}{HTML}{0065CA}
     86     \definecolor{ansi-magenta}{HTML}{D160C4}
     87     \definecolor{ansi-magenta-intense}{HTML}{A03196}
     88     \definecolor{ansi-cyan}{HTML}{60C6C8}
     89     \definecolor{ansi-cyan-intense}{HTML}{258F8F}
     90     \definecolor{ansi-white}{HTML}{C5C1B4}
     91     \definecolor{ansi-white-intense}{HTML}{A1A6B2}
     92     \definecolor{ansi-default-inverse-fg}{HTML}{FFFFFF}
     93     \definecolor{ansi-default-inverse-bg}{HTML}{000000}
     94 
     95     % commands and environments needed by pandoc snippets
     96     % extracted from the output of `pandoc -s`
     97     \providecommand{\tightlist}{%
     98       \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
     99     \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
    100     % Add ',fontsize=\small' for more characters per line
    101     \newenvironment{Shaded}{}{}
    102     \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
    103     \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}}
    104     \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
    105     \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
    106     \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
    107     \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    108     \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    109     \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}}
    110     \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}}
    111     \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
    112     \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}}
    113     \newcommand{\RegionMarkerTok}[1]{{#1}}
    114     \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
    115     \newcommand{\NormalTok}[1]{{#1}}
    116     
    117     % Additional commands for more recent versions of Pandoc
    118     \newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{{#1}}}
    119     \newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    120     \newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
    121     \newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{{#1}}}
    122     \newcommand{\ImportTok}[1]{{#1}}
    123     \newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{{#1}}}}
    124     \newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    125     \newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    126     \newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{{#1}}}
    127     \newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
    128     \newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{{#1}}}
    129     \newcommand{\BuiltInTok}[1]{{#1}}
    130     \newcommand{\ExtensionTok}[1]{{#1}}
    131     \newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{{#1}}}
    132     \newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{{#1}}}
    133     \newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    134     \newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}}
    135     
    136     
    137     % Define a nice break command that doesn't care if a line doesn't already
    138     % exist.
    139     \def\br{\hspace*{\fill} \\* }
    140     % Math Jax compatibility definitions
    141     \def\gt{>}
    142     \def\lt{<}
    143     \let\Oldtex\TeX
    144     \let\Oldlatex\LaTeX
    145     \renewcommand{\TeX}{\textrm{\Oldtex}}
    146     \renewcommand{\LaTeX}{\textrm{\Oldlatex}}
    147     % Document parameters
    148     % Document title
    149     \title{Calculus and more with SageMath}
    150     \author{Sebastiano Tronto - \texttt{sebastiano.tronto@uni.lu}}
    151     \date{2021-05-07}
    152     
    153     
    154     
    155     
    156     
    157 % Pygments definitions
    158 \makeatletter
    159 \def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax%
    160     \let\PY@ul=\relax \let\PY@tc=\relax%
    161     \let\PY@bc=\relax \let\PY@ff=\relax}
    162 \def\PY@tok#1{\csname PY@tok@#1\endcsname}
    163 \def\PY@toks#1+{\ifx\relax#1\empty\else%
    164     \PY@tok{#1}\expandafter\PY@toks\fi}
    165 \def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{%
    166     \PY@it{\PY@bf{\PY@ff{#1}}}}}}}
    167 \def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}}
    168 
    169 \expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
    170 \expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
    171 \expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}}
    172 \expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    173 \expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    174 \expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}}
    175 \expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    176 \expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
    177 \expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    178 \expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
    179 \expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
    180 \expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
    181 \expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}}
    182 \expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
    183 \expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}}
    184 \expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}}
    185 \expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}}
    186 \expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}}
    187 \expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    188 \expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
    189 \expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    190 \expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    191 \expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
    192 \expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}}
    193 \expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
    194 \expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
    195 \expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    196 \expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    197 \expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
    198 \expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
    199 \expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
    200 \expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
    201 \expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
    202 \expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit}
    203 \expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf}
    204 \expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
    205 \expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}}
    206 \expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}}
    207 \expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}
    208 \expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    209 \expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    210 \expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    211 \expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    212 \expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
    213 \expandafter\def\csname PY@tok@fm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
    214 \expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
    215 \expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
    216 \expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
    217 \expandafter\def\csname PY@tok@vm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
    218 \expandafter\def\csname PY@tok@sa\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    219 \expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    220 \expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    221 \expandafter\def\csname PY@tok@dl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    222 \expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    223 \expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    224 \expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
    225 \expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    226 \expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    227 \expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    228 \expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    229 \expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    230 \expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
    231 \expandafter\def\csname PY@tok@ch\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
    232 \expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
    233 \expandafter\def\csname PY@tok@cpf\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
    234 \expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
    235 \expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
    236 
    237 \def\PYZbs{\char`\\}
    238 \def\PYZus{\char`\_}
    239 \def\PYZob{\char`\{}
    240 \def\PYZcb{\char`\}}
    241 \def\PYZca{\char`\^}
    242 \def\PYZam{\char`\&}
    243 \def\PYZlt{\char`\<}
    244 \def\PYZgt{\char`\>}
    245 \def\PYZsh{\char`\#}
    246 \def\PYZpc{\char`\%}
    247 \def\PYZdl{\char`\$}
    248 \def\PYZhy{\char`\-}
    249 \def\PYZsq{\char`\'}
    250 \def\PYZdq{\char`\"}
    251 \def\PYZti{\char`\~}
    252 % for compatibility with earlier versions
    253 \def\PYZat{@}
    254 \def\PYZlb{[}
    255 \def\PYZrb{]}
    256 \makeatother
    257 
    258 
    259     % For linebreaks inside Verbatim environment from package fancyvrb. 
    260     \makeatletter
    261         \newbox\Wrappedcontinuationbox 
    262         \newbox\Wrappedvisiblespacebox 
    263         \newcommand*\Wrappedvisiblespace {\textcolor{red}{\textvisiblespace}} 
    264         \newcommand*\Wrappedcontinuationsymbol {\textcolor{red}{\llap{\tiny$\m@th\hookrightarrow$}}} 
    265         \newcommand*\Wrappedcontinuationindent {3ex } 
    266         \newcommand*\Wrappedafterbreak {\kern\Wrappedcontinuationindent\copy\Wrappedcontinuationbox} 
    267         % Take advantage of the already applied Pygments mark-up to insert 
    268         % potential linebreaks for TeX processing. 
    269         %        {, <, #, %, $, ' and ": go to next line. 
    270         %        _, }, ^, &, >, - and ~: stay at end of broken line. 
    271         % Use of \textquotesingle for straight quote. 
    272         \newcommand*\Wrappedbreaksatspecials {% 
    273             \def\PYGZus{\discretionary{\char`\_}{\Wrappedafterbreak}{\char`\_}}% 
    274             \def\PYGZob{\discretionary{}{\Wrappedafterbreak\char`\{}{\char`\{}}% 
    275             \def\PYGZcb{\discretionary{\char`\}}{\Wrappedafterbreak}{\char`\}}}% 
    276             \def\PYGZca{\discretionary{\char`\^}{\Wrappedafterbreak}{\char`\^}}% 
    277             \def\PYGZam{\discretionary{\char`\&}{\Wrappedafterbreak}{\char`\&}}% 
    278             \def\PYGZlt{\discretionary{}{\Wrappedafterbreak\char`\<}{\char`\<}}% 
    279             \def\PYGZgt{\discretionary{\char`\>}{\Wrappedafterbreak}{\char`\>}}% 
    280             \def\PYGZsh{\discretionary{}{\Wrappedafterbreak\char`\#}{\char`\#}}% 
    281             \def\PYGZpc{\discretionary{}{\Wrappedafterbreak\char`\%}{\char`\%}}% 
    282             \def\PYGZdl{\discretionary{}{\Wrappedafterbreak\char`\$}{\char`\$}}% 
    283             \def\PYGZhy{\discretionary{\char`\-}{\Wrappedafterbreak}{\char`\-}}% 
    284             \def\PYGZsq{\discretionary{}{\Wrappedafterbreak\textquotesingle}{\textquotesingle}}% 
    285             \def\PYGZdq{\discretionary{}{\Wrappedafterbreak\char`\"}{\char`\"}}% 
    286             \def\PYGZti{\discretionary{\char`\~}{\Wrappedafterbreak}{\char`\~}}% 
    287         } 
    288         % Some characters . , ; ? ! / are not pygmentized. 
    289         % This macro makes them "active" and they will insert potential linebreaks 
    290         \newcommand*\Wrappedbreaksatpunct {% 
    291             \lccode`\~`\.\lowercase{\def~}{\discretionary{\hbox{\char`\.}}{\Wrappedafterbreak}{\hbox{\char`\.}}}% 
    292             \lccode`\~`\,\lowercase{\def~}{\discretionary{\hbox{\char`\,}}{\Wrappedafterbreak}{\hbox{\char`\,}}}% 
    293             \lccode`\~`\;\lowercase{\def~}{\discretionary{\hbox{\char`\;}}{\Wrappedafterbreak}{\hbox{\char`\;}}}% 
    294             \lccode`\~`\:\lowercase{\def~}{\discretionary{\hbox{\char`\:}}{\Wrappedafterbreak}{\hbox{\char`\:}}}% 
    295             \lccode`\~`\?\lowercase{\def~}{\discretionary{\hbox{\char`\?}}{\Wrappedafterbreak}{\hbox{\char`\?}}}% 
    296             \lccode`\~`\!\lowercase{\def~}{\discretionary{\hbox{\char`\!}}{\Wrappedafterbreak}{\hbox{\char`\!}}}% 
    297             \lccode`\~`\/\lowercase{\def~}{\discretionary{\hbox{\char`\/}}{\Wrappedafterbreak}{\hbox{\char`\/}}}% 
    298             \catcode`\.\active
    299             \catcode`\,\active 
    300             \catcode`\;\active
    301             \catcode`\:\active
    302             \catcode`\?\active
    303             \catcode`\!\active
    304             \catcode`\/\active 
    305             \lccode`\~`\~ 	
    306         }
    307     \makeatother
    308 
    309     \let\OriginalVerbatim=\Verbatim
    310     \makeatletter
    311     \renewcommand{\Verbatim}[1][1]{%
    312         %\parskip\z@skip
    313         \sbox\Wrappedcontinuationbox {\Wrappedcontinuationsymbol}%
    314         \sbox\Wrappedvisiblespacebox {\FV@SetupFont\Wrappedvisiblespace}%
    315         \def\FancyVerbFormatLine ##1{\hsize\linewidth
    316             \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
    317                 \doublehyphendemerits\z@\finalhyphendemerits\z@
    318                 \strut ##1\strut}%
    319         }%
    320         % If the linebreak is at a space, the latter will be displayed as visible
    321         % space at end of first line, and a continuation symbol starts next line.
    322         % Stretch/shrink are however usually zero for typewriter font.
    323         \def\FV@Space {%
    324             \nobreak\hskip\z@ plus\fontdimen3\font minus\fontdimen4\font
    325             \discretionary{\copy\Wrappedvisiblespacebox}{\Wrappedafterbreak}
    326             {\kern\fontdimen2\font}%
    327         }%
    328         
    329         % Allow breaks at special characters using \PYG... macros.
    330         \Wrappedbreaksatspecials
    331         % Breaks at punctuation characters . , ; ? ! and / need catcode=\active 	
    332         \OriginalVerbatim[#1,codes*=\Wrappedbreaksatpunct]%
    333     }
    334     \makeatother
    335 
    336     % Exact colors from NB
    337     \definecolor{incolor}{HTML}{303F9F}
    338     \definecolor{outcolor}{HTML}{D84315}
    339     \definecolor{cellborder}{HTML}{CFCFCF}
    340     \definecolor{cellbackground}{HTML}{F7F7F7}
    341     
    342     % prompt
    343     \makeatletter
    344     \newcommand{\boxspacing}{\kern\kvtcb@left@rule\kern\kvtcb@boxsep}
    345     \makeatother
    346     \newcommand{\prompt}[4]{
    347         \ttfamily\llap{{\color{#2}[#3]:\hspace{3pt}#4}}\vspace{-\baselineskip}
    348     }
    349     
    350 
    351     
    352     % Prevent overflowing lines due to hard-to-break entities
    353     \sloppy 
    354     % Setup hyperref package
    355     \hypersetup{
    356       breaklinks=true,  % so long urls are correctly broken across lines
    357       colorlinks=true,
    358       urlcolor=urlcolor,
    359       linkcolor=linkcolor,
    360       citecolor=citecolor,
    361       }
    362     % Slightly bigger margins than the latex defaults
    363     
    364     \geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
    365     
    366     
    367 
    368 \begin{document}
    369     
    370     \maketitle
    371     
    372     
    373 
    374     
    375     \hypertarget{symbolic-expressions}{%
    376 \section{Symbolic expressions}\label{symbolic-expressions}}
    377 
    378 \textbf{Reference:}
    379 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html}{1}{]}
    380 
    381 Last time we saw the basics of symbolic expressions: * How to define and
    382 manipulate symbolic expressions * How to introduce new variables (in the
    383 Mathematical sense) with \texttt{var()} * How to solve equations and
    384 inequalities * Some of the Mathematical constants that are included in
    385 Sage, and how to approximate them using \texttt{n()}
    386 
    387 Here are some examples to remind you of these basic things:
    388 
    389     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    390 \prompt{In}{incolor}{2}{\boxspacing}
    391 \begin{Verbatim}[commandchars=\\\{\}]
    392 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{y}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{z}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} \PY{c+c1}{\PYZsh{} Define new variables (x is already defined by Sage)}
    393 \PY{n}{f} \PY{o}{=} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{+} \PY{n}{pi}
    394 \PY{n}{g} \PY{o}{=} \PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{+} \PY{n}{y} \PY{o}{\PYZhy{}} \PY{l+m+mi}{2} \PY{o}{\PYZgt{}} \PY{l+m+mi}{0}
    395 \PY{n+nb}{print}\PY{p}{(} \PY{n}{solve}\PY{p}{(}\PY{n}{f}\PY{o}{==}\PY{l+m+mi}{0}\PY{p}{,} \PY{n}{x}\PY{p}{)} \PY{p}{)}
    396 \PY{n+nb}{print}\PY{p}{(} \PY{n}{solve}\PY{p}{(}\PY{n}{z}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}} \PY{n}{f}\PY{p}{,} \PY{n}{z}\PY{p}{)} \PY{p}{)}
    397 \PY{n+nb}{print}\PY{p}{(} \PY{n}{solve}\PY{p}{(}\PY{n}{g}\PY{p}{,} \PY{n}{y}\PY{p}{)} \PY{p}{)}
    398 \PY{n+nb}{print}\PY{p}{(} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi} \PY{o}{+} \PY{n}{e}\PY{p}{,} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{is approximately}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{n}\PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi} \PY{o}{+} \PY{n}{e}\PY{p}{)} \PY{p}{)}
    399 \end{Verbatim}
    400 \end{tcolorbox}
    401 
    402     \begin{Verbatim}[commandchars=\\\{\}]
    403 [
    404 x == -sqrt(-pi),
    405 x == sqrt(-pi)
    406 ]
    407 [
    408 z == -sqrt(pi + x\^{}2),
    409 z == sqrt(pi + x\^{}2)
    410 ]
    411 [[y < -2], [y > 1]]
    412 2*pi + e is approximately 9.00146713563863
    413     \end{Verbatim}
    414 
    415     Now we will see some more details about solving equations and
    416 manipulating their solutions.
    417 
    418     \hypertarget{solving-equations-and-inequalities}{%
    419 \subsection{Solving equations and
    420 inequalities}\label{solving-equations-and-inequalities}}
    421 
    422 \textbf{Reference}
    423 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html}{1}{]}
    424 for the details of \texttt{solve()} and \texttt{find\_root()},
    425 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/relation.html\#solving}{2}{]}
    426 for examples.
    427 
    428 Other than equations and inequalities, we can also solve systems: it is
    429 enough to give Sage a list of expressions and a list of variables with
    430 respect to which we want to solve. For example the system
    431 
    432 \begin{align*}
    433     \begin{cases}
    434         x + y = 2 \\
    435         2x - y = 6
    436     \end{cases}
    437 \end{align*}
    438 
    439 Can be solved as
    440 
    441     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    442 \prompt{In}{incolor}{40}{\boxspacing}
    443 \begin{Verbatim}[commandchars=\\\{\}]
    444 \PY{n}{solve}\PY{p}{(}\PY{p}{[}\PY{n}{x}\PY{o}{+}\PY{n}{y} \PY{o}{==} \PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{x} \PY{o}{\PYZhy{}} \PY{n}{y} \PY{o}{==} \PY{l+m+mi}{6}\PY{p}{]}\PY{p}{,} \PY{p}{[}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{]}\PY{p}{)}
    445 \end{Verbatim}
    446 \end{tcolorbox}
    447 
    448             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
    449 \prompt{Out}{outcolor}{40}{\boxspacing}
    450 \begin{Verbatim}[commandchars=\\\{\}]
    451 [[x == (8/3), y == (-2/3)]]
    452 \end{Verbatim}
    453 \end{tcolorbox}
    454         
    455     \textbf{Exercise.} Find the intersection of the circle of radius \(2\)
    456 centered in the origin and the parabula of equation \(y=x^2-2x^2+1\).
    457 
    458     \hypertarget{the-set-of-solutions}{%
    459 \subsubsection{The set of solutions}\label{the-set-of-solutions}}
    460 
    461 One would expect the result of \texttt{solve()} to be a list of
    462 solutions, but it is actually a list of expressions (technically it is
    463 not a list but a different type of Python collection, but this is not so
    464 important)
    465 
    466     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    467 \prompt{In}{incolor}{37}{\boxspacing}
    468 \begin{Verbatim}[commandchars=\\\{\}]
    469 \PY{n}{solutions} \PY{o}{=} \PY{n}{solve}\PY{p}{(}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{o}{\PYZhy{}}\PY{l+m+mi}{9} \PY{o}{==} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{x}\PY{p}{)}
    470 \PY{n}{solutions}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} \PY{c+c1}{\PYZsh{} This is the expression \PYZsq{}x == \PYZhy{}3\PYZsq{}}
    471 \end{Verbatim}
    472 \end{tcolorbox}
    473 
    474             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
    475 \prompt{Out}{outcolor}{37}{\boxspacing}
    476 \begin{Verbatim}[commandchars=\\\{\}]
    477 x == -3
    478 \end{Verbatim}
    479 \end{tcolorbox}
    480         
    481     To read the actual solution without the \texttt{x\ ==} part you can use
    482 the \texttt{rhs()} or \texttt{lhs()} functions, which can be applied to
    483 any expression containing a relation operator (like \texttt{==},
    484 \texttt{\textless{}}, \texttt{\textgreater{}=}\ldots) and return the
    485 \emph{right hand side} and \emph{left hand side} of the expression,
    486 respectively
    487 
    488     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    489 \prompt{In}{incolor}{41}{\boxspacing}
    490 \begin{Verbatim}[commandchars=\\\{\}]
    491 \PY{n}{f} \PY{o}{=}  \PY{n}{x} \PY{o}{==} \PY{l+m+mi}{2}
    492 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{rhs:}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{f}\PY{o}{.}\PY{n}{rhs}\PY{p}{(}\PY{p}{)}\PY{p}{)}
    493 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{lhs:}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{f}\PY{o}{.}\PY{n}{lhs}\PY{p}{(}\PY{p}{)}\PY{p}{)}
    494 \end{Verbatim}
    495 \end{tcolorbox}
    496 
    497     \begin{Verbatim}[commandchars=\\\{\}]
    498 rhs: 2
    499 lhs: x
    500     \end{Verbatim}
    501 
    502     When you solve an inequality or a system, the set of solutions can be
    503 more complicated to describe. In this case the result is a list
    504 containing lists of expressions that have to be \texttt{True} at the
    505 same time. It is easier to explain with an example:
    506 
    507     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    508 \prompt{In}{incolor}{38}{\boxspacing}
    509 \begin{Verbatim}[commandchars=\\\{\}]
    510 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Simple inequality:}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{solve}\PY{p}{(}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{o}{\PYZhy{}}\PY{l+m+mi}{9} \PY{o}{\PYZgt{}} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{x}\PY{p}{)}\PY{p}{)}
    511 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{System of inequalities:}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{solve}\PY{p}{(}\PY{p}{[}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{o}{\PYZhy{}}\PY{l+m+mi}{9} \PY{o}{\PYZgt{}} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{x} \PY{o}{\PYZlt{}} \PY{l+m+mi}{6}\PY{p}{]}\PY{p}{,} \PY{n}{x}\PY{p}{)}\PY{p}{)}
    512 \end{Verbatim}
    513 \end{tcolorbox}
    514 
    515     \begin{Verbatim}[commandchars=\\\{\}]
    516 Simple inequality: [[x < -3], [x > 3]]
    517 System of inequalities:
    518  [
    519 [3 < x, x < 6],
    520 [x < -3]
    521 ]
    522     \end{Verbatim}
    523 
    524     In the last example (system of inequalities), Sage is telling us that
    525 the system \begin{align*}
    526     \begin{cases}
    527         x^2-9 > 9 \\
    528         x < 6
    529     \end{cases}
    530 \end{align*} has two solutions: * \(x\) is between \(3\) and \(6\); *
    531 \(x\) is less than \(-3\).
    532 
    533 Since in Sage (and in Python) expressions can have at most on relational
    534 operator like \texttt{\textless{}}, the first solution requires two
    535 expressions to be described. Hence the ``list of lists''.
    536 
    537     \textbf{Exercise.} In the first exercise you were asked to solve a
    538 system of equations, but some of its solutions were complex numbers.
    539 Select only the real solutions and print them as pairs \((x,y)\).
    540 
    541     When solving a system of equations (not inequalities), you can use the
    542 option \texttt{solution\_dict=True} to have the solutions arranged as a
    543 \emph{dictionary}, which is a type of Python collection that we did not
    544 treat in this course
    545 
    546     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    547 \prompt{In}{incolor}{44}{\boxspacing}
    548 \begin{Verbatim}[commandchars=\\\{\}]
    549 \PY{n}{solve}\PY{p}{(}\PY{p}{[}\PY{n}{x}\PY{o}{+}\PY{n}{y} \PY{o}{==} \PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{x} \PY{o}{\PYZhy{}} \PY{n}{y} \PY{o}{==} \PY{l+m+mi}{6}\PY{p}{]}\PY{p}{,} \PY{p}{[}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{]}\PY{p}{,} \PY{n}{solution\PYZus{}dict}\PY{o}{=}\PY{k+kc}{True}\PY{p}{)}
    550 \end{Verbatim}
    551 \end{tcolorbox}
    552 
    553             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
    554 \prompt{Out}{outcolor}{44}{\boxspacing}
    555 \begin{Verbatim}[commandchars=\\\{\}]
    556 [\{x: 8/3, y: -2/3\}]
    557 \end{Verbatim}
    558 \end{tcolorbox}
    559         
    560     \hypertarget{alternative-method-for-real-roots-find_root}{%
    561 \subsubsection{\texorpdfstring{Alternative method for real roots:
    562 \texttt{find\_root()}}{Alternative method for real roots: find\_root()}}\label{alternative-method-for-real-roots-find_root}}
    563 
    564 The \texttt{solve()} method is very useful when solving \emph{symbolic}
    565 equations, for example when you have two variables and you want to solve
    566 for one of them in terms of the other. However, it does not always find
    567 explicit solutions.
    568 
    569 When you want to find an explicit, even if approximate, solution, it can
    570 be better to use \texttt{find\_root()}. This function works
    571 \emph{numerically}, which means that it finds an approximation of the
    572 root. It only works for real solutions and you need to specify an
    573 interval where you want the root to be searched:
    574 
    575     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    576 \prompt{In}{incolor}{52}{\boxspacing}
    577 \begin{Verbatim}[commandchars=\\\{\}]
    578 \PY{n}{f} \PY{o}{=} \PY{n}{e}\PY{o}{\PYZca{}}\PY{n}{x} \PY{o}{+} \PY{n}{x} \PY{o}{\PYZhy{}} \PY{l+m+mi}{10}
    579 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Using solve():}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{solve}\PY{p}{(}\PY{n}{f}\PY{p}{,} \PY{n}{x}\PY{p}{)}\PY{p}{)}
    580 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Using find\PYZus{}root():}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{f}\PY{o}{.}\PY{n}{find\PYZus{}root}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{100}\PY{p}{)}\PY{p}{)}
    581 \end{Verbatim}
    582 \end{tcolorbox}
    583 
    584     \begin{Verbatim}[commandchars=\\\{\}]
    585 Using solve():
    586  [
    587 x == -e\^{}x + 10
    588 ]
    589 Using find\_root(): 2.070579904980303
    590     \end{Verbatim}
    591 
    592     \hypertarget{evaluating-functions}{%
    593 \subsection{Evaluating functions}\label{evaluating-functions}}
    594 
    595 If an expression contains only one variable you can evaluate it easily,
    596 even if it is not a function.
    597 
    598     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    599 \prompt{In}{incolor}{21}{\boxspacing}
    600 \begin{Verbatim}[commandchars=\\\{\}]
    601 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{y}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    602 \PY{n}{f} \PY{o}{=} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{o}{\PYZhy{}}\PY{l+m+mi}{3}
    603 \PY{n}{g} \PY{o}{=} \PY{n}{x} \PY{o}{\PYZgt{}} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}
    604 
    605 \PY{n+nb}{print}\PY{p}{(}\PY{n}{f}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}
    606 \PY{n+nb}{print}\PY{p}{(}\PY{n}{g}\PY{p}{(}\PY{l+m+mi}{3}\PY{o}{+}\PY{n}{y}\PY{p}{)}\PY{p}{)}
    607 \end{Verbatim}
    608 \end{tcolorbox}
    609 
    610     \begin{Verbatim}[commandchars=\\\{\}]
    611 1
    612 y + 3 > (y + 3)\^{}2
    613     \end{Verbatim}
    614 
    615     If an expression contains more than one variable, you can specify a
    616 value for each of them and they will be substituted in alphabetic order.
    617 You can also specify a value only for some of the variables.
    618 
    619     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    620 \prompt{In}{incolor}{38}{\boxspacing}
    621 \begin{Verbatim}[commandchars=\\\{\}]
    622 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{y}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{z}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    623 
    624 \PY{n}{f} \PY{o}{=} \PY{n}{y}\PY{o}{*}\PY{n}{z}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}} \PY{n}{y} \PY{o}{==} \PY{n}{z}
    625 \PY{n+nb}{print}\PY{p}{(}\PY{n}{f}\PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{)}\PY{p}{)}
    626 \PY{n+nb}{print}\PY{p}{(}\PY{n}{f}\PY{p}{(}\PY{n}{z}\PY{o}{=}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}
    627 \end{Verbatim}
    628 \end{tcolorbox}
    629 
    630     \begin{Verbatim}[commandchars=\\\{\}]
    631 -2 == 0
    632 3*y == 2
    633     \end{Verbatim}
    634 
    635     \hypertarget{symbolic-computations}{%
    636 \subsection{Symbolic computations}\label{symbolic-computations}}
    637 
    638 Sage can understand and simplify symbolic expressions such as sums
    639 (finite or infinite) and products. In the following cell, we compute the
    640 following sums using the
    641 \href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html\#sage.symbolic.expression.Expression.sum}{\texttt{sum()}}
    642 function:
    643 
    644 \begin{align*}
    645     \begin{array}{llcc}
    646         (1) & \sum_{k=0}^nk                 &=&\frac{n^2+n}{2}\\
    647         (2) & \sum_{k=0}^nk^4               &=&\frac{6n^5+15n^4+10n^3-n}{30}\\
    648         (3) & \sum_{k=0}^n\binom nk         &=& 2^n\\
    649         (4) & \sum_{k=0}^\infty \frac1{k^2} &=& \frac{\pi^2}{6}
    650     \end{array}
    651 \end{align*}
    652 
    653     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    654 \prompt{In}{incolor}{22}{\boxspacing}
    655 \begin{Verbatim}[commandchars=\\\{\}]
    656 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{k}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{n}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} \PY{c+c1}{\PYZsh{} Remember to declare all variables}
    657 
    658 \PY{n}{s} \PY{o}{=} \PY{p}{[}\PY{p}{]}
    659 \PY{n}{s}\PY{o}{.}\PY{n}{append}\PY{p}{(}  \PY{n+nb}{sum}\PY{p}{(}\PY{n}{k}\PY{p}{,} \PY{n}{k}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{n}\PY{p}{)}  \PY{p}{)}
    660 \PY{n}{s}\PY{o}{.}\PY{n}{append}\PY{p}{(}  \PY{n+nb}{sum}\PY{p}{(}\PY{n}{k}\PY{o}{\PYZca{}}\PY{l+m+mi}{4}\PY{p}{,} \PY{n}{k}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{n}\PY{p}{)}  \PY{p}{)}
    661 \PY{n}{s}\PY{o}{.}\PY{n}{append}\PY{p}{(}  \PY{n+nb}{sum}\PY{p}{(}\PY{n}{binomial}\PY{p}{(}\PY{n}{n}\PY{p}{,}\PY{n}{k}\PY{p}{)}\PY{p}{,} \PY{n}{k}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{n}\PY{p}{)} \PY{p}{)}
    662 \PY{n}{s}\PY{o}{.}\PY{n}{append}\PY{p}{(}  \PY{n+nb}{sum}\PY{p}{(}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{k}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{p}{,} \PY{n}{k}\PY{p}{,} \PY{l+m+mi}{1}\PY{p}{,} \PY{n}{infinity}\PY{p}{)}  \PY{p}{)}
    663 
    664 \PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n+nb}{len}\PY{p}{(}\PY{n}{s}\PY{p}{)}\PY{p}{)}\PY{p}{:}
    665     \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{(}\PY{l+s+si}{\PYZob{}\PYZcb{}}\PY{l+s+s2}{) }\PY{l+s+si}{\PYZob{}\PYZcb{}}\PY{l+s+s2}{\PYZdq{}}\PY{o}{.}\PY{n}{format}\PY{p}{(}\PY{n}{i}\PY{o}{+}\PY{l+m+mi}{1}\PY{p}{,} \PY{n}{s}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{)}\PY{p}{)}
    666 \end{Verbatim}
    667 \end{tcolorbox}
    668 
    669     \begin{Verbatim}[commandchars=\\\{\}]
    670 (1) 1/2*n\^{}2 + 1/2*n
    671 (2) 1/5*n\^{}5 + 1/2*n\^{}4 + 1/3*n\^{}3 - 1/30*n
    672 (3) 2\^{}n
    673 (4) 1/6*pi\^{}2
    674     \end{Verbatim}
    675 
    676     An alternative notation is \texttt{expression.sum(k,\ a,\ b)}. There is
    677 an analogous
    678 \href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html\#sage.symbolic.expression.Expression.prod}{\texttt{prod()}}
    679 for products.
    680 
    681     Sometimes Sage tries to keep an expression in its original form without
    682 expanding out sums and products. To change this behavior you can use the
    683 \href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html\#sage.symbolic.expression.Expression.expand}{\texttt{expand()}}
    684 function:
    685 
    686     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    687 \prompt{In}{incolor}{30}{\boxspacing}
    688 \begin{Verbatim}[commandchars=\\\{\}]
    689 \PY{n}{f} \PY{o}{=} \PY{p}{(}\PY{n}{x}\PY{o}{+}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}} \PY{p}{(}\PY{n}{x}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{)}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}
    690 \PY{n+nb}{print}\PY{p}{(}\PY{n}{f}\PY{p}{)}
    691 \PY{n+nb}{print}\PY{p}{(}\PY{n}{f}\PY{o}{.}\PY{n}{expand}\PY{p}{(}\PY{p}{)}\PY{p}{)}
    692 \end{Verbatim}
    693 \end{tcolorbox}
    694 
    695     \begin{Verbatim}[commandchars=\\\{\}]
    696 (x + 1)\^{}2 - (x - 1)\^{}2
    697 4*x
    698     \end{Verbatim}
    699 
    700     \hypertarget{the-symbolic-ring}{%
    701 \subsubsection{The Symbolic Ring}\label{the-symbolic-ring}}
    702 
    703 \textbf{Reference:}
    704 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/ring.html}{3}{]}
    705 
    706 The symbolic expressions that we have seen so far live in a ring called
    707 \emph{symbolic ring} and denoted by \texttt{SR} in Sage. This ring works
    708 like the ring \texttt{ZZ} of integers or \texttt{RR} of reals numbers.
    709 In particular, you can define matrices and other objects using it as a
    710 ``basis''.
    711 
    712     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    713 \prompt{In}{incolor}{45}{\boxspacing}
    714 \begin{Verbatim}[commandchars=\\\{\}]
    715 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{a}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{b}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{c}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{d}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    716 
    717 \PY{n}{M} \PY{o}{=} \PY{n}{matrix}\PY{p}{(}\PY{p}{[}\PY{p}{[}\PY{n}{a}\PY{p}{,}\PY{n}{b}\PY{p}{]}\PY{p}{,} \PY{p}{[}\PY{n}{c}\PY{p}{,}\PY{n}{d}\PY{p}{]}\PY{p}{]}\PY{p}{)}
    718 \PY{n+nb}{print}\PY{p}{(}\PY{n}{M}\PY{o}{.}\PY{n}{determinant}\PY{p}{(}\PY{p}{)}\PY{p}{)}
    719 
    720 \PY{n}{polring}\PY{o}{.}\PY{o}{\PYZlt{}}\PY{n}{x}\PY{o}{\PYZgt{}} \PY{o}{=} \PY{n}{SR}\PY{p}{[}\PY{p}{]}
    721 \PY{n}{f} \PY{o}{=} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{+} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{a}\PY{o}{*}\PY{n}{x} \PY{o}{+} \PY{n}{a}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}
    722 \PY{n+nb}{print}\PY{p}{(}\PY{n}{f}\PY{o}{.}\PY{n}{roots}\PY{p}{(}\PY{p}{)}\PY{p}{)}
    723 \end{Verbatim}
    724 \end{tcolorbox}
    725 
    726     \begin{Verbatim}[commandchars=\\\{\}]
    727 -b*c + a*d
    728 [(-a, 2)]
    729     \end{Verbatim}
    730 
    731     \textbf{Exercise.} Compute the eigenvalues of the matrix \begin{align*}
    732 \begin{pmatrix}
    733 \cos \alpha & \sin \alpha\\
    734 -\sin\alpha & \cos \alpha
    735 \end{pmatrix}
    736 \end{align*}
    737 
    738     \hypertarget{calculus}{%
    739 \section{Calculus}\label{calculus}}
    740 
    741 \textbf{Reference:}
    742 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/index.html}{4}{]}
    743 for an overview, but most functions are described in
    744 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html}{1}{]}
    745 
    746     \hypertarget{limits-and-series}{%
    747 \subsection{Limits and series}\label{limits-and-series}}
    748 
    749 \textbf{References:}
    750 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/calculus.html\#sage.calculus.calculus.limit}{5}{]}
    751 for limits,
    752 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html\#sage.symbolic.expression.Expression.series}{6}{]}
    753 for series
    754 
    755 You can compute limits
    756 
    757     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    758 \prompt{In}{incolor}{54}{\boxspacing}
    759 \begin{Verbatim}[commandchars=\\\{\}]
    760 \PY{n}{f} \PY{o}{=} \PY{n}{sin}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{o}{/}\PY{n}{x}
    761 \PY{c+c1}{\PYZsh{} print(f(0)) \PYZsh{} This one gives an error}
    762 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{limit}\PY{p}{(}\PY{n}{x}\PY{o}{=}\PY{l+m+mi}{0}\PY{p}{)} \PY{p}{)}
    763 
    764 \PY{n+nb}{print}\PY{p}{(} \PY{p}{(}\PY{n}{e}\PY{o}{\PYZca{}}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{p}{)}\PY{p}{)}\PY{o}{.}\PY{n}{limit}\PY{p}{(}\PY{n}{x}\PY{o}{=}\PY{n}{infinity}\PY{p}{)} \PY{p}{)}
    765 \end{Verbatim}
    766 \end{tcolorbox}
    767 
    768     \begin{Verbatim}[commandchars=\\\{\}]
    769 1
    770 0
    771     \end{Verbatim}
    772 
    773     \textbf{Exercise.} Compute the constant \(e\) using a limit.
    774 
    775     You can also specify a direction for the limit. If you don't, Sage
    776 assumes that you want to take a two-sided limit.
    777 
    778     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    779 \prompt{In}{incolor}{55}{\boxspacing}
    780 \begin{Verbatim}[commandchars=\\\{\}]
    781 \PY{n}{f} \PY{o}{=} \PY{n+nb}{abs}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{o}{/}\PY{n}{x}  \PY{c+c1}{\PYZsh{} 1 if x\PYZgt{}0, \PYZhy{}1 if x\PYZlt{}0}
    782 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{limit}\PY{p}{(}\PY{n}{x}\PY{o}{=}\PY{l+m+mi}{0}\PY{p}{)} \PY{p}{)} \PY{c+c1}{\PYZsh{} undefined}
    783 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{limit}\PY{p}{(}\PY{n}{x}\PY{o}{=}\PY{l+m+mi}{0}\PY{p}{,} \PY{n+nb}{dir}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{+}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)} \PY{p}{)}
    784 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{limit}\PY{p}{(}\PY{n}{x}\PY{o}{=}\PY{l+m+mi}{0}\PY{p}{,} \PY{n+nb}{dir}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{\PYZhy{}}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)} \PY{p}{)}
    785 \end{Verbatim}
    786 \end{tcolorbox}
    787 
    788     \begin{Verbatim}[commandchars=\\\{\}]
    789 und
    790 1
    791 -1
    792     \end{Verbatim}
    793 
    794     There is also the alternative notation \texttt{limit(f,\ x,\ dir)} which
    795 does the same as \texttt{f.limit(x,\ dir)}.
    796 
    797     You can also compute series expansions up to any order. \textbf{Watch
    798 out:} the notation uses \texttt{==} instead of \texttt{=} as
    799 \texttt{limit()} does.
    800 
    801     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    802 \prompt{In}{incolor}{56}{\boxspacing}
    803 \begin{Verbatim}[commandchars=\\\{\}]
    804 \PY{n}{f} \PY{o}{=} \PY{n}{e}\PY{o}{\PYZca{}}\PY{n}{x}
    805 \PY{n}{g} \PY{o}{=} \PY{n}{sin}\PY{p}{(}\PY{n}{x}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{x}\PY{p}{)}
    806 \PY{n}{h} \PY{o}{=} \PY{n}{log}\PY{p}{(}\PY{n}{x}\PY{p}{)}
    807 
    808 \PY{n+nb}{print}\PY{p}{(}\PY{n}{f}\PY{o}{.}\PY{n}{series}\PY{p}{(}\PY{n}{x}\PY{o}{==}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)}
    809 \PY{n+nb}{print}\PY{p}{(}\PY{n}{g}\PY{o}{.}\PY{n}{series}\PY{p}{(}\PY{n}{x}\PY{o}{==}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{7}\PY{p}{)}\PY{p}{)}
    810 \PY{n+nb}{print}\PY{p}{(}\PY{n}{h}\PY{o}{.}\PY{n}{series}\PY{p}{(}\PY{n}{x}\PY{o}{==}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)}
    811 \end{Verbatim}
    812 \end{tcolorbox}
    813 
    814     \begin{Verbatim}[commandchars=\\\{\}]
    815 1 + 1*x + 1/2*x\^{}2 + Order(x\^{}3)
    816 (-2) + 1*x + 1*x\^{}2 + (-1/6)*x\^{}3 + (-1/12)*x\^{}4 + 1/120*x\^{}5 + 1/360*x\^{}6 +
    817 Order(x\^{}7)
    818 1*(x - 1) + (-1/2)*(x - 1)\^{}2 + Order((x - 1)\^{}3)
    819     \end{Verbatim}
    820 
    821     \hypertarget{derivatives}{%
    822 \subsection{Derivatives}\label{derivatives}}
    823 
    824 \textbf{References:}
    825 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html\#sage.symbolic.expression.Expression.derivative}{7}{]}
    826 and
    827 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/functional.html\#sage.calculus.functional.derivative}{8}{]}
    828 for derivatives,
    829 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/functions.html\#sage.calculus.functions.jacobian}{9}{]}
    830 for the Jacobian matrix and
    831 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html\#sage.symbolic.expression.Expression.hessian}{10}{]}
    832 for the Hessian.
    833 
    834     When computing derivatives, you need to specify with respect to which
    835 variables you want to derive, except in case there is only one.
    836 
    837     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    838 \prompt{In}{incolor}{57}{\boxspacing}
    839 \begin{Verbatim}[commandchars=\\\{\}]
    840 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{y}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    841 \PY{n+nb}{print}\PY{p}{(} \PY{p}{(}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{o}{+}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{4}\PY{p}{)}\PY{o}{.}\PY{n}{derivative}\PY{p}{(}\PY{n}{y}\PY{p}{)} \PY{p}{)} \PY{c+c1}{\PYZsh{} Alternative: derivative(f, y)}
    842 \PY{n+nb}{print}\PY{p}{(} \PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{3}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{o}{+}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{.}\PY{n}{derivative}\PY{p}{(}\PY{p}{)} \PY{p}{)}
    843 \end{Verbatim}
    844 \end{tcolorbox}
    845 
    846     \begin{Verbatim}[commandchars=\\\{\}]
    847 8*y\^{}3
    848 6*x\^{}2 - 1
    849     \end{Verbatim}
    850 
    851     You can also compute higher order derivatives:
    852 
    853     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    854 \prompt{In}{incolor}{58}{\boxspacing}
    855 \begin{Verbatim}[commandchars=\\\{\}]
    856 \PY{n+nb}{print}\PY{p}{(} \PY{p}{(}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{3}\PY{p}{)}\PY{o}{.}\PY{n}{derivative}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{n}{x}\PY{p}{)} \PY{p}{)} \PY{c+c1}{\PYZsh{} Same as (x\PYZca{}3).derivative(x, 2)}
    857 
    858 \PY{n}{f} \PY{o}{=} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{7}\PY{o}{*}\PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{+} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{4}\PY{o}{*}\PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{3} \PY{o}{+} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{5} \PY{o}{+} \PY{n}{y} \PY{o}{+} \PY{l+m+mi}{2}
    859 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{derivative}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{)} \PY{p}{)}    \PY{c+c1}{\PYZsh{} Twice in x, once in y}
    860 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{derivative}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{l+m+mi}{4}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{)} \PY{p}{)} \PY{c+c1}{\PYZsh{} 4 times in x, twice in y}
    861 \end{Verbatim}
    862 \end{tcolorbox}
    863 
    864     \begin{Verbatim}[commandchars=\\\{\}]
    865 6*x
    866 84*x\^{}5*y + 10*y\^{}4 + 24*x\^{}2*y
    867 1680*x\^{}3 + 48
    868     \end{Verbatim}
    869 
    870     Jacobian and Hessian matrices are also easy to compute:
    871 
    872     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    873 \prompt{In}{incolor}{59}{\boxspacing}
    874 \begin{Verbatim}[commandchars=\\\{\}]
    875 \PY{n}{f} \PY{o}{=} \PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{+} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{x}\PY{o}{*}\PY{n}{y}\PY{p}{,} \PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{3}\PY{p}{,} \PY{n}{x}\PY{o}{+}\PY{n}{y}\PY{o}{+}\PY{n}{x}\PY{o}{*}\PY{n}{y}\PY{p}{)}
    876 \PY{n+nb}{print}\PY{p}{(} \PY{n}{jacobian}\PY{p}{(}\PY{n}{f}\PY{p}{,} \PY{p}{[}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{]}\PY{p}{)}\PY{p}{,} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+se}{\PYZbs{}n}\PY{l+s+s2}{\PYZdq{}} \PY{p}{)}
    877 
    878 \PY{n}{g} \PY{o}{=} \PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{+} \PY{n}{x}\PY{o}{*}\PY{n}{y} \PY{o}{+} \PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{3} \PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{x}\PY{o}{*}\PY{n}{y}\PY{o}{\PYZca{}}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}}\PY{l+m+mi}{3}
    879 \PY{n+nb}{print}\PY{p}{(} \PY{n}{g}\PY{o}{.}\PY{n}{hessian}\PY{p}{(}\PY{p}{)} \PY{p}{)}
    880 \end{Verbatim}
    881 \end{tcolorbox}
    882 
    883     \begin{Verbatim}[commandchars=\\\{\}]
    884 [-2*x + 2*y        2*x]
    885 [         0      3*y\^{}2]
    886 [     y + 1      x + 1]
    887 
    888 [         2   -4*y + 1]
    889 [  -4*y + 1 -4*x + 6*y]
    890     \end{Verbatim}
    891 
    892     \emph{Note:} the notation \texttt{f.jacobian({[}x,y{]})} is also valid,
    893 but only if you specify that \texttt{f} is vector by declaring it as
    894 \texttt{f\ =\ vector({[}...{]})}.
    895 
    896     \hypertarget{integrals}{%
    897 \subsection{Integrals}\label{integrals}}
    898 
    899 \textbf{References:}
    900 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/integration/integral.html}{11}{]}
    901 for symbolic integration and
    902 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/integration.html}{12}{]}
    903 for numerical methods.
    904 
    905 You should remember from high school or from your first
    906 calculus/analysis course that derivatives are easy, but integrals are
    907 hard. When using a computer software to solve your integrals, you have
    908 two choices:
    909 
    910 \begin{enumerate}
    911 \def\labelenumi{\arabic{enumi}.}
    912 \tightlist
    913 \item
    914   You can try to compute a primitive function exactly, and then (if you
    915   are computing a definite integral) substitute the endpoints of your
    916   integration interval to get the result. We can call this
    917   \emph{symbolic integration}.
    918 \item
    919   You can get an \emph{approximated} result with a \emph{numerical
    920   method}. This method always gives some kind of result, but it cannot
    921   be used to compute indefinite integrals.
    922 \end{enumerate}
    923 
    924 Sage can do both of these things, although people that work in numerical
    925 analysis and use often the second method tend to prefer other programs,
    926 such as Matlab (or its open-source clone Octave).
    927 
    928     \hypertarget{symbolic-integration}{%
    929 \subsubsection{Symbolic integration}\label{symbolic-integration}}
    930 
    931 Symbolic integrals work more or less like derivatives. You must specify
    932 an integration variable, but the endpoints of the integration interval
    933 are optional. If they are not given you get an indefinite integral.
    934 
    935     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    936 \prompt{In}{incolor}{60}{\boxspacing}
    937 \begin{Verbatim}[commandchars=\\\{\}]
    938 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{a}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{b}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
    939 \PY{n}{f} \PY{o}{=} \PY{n}{x} \PY{o}{+} \PY{n}{sin}\PY{p}{(}\PY{n}{x}\PY{p}{)}
    940 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{integral}\PY{p}{(}\PY{n}{x}\PY{p}{)} \PY{p}{)} \PY{c+c1}{\PYZsh{} Alternative: integral(f, x)}
    941 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{integral}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mi}{10}\PY{p}{,} \PY{l+m+mi}{10}\PY{p}{)} \PY{p}{)}
    942 \PY{n+nb}{print}\PY{p}{(} \PY{n}{f}\PY{o}{.}\PY{n}{integral}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{n}{a}\PY{p}{,} \PY{n}{b}\PY{p}{)} \PY{p}{)}
    943 \end{Verbatim}
    944 \end{tcolorbox}
    945 
    946     \begin{Verbatim}[commandchars=\\\{\}]
    947 1/2*x\^{}2 - cos(x)
    948 0
    949 -1/2*a\^{}2 + 1/2*b\^{}2 + cos(a) - cos(b)
    950     \end{Verbatim}
    951 
    952     Your endpoints can also be \(\pm\infty\):
    953 
    954     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    955 \prompt{In}{incolor}{61}{\boxspacing}
    956 \begin{Verbatim}[commandchars=\\\{\}]
    957 \PY{n+nb}{print}\PY{p}{(} \PY{n}{integral}\PY{p}{(}\PY{n}{e}\PY{o}{\PYZca{}}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{p}{)}\PY{p}{,}   \PY{n}{x}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,}         \PY{n}{infinity}\PY{p}{)} \PY{p}{)}
    958 \PY{n+nb}{print}\PY{p}{(} \PY{n}{integral}\PY{p}{(}\PY{n}{e}\PY{o}{\PYZca{}}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,} \PY{n}{x}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{n}{infinity}\PY{p}{,} \PY{n}{infinity}\PY{p}{)} \PY{p}{)}
    959 \end{Verbatim}
    960 \end{tcolorbox}
    961 
    962     \begin{Verbatim}[commandchars=\\\{\}]
    963 1
    964 sqrt(pi)
    965     \end{Verbatim}
    966 
    967     The last function is also an example of an integral that perhaps you
    968 might want to compute numerically. In fact:
    969 
    970     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
    971 \prompt{In}{incolor}{65}{\boxspacing}
    972 \begin{Verbatim}[commandchars=\\\{\}]
    973 \PY{n+nb}{print}\PY{p}{(} \PY{n}{integral}\PY{p}{(}\PY{n}{e}\PY{o}{\PYZca{}}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,} \PY{n}{x}\PY{p}{)} \PY{p}{)}
    974 \PY{n+nb}{print}\PY{p}{(} \PY{n}{integral}\PY{p}{(}\PY{n}{e}\PY{o}{\PYZca{}}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,} \PY{n}{x}\PY{p}{,} \PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{)} \PY{p}{)}
    975 \end{Verbatim}
    976 \end{tcolorbox}
    977 
    978     \begin{Verbatim}[commandchars=\\\{\}]
    979 1/2*sqrt(pi)*erf(x)
    980 1/2*sqrt(pi)*erf(2) - 1/2*sqrt(pi)*erf(1)
    981     \end{Verbatim}
    982 
    983     Here \texttt{erf(x)} denotes the
    984 \href{https://en.wikipedia.org/wiki/Error_function}{error function}.
    985 
    986     \hypertarget{numerical-integration}{%
    987 \subsubsection{Numerical integration}\label{numerical-integration}}
    988 
    989 In order to get an explicit value for the computations above, we can use
    990 a \emph{numerical} method.
    991 
    992 The word ``numerical'' does not have much to do with numbers, but it
    993 refers to the fact that we are trying to compute explicit results rather
    994 than symbolic or algebraic ones.
    995 \href{https://en.wikipedia.org/wiki/Numerical_analysis}{Numerical
    996 analysis} is the branch of mathematics that studies methods to
    997 approximate computations over the real or complex numbers. With these
    998 methods there is usually a trade-off between speed and precision.
    999 
   1000 The Sage function
   1001 \href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/integration.html\#sage.calculus.integration.numerical_integral}{\texttt{numerical\_integral()}}
   1002 takes as a parameter a real-valued one-variable function and the
   1003 integration endpoints, and it returns both an approximate value for the
   1004 integral and an error estimate.
   1005 
   1006     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1007 \prompt{In}{incolor}{40}{\boxspacing}
   1008 \begin{Verbatim}[commandchars=\\\{\}]
   1009 \PY{n}{numerical\PYZus{}integral}\PY{p}{(}\PY{n}{e}\PY{o}{\PYZca{}}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,} \PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{)}
   1010 \end{Verbatim}
   1011 \end{tcolorbox}
   1012 
   1013             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
   1014 \prompt{Out}{outcolor}{40}{\boxspacing}
   1015 \begin{Verbatim}[commandchars=\\\{\}]
   1016 (0.13525725794999466, 1.5016572202374808e-15)
   1017 \end{Verbatim}
   1018 \end{tcolorbox}
   1019         
   1020     The result above means, in symbols \begin{align*}
   1021 \int_1^2 e^{-x^2}\mathrm dx = 0.13525725794999466 \pm 1.5016572202374808\times 10^{-15}
   1022 \end{align*}
   1023 
   1024 There is also a
   1025 \href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/integration.html\#sage.calculus.integration.monte_carlo_integral}{\texttt{monte\_carlo\_integral()}}
   1026 method for functions with more than one variable.
   1027 
   1028     \textbf{Exercise.} Compute the area of the ellipse of equation
   1029 \(y^2+\left(\frac x3\right)^2=1\).
   1030 
   1031     \hypertarget{differential-equations}{%
   1032 \subsection{Differential equations}\label{differential-equations}}
   1033 
   1034 \textbf{Reference:}
   1035 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/desolvers.html}{13}{]}
   1036 
   1037 A
   1038 \href{https://en.wikipedia.org/wiki/Differential_equation}{differential
   1039 equation} is an equation involving an unknwon function and its
   1040 derivatives. They can be of two kinds: \emph{ordinary} differential
   1041 equations
   1042 (\href{https://en.wikipedia.org/wiki/Ordinary_differential_equation}{ODE})
   1043 and \emph{partial} differential equations
   1044 (\href{https://en.wikipedia.org/wiki/Partial_differential_equation}{PDE}).
   1045 The latter involve multivariate functions and their partial derivatives.
   1046 
   1047 Differential equations are in general hard to solve \emph{exactly} (or
   1048 \emph{symbolically}): even a simple equation of the form \(f'(x)=g(x)\),
   1049 where \(g(x)\) is someknown function, requires solving the integral
   1050 \(\int g(x)\mathrm{d}x\) in order to find \(f\), which as we know is not
   1051 always easy!
   1052 
   1053 Theoretical results on differential equations usually ensure the
   1054 existence and/or uniquess of a solution under certain conditions, but in
   1055 general they do not give a way to solve them. There exits many methods
   1056 to find approximate solutions, and some of them are implemented in Sage
   1057 as well (see
   1058 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/desolvers.html}{13}{]}).
   1059 However we will focus on the simple ODEs that can be solved exactly.
   1060 
   1061 Let's start with a simple example. Let's find all functions \(f(x)\)
   1062 such that \(f'(x)=f(x)\). In order to do so, we need to use the
   1063 \texttt{function()} construct, which allows us to define an ``unknwon''
   1064 function inside Sage, like we define variables with \texttt{var()}.
   1065 
   1066     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1067 \prompt{In}{incolor}{4}{\boxspacing}
   1068 \begin{Verbatim}[commandchars=\\\{\}]
   1069 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{x}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
   1070 \PY{n}{function}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{f}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
   1071 \PY{n}{equation} \PY{o}{=} \PY{n}{derivative}\PY{p}{(}\PY{n}{f}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{)} \PY{o}{==} \PY{n}{f}\PY{p}{(}\PY{n}{x}\PY{p}{)}
   1072 \PY{n}{desolve}\PY{p}{(}\PY{n}{equation}\PY{p}{,} \PY{n}{f}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{)} \PY{c+c1}{\PYZsh{} f is the unknown function}
   1073 \end{Verbatim}
   1074 \end{tcolorbox}
   1075 
   1076             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
   1077 \prompt{Out}{outcolor}{4}{\boxspacing}
   1078 \begin{Verbatim}[commandchars=\\\{\}]
   1079 \_C*e\^{}x
   1080 \end{Verbatim}
   1081 \end{tcolorbox}
   1082         
   1083     As you can expect, they are all the functions \(Ce^x\) for some constant
   1084 \(C\). The constant \(C\) plays the same role as the constant in the
   1085 solution of an integral, but in this case Sage writes it explicitly.
   1086 
   1087 We can also specify \emph{initial conditions} for our function. For
   1088 example we can impose that \(f(0)=3\) as follows:
   1089 
   1090     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1091 \prompt{In}{incolor}{5}{\boxspacing}
   1092 \begin{Verbatim}[commandchars=\\\{\}]
   1093 \PY{n}{desolve}\PY{p}{(}\PY{n}{equation}\PY{p}{,} \PY{n}{f}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{3}\PY{p}{)}\PY{p}{)}
   1094 \end{Verbatim}
   1095 \end{tcolorbox}
   1096 
   1097             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
   1098 \prompt{Out}{outcolor}{5}{\boxspacing}
   1099 \begin{Verbatim}[commandchars=\\\{\}]
   1100 3*e\^{}x
   1101 \end{Verbatim}
   1102 \end{tcolorbox}
   1103         
   1104     You can also solve \emph{second order} equations, that is equations
   1105 where the second derivative also appears. In this case if you want to
   1106 specify an initial condition you should write the triple of values
   1107 \((x_0, f(x_0), f'(x_0))\).
   1108 
   1109     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1110 \prompt{In}{incolor}{6}{\boxspacing}
   1111 \begin{Verbatim}[commandchars=\\\{\}]
   1112 \PY{n}{equation} \PY{o}{=} \PY{n}{derivative}\PY{p}{(}\PY{n}{f}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{,} \PY{n}{x}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{)} \PY{o}{+} \PY{n}{x}\PY{o}{*}\PY{n}{derivative}\PY{p}{(}\PY{n}{f}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{)} \PY{o}{==} \PY{l+m+mi}{1}
   1113 \PY{n}{desolve}\PY{p}{(}\PY{n}{equation}\PY{p}{,} \PY{n}{f}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{)}\PY{p}{)}
   1114 \end{Verbatim}
   1115 \end{tcolorbox}
   1116 
   1117             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
   1118 \prompt{Out}{outcolor}{6}{\boxspacing}
   1119 \begin{Verbatim}[commandchars=\\\{\}]
   1120 -1/2*I*sqrt(2)*sqrt(pi)*integrate(erf(1/2*I*sqrt(2)*x)*e\^{}(-1/2*x\^{}2), x)
   1121 \end{Verbatim}
   1122 \end{tcolorbox}
   1123         
   1124     \textbf{Exercise.} Use Sage to find out the functions \(f(x)\) that
   1125 satisfy \begin{align*}
   1126     \begin{array}{rlcrl}
   1127         (A) &
   1128         \begin{cases}
   1129             f(0)   &= 1\\
   1130             f'(0)  &= 0\\
   1131             f''(x) &= -f(x)
   1132         \end{cases}
   1133         & \qquad \qquad &
   1134         (B) &
   1135         \begin{cases}
   1136             f(0)   &= 0\\
   1137             f'(0)  &= 1\\
   1138             f''(x) &= -f(x)
   1139         \end{cases}
   1140     \end{array}
   1141 \end{align*}
   1142 
   1143     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1144 \prompt{In}{incolor}{ }{\boxspacing}
   1145 \begin{Verbatim}[commandchars=\\\{\}]
   1146 
   1147 \end{Verbatim}
   1148 \end{tcolorbox}
   1149 
   1150     \hypertarget{a-real-world-example}{%
   1151 \subsubsection{A real-world example}\label{a-real-world-example}}
   1152 
   1153 Differential equations have countless applications in Science, so it
   1154 would be a shame not to see at least a simple one.
   1155 
   1156 Consider an object moving with constant acceleration \(a\). Its velocity
   1157 at time \(t\) is described by the formula \(v(t) = v(0) + at\). For
   1158 example an object falling from the sky has acceleration
   1159 \(g\sim 9.8 m/s^2\) towards the ground, so its velocity is
   1160 \(v(t) = -gt\).
   1161 
   1162 However in the real world you need to take into account the air's
   1163 resistance, which depends (among other things) on the velocity of the
   1164 object. In this case the acceleration \(a(t)\) is not constant anymore,
   1165 and it satisfies an equation of the form \(a(t)=-g -kv(t)\), where \(k\)
   1166 is some constant that may depend on the shape and mass of the object (in
   1167 practice it may be more complicated than this).
   1168 
   1169 Since the acceleration is the derivative of the velocity, we have a
   1170 differential equation \begin{align*}
   1171     v'(t) = -g -kv(t)
   1172 \end{align*} and we can try to solve it with Sage!
   1173 
   1174     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1175 \prompt{In}{incolor}{7}{\boxspacing}
   1176 \begin{Verbatim}[commandchars=\\\{\}]
   1177 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{t}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
   1178 \PY{n}{function}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{v}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
   1179 \PY{n}{g} \PY{o}{=} \PY{l+m+mf}{9.8}
   1180 \PY{n}{k} \PY{o}{=} \PY{l+m+mf}{1.5}
   1181 \PY{n}{conditions} \PY{o}{=} \PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{)} \PY{c+c1}{\PYZsh{} Start with velocity 0}
   1182 \PY{n}{desolve}\PY{p}{(}\PY{n}{derivative}\PY{p}{(}\PY{n}{v}\PY{p}{(}\PY{n}{t}\PY{p}{)}\PY{p}{)} \PY{o}{==} \PY{o}{\PYZhy{}}\PY{n}{g} \PY{o}{\PYZhy{}}\PY{n}{k}\PY{o}{*}\PY{n}{v}\PY{p}{(}\PY{n}{t}\PY{p}{)}\PY{p}{,} \PY{n}{v}\PY{p}{(}\PY{n}{t}\PY{p}{)}\PY{p}{,} \PY{n}{conditions}\PY{p}{)}
   1183 \end{Verbatim}
   1184 \end{tcolorbox}
   1185 
   1186             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
   1187 \prompt{Out}{outcolor}{7}{\boxspacing}
   1188 \begin{Verbatim}[commandchars=\\\{\}]
   1189 -98/15*(e\^{}(3/2*t) - 1)*e\^{}(-3/2*t)
   1190 \end{Verbatim}
   1191 \end{tcolorbox}
   1192         
   1193     If you want to solve this equation symbolically (that is, keeping \(g\)
   1194 and \(k\) in symbols) you need to specify that \(t\) is the
   1195 \emph{independent variable} of the equation:
   1196 
   1197     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1198 \prompt{In}{incolor}{10}{\boxspacing}
   1199 \begin{Verbatim}[commandchars=\\\{\}]
   1200 \PY{n}{var}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{t}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{g}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{k}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
   1201 \PY{n}{function}\PY{p}{(}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{v}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)}
   1202 \PY{n}{conditions} \PY{o}{=} \PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{)} \PY{c+c1}{\PYZsh{} Start with velocity 0}
   1203 \PY{n}{desolve}\PY{p}{(}\PY{n}{derivative}\PY{p}{(}\PY{n}{v}\PY{p}{(}\PY{n}{t}\PY{p}{)}\PY{p}{)} \PY{o}{==} \PY{o}{\PYZhy{}}\PY{n}{g} \PY{o}{\PYZhy{}}\PY{n}{k}\PY{o}{*}\PY{n}{v}\PY{p}{(}\PY{n}{t}\PY{p}{)}\PY{p}{,} \PY{n}{v}\PY{p}{(}\PY{n}{t}\PY{p}{)}\PY{p}{,} \PY{n}{conditions}\PY{p}{,} \PY{n}{ivar}\PY{o}{=}\PY{n}{t}\PY{p}{)}
   1204 \end{Verbatim}
   1205 \end{tcolorbox}
   1206 
   1207             \begin{tcolorbox}[breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0]
   1208 \prompt{Out}{outcolor}{10}{\boxspacing}
   1209 \begin{Verbatim}[commandchars=\\\{\}]
   1210 -(g*e\^{}(k*t) - g)*e\^{}(-k*t)/k
   1211 \end{Verbatim}
   1212 \end{tcolorbox}
   1213         
   1214     \hypertarget{basic-data-analysis-and-visualization}{%
   1215 \section{Basic data analysis and
   1216 visualization}\label{basic-data-analysis-and-visualization}}
   1217 
   1218 \hypertarget{statistics}{%
   1219 \subsection{Statistics}\label{statistics}}
   1220 
   1221 \textbf{References:}
   1222 {[}\href{https://doc.sagemath.org/html/en/reference/stats/sage/stats/basic_stats.html}{14}{]}
   1223 
   1224 Sage includes the most basic functions for statistical analysis.
   1225 
   1226     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1227 \prompt{In}{incolor}{20}{\boxspacing}
   1228 \begin{Verbatim}[commandchars=\\\{\}]
   1229 \PY{n}{L} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mi}{3}\PY{p}{,} \PY{l+m+mi}{3}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mi}{6}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mi}{4}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mi}{3}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mi}{4}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{]}
   1230 
   1231 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Values:}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{L}\PY{p}{)}
   1232 
   1233 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Mean:}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}           \PY{n}{mean}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{p}{)}
   1234 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Median:}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}         \PY{n}{median}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{p}{)}
   1235 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Mode:}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}           \PY{n}{mode}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{p}{)}
   1236 
   1237 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Standard deviation:}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{std}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{p}{)}
   1238 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Variance:}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+se}{\PYZbs{}t}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}         \PY{n}{variance}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{p}{)}
   1239 
   1240 \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Moving average (5):}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{moving\PYZus{}average}\PY{p}{(}\PY{n}{L}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)}\PY{p}{)}
   1241 \end{Verbatim}
   1242 \end{tcolorbox}
   1243 
   1244     \begin{Verbatim}[commandchars=\\\{\}]
   1245 Values:  [1, 2, 3, 3, -6, -2, 4, -1, 0, 2, 3, -4, 0]
   1246 Mean:                    5/13
   1247 Median:                  1
   1248 Mode:                    [3]
   1249 Standard deviation:      2*sqrt(29/13)
   1250 Variance:                116/13
   1251 Moving average (5): [3/5, 0, 2/5, -2/5, -1, 3/5, 8/5, 0, 1/5]
   1252     \end{Verbatim}
   1253 
   1254     You can also compare your data to a probability distribution, see
   1255 \href{https://doc.sagemath.org/html/en/reference/probability/sage/probability/probability_distribution.html}{this
   1256 page}. If you need to do more advanced statistics you should consider
   1257 using \href{https://www.r-project.org/}{R}; you can also use it inside
   1258 Sage.
   1259 
   1260     \hypertarget{plotting}{%
   1261 \subsection{Plotting}\label{plotting}}
   1262 
   1263 \textbf{Reference:}
   1264 {[}\href{https://doc.sagemath.org/html/en/reference/plotting/index.html}{15}{]},
   1265 more specifically the subsection
   1266 {[}\href{https://doc.sagemath.org/html/en/reference/plotting/sage/plot/plot.html}{16}{]}.
   1267 
   1268 Some Sage objects can be plotted:
   1269 
   1270     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1271 \prompt{In}{incolor}{21}{\boxspacing}
   1272 \begin{Verbatim}[commandchars=\\\{\}]
   1273 \PY{n}{f} \PY{o}{=} \PY{n}{sin}\PY{p}{(}\PY{n}{x}\PY{p}{)}
   1274 \PY{n}{plot}\PY{p}{(}\PY{n}{f}\PY{p}{)}
   1275 \end{Verbatim}
   1276 \end{tcolorbox}
   1277  
   1278             
   1279 \prompt{Out}{outcolor}{21}{}
   1280     
   1281     \begin{center}
   1282     \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_75_0.png}
   1283     \end{center}
   1284     { \hspace*{\fill} \\}
   1285     
   1286 
   1287     Sage's plotting functions are based on Python's
   1288 \href{https://matplotlib.org/}{matplotlib}.
   1289 
   1290 You can give a number of options to adjust the aspect of your plot, see
   1291 \href{https://doc.sagemath.org/html/en/reference/plotting/sage/plot/plot.html\#sage.plot.plot.plot}{here}.
   1292 Let's see some of them:
   1293 
   1294     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1295 \prompt{In}{incolor}{67}{\boxspacing}
   1296 \begin{Verbatim}[commandchars=\\\{\}]
   1297 \PY{n}{f} \PY{o}{=} \PY{n}{sin}\PY{p}{(}\PY{n}{x}\PY{p}{)}
   1298 \PY{n}{plot}\PY{p}{(}\PY{n}{f}\PY{p}{,}
   1299      \PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,} \PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,}                   \PY{c+c1}{\PYZsh{} bounds for x}
   1300      \PY{n}{ymin}  \PY{o}{=} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.7}\PY{p}{,} \PY{n}{ymax} \PY{o}{=} \PY{l+m+mf}{0.7}\PY{p}{,}      \PY{c+c1}{\PYZsh{} bounds for y}
   1301      \PY{n}{color} \PY{o}{=} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{red}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}
   1302      \PY{n}{title} \PY{o}{=} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{The sin function}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}
   1303     \PY{p}{)}
   1304 \end{Verbatim}
   1305 \end{tcolorbox}
   1306  
   1307             
   1308 \prompt{Out}{outcolor}{67}{}
   1309     
   1310     \begin{center}
   1311     \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_77_0.png}
   1312     \end{center}
   1313     { \hspace*{\fill} \\}
   1314     
   1315 
   1316     Some of the options are not described precisely in Sage's documentation,
   1317 but you can find them on
   1318 \href{https://matplotlib.org/stable/contents.html}{matplotlib's
   1319 documentation}. You can find many examples online for adjusting your
   1320 plot as you like!
   1321 
   1322     If you need to plot more than one object at the time, you can sum two
   1323 plots and show them together with \texttt{show()}:
   1324 
   1325     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1326 \prompt{In}{incolor}{36}{\boxspacing}
   1327 \begin{Verbatim}[commandchars=\\\{\}]
   1328 \PY{n}{cosine}      \PY{o}{=} \PY{n}{plot}\PY{p}{(}\PY{n}{cos}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{o}{\PYZhy{}}\PY{n}{pi}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{,}\PY{n}{pi}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,} \PY{n}{color}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{red}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
   1329 \PY{n}{exponential} \PY{o}{=} \PY{n}{plot}\PY{p}{(}\PY{n}{exp}\PY{p}{(}\PY{n}{x}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mf}{0.5}\PY{p}{)}\PY{p}{)}
   1330 
   1331 \PY{n}{show}\PY{p}{(}\PY{n}{cosine} \PY{o}{+} \PY{n}{exponential}\PY{p}{)}
   1332 \end{Verbatim}
   1333 \end{tcolorbox}
   1334 
   1335     \begin{center}
   1336     \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_80_0.png}
   1337     \end{center}
   1338     { \hspace*{\fill} \\}
   1339     
   1340     Finally, there are other types of plots that you can use, like
   1341 \href{https://doc.sagemath.org/html/en/reference/plotting/sage/plot/scatter_plot.html\#sage.plot.scatter_plot.scatter_plot}{scatter
   1342 plots} and
   1343 \href{https://doc.sagemath.org/html/en/reference/plotting/sage/plot/bar_chart.html\#sage.plot.bar_chart.bar_chart}{bar
   1344 charts}. You can also add
   1345 \href{https://doc.sagemath.org/html/en/reference/plotting/sage/plot/text.html\#sage.plot.text.text}{text}
   1346 to your plot:
   1347 
   1348     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1349 \prompt{In}{incolor}{53}{\boxspacing}
   1350 \begin{Verbatim}[commandchars=\\\{\}]
   1351 \PY{n}{b} \PY{o}{=} \PY{n}{bar\PYZus{}chart}\PY{p}{(}\PY{n+nb}{range}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{)}\PY{p}{)}
   1352 \PY{n}{s} \PY{o}{=} \PY{n}{scatter\PYZus{}plot}\PY{p}{(}\PY{p}{[}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{8}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{4}\PY{p}{,}\PY{l+m+mi}{7}\PY{p}{)}\PY{p}{]}\PY{p}{,}
   1353                  \PY{n}{marker} \PY{o}{=} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{*}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}       \PY{c+c1}{\PYZsh{} symbol}
   1354                  \PY{n}{markersize} \PY{o}{=} \PY{l+m+mi}{100}\PY{p}{,}
   1355                  \PY{n}{edgecolor}  \PY{o}{=} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{black}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,}
   1356                  \PY{n}{facecolor}  \PY{o}{=} \PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{red}\PY{l+s+s2}{\PYZdq{}}
   1357                 \PY{p}{)}
   1358 \PY{n}{t} \PY{o}{=} \PY{n}{text}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{wow, such plot!}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{8}\PY{p}{)}\PY{p}{,} \PY{n}{color}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{black}\PY{l+s+s2}{\PYZdq{}}\PY{p}{,} \PY{n}{fontsize}\PY{o}{=}\PY{l+m+mi}{20}\PY{p}{)}
   1359 \PY{n}{show}\PY{p}{(}\PY{n}{b} \PY{o}{+} \PY{n}{s} \PY{o}{+} \PY{n}{t}\PY{p}{)}
   1360 \end{Verbatim}
   1361 \end{tcolorbox}
   1362 
   1363     \begin{center}
   1364     \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_82_0.png}
   1365     \end{center}
   1366     { \hspace*{\fill} \\}
   1367     
   1368     \hypertarget{interpolation}{%
   1369 \subsection{Interpolation}\label{interpolation}}
   1370 
   1371 \textbf{References:}
   1372 {[}\href{https://doc.sagemath.org/html/en/reference/polynomial_rings/sage/rings/polynomial/polynomial_ring.html\#sage.rings.polynomial.polynomial_ring.PolynomialRing_field.lagrange_polynomial}{17}{]}
   1373 and
   1374 {[}\href{https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/interpolation.html}{18}{]}.
   1375 
   1376 When you need to work with a discrete set of data, like measurements of
   1377 real-world quantities, it can be useful to visualize a ``smoothed out''
   1378 version of this data, for example by plotting a function that
   1379 approximates it.
   1380 
   1381 One way to do so is finding the lowest-degree polynomial that passes
   1382 through all your points. This is called
   1383 \href{https://en.wikipedia.org/wiki/Lagrange_polynomial}{Lagrange
   1384 Polynomial}.
   1385 
   1386     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1387 \prompt{In}{incolor}{65}{\boxspacing}
   1388 \begin{Verbatim}[commandchars=\\\{\}]
   1389 \PY{n}{points} \PY{o}{=} \PY{p}{[} \PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mf}{1.5}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{2}\PY{p}{,}\PY{l+m+mi}{4}\PY{p}{)}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{3}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)} \PY{p}{]}
   1390 \PY{n}{polring}\PY{o}{.}\PY{o}{\PYZlt{}}\PY{n}{x}\PY{o}{\PYZgt{}} \PY{o}{=} \PY{n}{QQ}\PY{p}{[}\PY{p}{]} \PY{c+c1}{\PYZsh{} you need to specify a polynomial ring}
   1391 \PY{n}{lp} \PY{o}{=} \PY{n}{polring}\PY{o}{.}\PY{n}{lagrange\PYZus{}polynomial}\PY{p}{(}\PY{n}{points}\PY{p}{)}
   1392 \PY{n}{show}\PY{p}{(}\PY{n}{scatter\PYZus{}plot}\PY{p}{(}\PY{n}{points}\PY{p}{,} \PY{n}{facecolor}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{red}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
   1393      \PY{o}{+} \PY{n}{plot}\PY{p}{(}\PY{n}{lp}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{3}\PY{p}{)} \PY{c+c1}{\PYZsh{} slightly different notation for polynomials}
   1394      \PY{o}{+} \PY{n}{text}\PY{p}{(}\PY{n}{lp}\PY{p}{,} \PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{8}\PY{p}{)}\PY{p}{,} \PY{n}{color}\PY{o}{=}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{black}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
   1395     \PY{p}{)}
   1396 \end{Verbatim}
   1397 \end{tcolorbox}
   1398 
   1399     \begin{center}
   1400     \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_84_0.png}
   1401     \end{center}
   1402     { \hspace*{\fill} \\}
   1403     
   1404     One can compute the Lagrange Polynomial over any base ring, and it has
   1405 the advantage that it is a very ``nice'' function (continuous and
   1406 differentiable as much as you like, with easily computable derivatives
   1407 and primitives).
   1408 
   1409 However, it does not always give you good approximation of your data:
   1410 
   1411     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1412 \prompt{In}{incolor}{2}{\boxspacing}
   1413 \begin{Verbatim}[commandchars=\\\{\}]
   1414 \PY{n}{R} \PY{o}{=} \PY{p}{[}\PY{n}{x}\PY{o}{/}\PY{l+m+mi}{10} \PY{k}{for} \PY{n}{x} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m+mi}{10}\PY{p}{,}\PY{l+m+mi}{10}\PY{p}{)}\PY{p}{]}
   1415 \PY{n}{L} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{1}\PY{o}{/}\PY{p}{(}\PY{l+m+mi}{1}\PY{o}{+}\PY{l+m+mi}{25}\PY{o}{*}\PY{n}{x}\PY{o}{\PYZca{}}\PY{l+m+mi}{2}\PY{p}{)} \PY{k}{for} \PY{n}{x} \PY{o+ow}{in} \PY{n}{R}\PY{p}{]}
   1416 \PY{n}{points} \PY{o}{=} \PY{p}{[}\PY{p}{(}\PY{n}{R}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{,} \PY{n}{L}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{)} \PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n+nb}{len}\PY{p}{(}\PY{n}{L}\PY{p}{)}\PY{p}{)}\PY{p}{]}
   1417 \PY{n}{polring}\PY{o}{.}\PY{o}{\PYZlt{}}\PY{n}{x}\PY{o}{\PYZgt{}} \PY{o}{=} \PY{n}{RR}\PY{p}{[}\PY{p}{]}
   1418 \PY{n}{lp} \PY{o}{=} \PY{n}{polring}\PY{o}{.}\PY{n}{lagrange\PYZus{}polynomial}\PY{p}{(}\PY{n}{points}\PY{p}{)}
   1419 
   1420 \PY{n}{show}\PY{p}{(}\PY{n}{plot}\PY{p}{(}\PY{n}{lp}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{0.82}\PY{p}{,} \PY{l+m+mf}{0.72}\PY{p}{)} \PY{o}{+} \PY{n}{scatter\PYZus{}plot}\PY{p}{(}\PY{n}{points}\PY{p}{)}\PY{p}{)}
   1421 \end{Verbatim}
   1422 \end{tcolorbox}
   1423 
   1424     \begin{center}
   1425     \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_86_0.png}
   1426     \end{center}
   1427     { \hspace*{\fill} \\}
   1428     
   1429     This particular example is called
   1430 \href{https://en.wikipedia.org/wiki/Runge\%27s_phenomenon}{Runge's
   1431 phenomenon}. For a better approximation you can use a
   1432 \href{https://en.wikipedia.org/wiki/Spline_(mathematics)}{spline}, which
   1433 is a \emph{piecewise} polynomial function:
   1434 
   1435     \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
   1436 \prompt{In}{incolor}{90}{\boxspacing}
   1437 \begin{Verbatim}[commandchars=\\\{\}]
   1438 \PY{n}{show}\PY{p}{(}\PY{n}{plot}\PY{p}{(}\PY{n}{spline}\PY{p}{(}\PY{n}{points}\PY{p}{)}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{1}\PY{p}{)} \PY{o}{+} \PY{n}{scatter\PYZus{}plot}\PY{p}{(}\PY{n}{points}\PY{p}{)}\PY{p}{)}
   1439 \end{Verbatim}
   1440 \end{tcolorbox}
   1441 
   1442     \begin{center}
   1443     \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_88_0.png}
   1444     \end{center}
   1445     { \hspace*{\fill} \\}
   1446     
   1447     A detailed explanation of splines is a good topic for a course of
   1448 numerical analysis. For this course it is enough that you know that they
   1449 exist and they can be plotted.
   1450 
   1451 
   1452     % Add a bibliography block to the postdoc
   1453     
   1454     
   1455     
   1456 \end{document}