CalculusWithJuliaNotes.jl/quarto/0e7f54ed/derivatives/taylor_series_polynomials.html
2022-08-11 13:15:19 -04:00

2582 lines
263 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.0.32">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>Calculus with Julia - 35&nbsp; Taylor Polynomials and other Approximating Polynomials</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
<script src="../site_libs/quarto-nav/quarto-nav.js"></script>
<script src="../site_libs/quarto-nav/headroom.min.js"></script>
<script src="../site_libs/clipboard/clipboard.min.js"></script>
<script src="../site_libs/quarto-search/autocomplete.umd.js"></script>
<script src="../site_libs/quarto-search/fuse.min.js"></script>
<script src="../site_libs/quarto-search/quarto-search.js"></script>
<meta name="quarto:offset" content="../">
<link href="../integrals/area.html" rel="next">
<link href="../derivatives/related_rates.html" rel="prev">
<script src="../site_libs/quarto-html/quarto.js"></script>
<script src="../site_libs/quarto-html/popper.min.js"></script>
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
"collapse-after": 3,
"panel-placement": "end",
"type": "overlay",
"limit": 20,
"language": {
"search-no-results-text": "No results",
"search-matching-documents-text": "matching documents",
"search-copy-link-title": "Copy link to search",
"search-hide-matches-text": "Hide additional matches",
"search-more-match-text": "more match in this document",
"search-more-matches-text": "more matches in this document",
"search-clear-button-title": "Clear",
"search-detached-cancel-button-title": "Cancel",
"search-submit-button-title": "Submit"
}
}</script>
<script async="" src="https://hypothes.is/embed.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" integrity="sha512-c3Nl8+7g4LMSTdrm621y7kf9v3SDPnhxLNhcjFJbKECVnmZHTdo+IRO05sNLTH/D3vA6u1X32ehoLC7WFVdheg==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script>
<script type="application/javascript">define('jquery', [],function() {return window.jQuery;})</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js" type="text/javascript"></script>
</head>
<body class="nav-sidebar floating nav-fixed">
<div id="quarto-search-results"></div>
<header id="quarto-header" class="headroom fixed-top">
<nav class="navbar navbar-expand-lg navbar-dark ">
<div class="navbar-container container-fluid">
<a class="navbar-brand" href="../index.html">
<img src="../logo.png" alt="">
<span class="navbar-title">Calculus with Julia</span>
</a>
<div id="quarto-search" class="" title="Search"></div>
</div> <!-- /container-fluid -->
</nav>
<nav class="quarto-secondary-nav" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar" aria-controls="quarto-sidebar" aria-expanded="false" aria-label="Toggle sidebar navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<div class="container-fluid d-flex justify-content-between">
<h1 class="quarto-secondary-nav-title"><span class="chapter-number">35</span>&nbsp; <span class="chapter-title">Taylor Polynomials and other Approximating Polynomials</span></h1>
<button type="button" class="quarto-btn-toggle btn" aria-label="Show secondary navigation">
<i class="bi bi-chevron-right"></i>
</button>
</div>
</nav>
</header>
<!-- content -->
<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
<!-- sidebar -->
<nav id="quarto-sidebar" class="sidebar collapse sidebar-navigation floating overflow-auto">
<div class="mt-2 flex-shrink-0 align-items-center">
<div class="sidebar-search">
<div id="quarto-search" class="" title="Search"></div>
</div>
</div>
<div class="sidebar-menu-container">
<ul class="list-unstyled mt-1">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../index.html" class="sidebar-item-text sidebar-link">Preface</a>
</div>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-1" aria-expanded="false">Precalculus Concepts</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-1" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-1" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/calculator.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">1</span>&nbsp; <span class="chapter-title">From calculator to computer</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/variables.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">2</span>&nbsp; <span class="chapter-title">Variables</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/numbers_types.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">3</span>&nbsp; <span class="chapter-title">Number systems</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/logical_expressions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">4</span>&nbsp; <span class="chapter-title">Inequalities, Logical expressions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/vectors.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">5</span>&nbsp; <span class="chapter-title">Vectors</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/ranges.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">6</span>&nbsp; <span class="chapter-title">Ranges and Sets</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/functions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">7</span>&nbsp; <span class="chapter-title">Functions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/plotting.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">8</span>&nbsp; <span class="chapter-title">The Graph of a Function</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/transformations.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">9</span>&nbsp; <span class="chapter-title">Function manipulations</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/inversefunctions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">10</span>&nbsp; <span class="chapter-title">The Inverse of a Function</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/polynomial.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">11</span>&nbsp; <span class="chapter-title">Polynomials</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/polynomial_roots.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">12</span>&nbsp; <span class="chapter-title">Roots of a polynomial</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/polynomials_package.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">13</span>&nbsp; <span class="chapter-title">The Polynomials package</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/rational_functions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">14</span>&nbsp; <span class="chapter-title">Rational functions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/exp_log_functions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">15</span>&nbsp; <span class="chapter-title">Exponential and logarithmic functions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/trig_functions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">16</span>&nbsp; <span class="chapter-title">Trigonometric functions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../precalc/julia_overview.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">17</span>&nbsp; <span class="chapter-title">Overview of Julia commands</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-2" aria-expanded="false">Limits</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-2" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-2" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../limits/limits.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">18</span>&nbsp; <span class="chapter-title">Limits</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../limits/limits_extensions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">19</span>&nbsp; <span class="chapter-title">Limits, issues, extensions of the concept</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../limits/continuity.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">20</span>&nbsp; <span class="chapter-title">Continuity</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../limits/intermediate_value_theorem.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">21</span>&nbsp; <span class="chapter-title">Implications of continuity</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-3" aria-expanded="true">Derivatives</a>
<a class="sidebar-item-toggle text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-3" aria-expanded="true">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-3" class="collapse list-unstyled sidebar-section depth1 show">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/derivatives.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">22</span>&nbsp; <span class="chapter-title">Derivatives</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/numeric_derivatives.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">23</span>&nbsp; <span class="chapter-title">Numeric derivatives</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/symbolic_derivatives.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">24</span>&nbsp; <span class="chapter-title">Symbolic derivatives</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/mean_value_theorem.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">25</span>&nbsp; <span class="chapter-title">The mean value theorem for differentiable functions.</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/optimization.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">26</span>&nbsp; <span class="chapter-title">Optimization</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/first_second_derivatives.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">27</span>&nbsp; <span class="chapter-title">The first and second derivatives</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/curve_sketching.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">28</span>&nbsp; <span class="chapter-title">Curve Sketching</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/linearization.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">29</span>&nbsp; <span class="chapter-title">Linearization</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/newtons_method.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">30</span>&nbsp; <span class="chapter-title">Newtons method</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/more_zeros.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">31</span>&nbsp; <span class="chapter-title">Derivative-free alternatives to Newtons method</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/lhospitals_rule.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">32</span>&nbsp; <span class="chapter-title">LHospitals Rule</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/implicit_differentiation.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">33</span>&nbsp; <span class="chapter-title">Implicit Differentiation</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/related_rates.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">34</span>&nbsp; <span class="chapter-title">Related rates</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../derivatives/taylor_series_polynomials.html" class="sidebar-item-text sidebar-link active"><span class="chapter-number">35</span>&nbsp; <span class="chapter-title">Taylor Polynomials and other Approximating Polynomials</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-4" aria-expanded="false">Integrals</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-4" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-4" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/area.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">36</span>&nbsp; <span class="chapter-title">Area under a curve</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/ftc.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">37</span>&nbsp; <span class="chapter-title">Fundamental Theorem or Calculus</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/substitution.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">38</span>&nbsp; <span class="chapter-title">Substitution</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/integration_by_parts.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">39</span>&nbsp; <span class="chapter-title">Integration By Parts</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/partial_fractions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">40</span>&nbsp; <span class="chapter-title">Partial Fractions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/improper_integrals.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">41</span>&nbsp; <span class="chapter-title">Improper Integrals</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/mean_value_theorem.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">42</span>&nbsp; <span class="chapter-title">Mean value theorem for integrals</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/area_between_curves.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">43</span>&nbsp; <span class="chapter-title">Area between two curves</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/center_of_mass.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">44</span>&nbsp; <span class="chapter-title">Center of Mass</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/volumes_slice.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">45</span>&nbsp; <span class="chapter-title">Volumes by slicing</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/arc_length.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">46</span>&nbsp; <span class="chapter-title">Arc length</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integrals/surface_area.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">47</span>&nbsp; <span class="chapter-title">Surface Area</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-5" aria-expanded="false">ODEs</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-5" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-5" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../ODEs/odes.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">48</span>&nbsp; <span class="chapter-title">ODEs</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../ODEs/euler.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">49</span>&nbsp; <span class="chapter-title">Eulers method</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../ODEs/solve.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">50</span>&nbsp; <span class="chapter-title">The problem-algorithm-solve interface</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../ODEs/differential_equations.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">51</span>&nbsp; <span class="chapter-title">The <code>DifferentialEquations</code> suite</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-6" aria-expanded="false">Differential vector calculus</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-6" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-6" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../differentiable_vector_calculus/polar_coordinates.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">52</span>&nbsp; <span class="chapter-title">Polar Coordinates and Curves</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../differentiable_vector_calculus/vectors.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">53</span>&nbsp; <span class="chapter-title">Vectors and matrices</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../differentiable_vector_calculus/vector_valued_functions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">54</span>&nbsp; <span class="chapter-title">Vector-valued functions, <span class="math inline">\(f:R \rightarrow R^n\)</span></span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../differentiable_vector_calculus/scalar_functions.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">55</span>&nbsp; <span class="chapter-title">Scalar functions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../differentiable_vector_calculus/scalar_functions_applications.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">56</span>&nbsp; <span class="chapter-title">Applications with scalar functions</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../differentiable_vector_calculus/vector_fields.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">57</span>&nbsp; <span class="chapter-title">Functions <span class="math inline">\(R^n \rightarrow R^m\)</span></span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../differentiable_vector_calculus/plots_plotting.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">58</span>&nbsp; <span class="chapter-title">2D and 3D plots in Julia with Plots</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-7" aria-expanded="false">Integral vector calculus</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-7" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-7" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integral_vector_calculus/double_triple_integrals.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">59</span>&nbsp; <span class="chapter-title">Multi-dimensional integrals</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integral_vector_calculus/line_integrals.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">60</span>&nbsp; <span class="chapter-title">Line and Surface Integrals</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integral_vector_calculus/div_grad_curl.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">61</span>&nbsp; <span class="chapter-title">The Gradient, Divergence, and Curl</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integral_vector_calculus/stokes_theorem.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">62</span>&nbsp; <span class="chapter-title">Greens Theorem, Stokes Theorem, and the Divergence Theorem</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../integral_vector_calculus/review.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">63</span>&nbsp; <span class="chapter-title">Quick Review of Vector Calculus</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-8" aria-expanded="false">Alternatives</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-8" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-8" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../alternatives/plotly_plotting.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">64</span>&nbsp; <span class="chapter-title">JavaScript based plotting libraries</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../alternatives/makie_plotting.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">65</span>&nbsp; <span class="chapter-title">Calculus plots with Makie</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item sidebar-item-section">
<div class="sidebar-item-container">
<a class="sidebar-item-text sidebar-link text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-9" aria-expanded="false">Appendices</a>
<a class="sidebar-item-toggle text-start collapsed" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-9" aria-expanded="false">
<i class="bi bi-chevron-right ms-2"></i>
</a>
</div>
<ul id="quarto-sidebar-section-9" class="collapse list-unstyled sidebar-section depth1 ">
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../misc/getting_started_with_julia.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">66</span>&nbsp; <span class="chapter-title">Getting started with Julia</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../misc/julia_interfaces.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">67</span>&nbsp; <span class="chapter-title">Julia interfaces</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../misc/calculus_with_julia.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">68</span>&nbsp; <span class="chapter-title">The <code>CalculusWithJulia</code> package</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../misc/unicode.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">69</span>&nbsp; <span class="chapter-title">Usages of Unicode symbols</span></a>
</div>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../misc/quick_notes.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">70</span>&nbsp; <span class="chapter-title">Quick introduction to Calculus with Julia</span></a>
</div>
</li>
</ul>
</li>
<li class="sidebar-item">
<div class="sidebar-item-container">
<a href="../references.html" class="sidebar-item-text sidebar-link">References</a>
</div>
</li>
</ul>
</div>
</nav>
<!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc">
<h2 id="toc-title">Table of contents</h2>
<ul>
<li><a href="#the-secant-line-and-the-tangent-line" id="toc-the-secant-line-and-the-tangent-line" class="nav-link active" data-scroll-target="#the-secant-line-and-the-tangent-line"> <span class="header-section-number">35.1</span> The secant line and the tangent line</a></li>
<li><a href="#quadratic-approximations-interpolating-polynomials" id="toc-quadratic-approximations-interpolating-polynomials" class="nav-link" data-scroll-target="#quadratic-approximations-interpolating-polynomials"> <span class="header-section-number">35.2</span> Quadratic approximations; interpolating polynomials</a></li>
<li><a href="#the-taylor-polynomial-of-degree-n" id="toc-the-taylor-polynomial-of-degree-n" class="nav-link" data-scroll-target="#the-taylor-polynomial-of-degree-n"> <span class="header-section-number">35.3</span> The Taylor polynomial of degree <span class="math inline">\(n\)</span></a>
<ul class="collapse">
<li><a href="#plotting" id="toc-plotting" class="nav-link" data-scroll-target="#plotting"> <span class="header-section-number">35.3.1</span> Plotting</a></li>
</ul></li>
<li><a href="#questions" id="toc-questions" class="nav-link" data-scroll-target="#questions"> <span class="header-section-number">35.4</span> Questions</a></li>
<li><a href="#appendix" id="toc-appendix" class="nav-link" data-scroll-target="#appendix"> <span class="header-section-number">35.5</span> Appendix</a></li>
</ul>
<div class="toc-actions"><div><i class="bi bi-github"></i></div><div class="action-links"><p><a href="https://github.com/jverzani/CalculusWithJuliaNotes.jl/edit/main/quarto/derivatives/taylor_series_polynomials.qmd" class="toc-action">Edit this page</a></p><p><a href="https://github.com/jverzani/CalculusWithJuliaNotes.jl/issues/new" class="toc-action">Report an issue</a></p></div></div></nav>
</div>
<!-- main -->
<main class="content" id="quarto-document-content">
<header id="title-block-header" class="quarto-title-block default">
<div class="quarto-title">
<h1 class="title d-none d-lg-block"><span class="chapter-number">35</span>&nbsp; <span class="chapter-title">Taylor Polynomials and other Approximating Polynomials</span></h1>
</div>
<div class="quarto-title-meta">
</div>
</header>
<p>This section uses these add-on packages:</p>
<div class="sourceCode cell-code" id="cb1"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="im">using</span> <span class="bu">CalculusWithJulia</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="im">using</span> <span class="bu">Plots</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="im">using</span> <span class="bu">SymPy</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="im">using</span> <span class="bu">Unitful</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<p>The tangent line was seen to be the “best” linear approximation to a function at a point <span class="math inline">\(c\)</span>. Approximating a function by a linear function gives an easier to use approximation at the expense of accuracy. It suggests a tradeoff between ease and accuracy. Is there a way to gain more accuracy at the expense of ease?</p>
<p>Quadratic functions are still fairly easy to work with. Is it possible to find the best “quadratic” approximation to a function at a point <span class="math inline">\(c\)</span>.</p>
<p>More generally, for a given <span class="math inline">\(n\)</span>, what would be the best polynomial of degree <span class="math inline">\(n\)</span> to approximate <span class="math inline">\(f(x)\)</span> at <span class="math inline">\(c\)</span>?</p>
<p>We will see in this section how the Taylor polynomial answers these questions, and is the appropriate generalization of the tangent line approximation.</p>
<div class="cell" data-cache="true" data-hold="true" data-execution_count="4">
<div class="cell-output cell-output-display" data-execution_count="5">
<div class="d-flex justify-content-center"> <figure class="figure"> <img src="data:image/gif;base64,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" class="card-img-top figure-img" alt="A Figure">
<figcaption class="figure-caption"><div class="markdown"><p>Illustration of the Taylor polynomial of degree \(k\), \(T_k(x)\), at \(c=0\) and its graph overlayed on that of the function \(1 - \cos(x)\).</p>
</div> </figcaption>
</figure>
</div>
</div>
</div>
<section id="the-secant-line-and-the-tangent-line" class="level2" data-number="35.1">
<h2 data-number="35.1" class="anchored" data-anchor-id="the-secant-line-and-the-tangent-line"><span class="header-section-number">35.1</span> The secant line and the tangent line</h2>
<p>We approach this general problem <strong>much</strong> more indirectly than is needed. We introducing notations that are attributed to Newton and proceed from there. By leveraging <code>SymPy</code> we avoid tedious computations and <em>hopefully</em> gain some insight.</p>
<p>Suppose <span class="math inline">\(f(x)\)</span> is a function which is defined in a neighborhood of <span class="math inline">\(c\)</span> and has as many continuous derivatives as we care to take at <span class="math inline">\(c\)</span>.</p>
<p>We have two related formulas:</p>
<ul>
<li>The <em>secant line</em> connecting <span class="math inline">\((c, f(c))\)</span> and <span class="math inline">\((c+h, f(c+h))\)</span> for a value of <span class="math inline">\(h&gt;0\)</span> is given in point-slope form by</li>
</ul>
<p><span class="math display">\[
sl(x) = f(c) + \frac{(f(c+h) - f(c))}{h} \cdot (x-c).
\]</span></p>
<p>The slope is the familiar approximation to the derivative: <span class="math inline">\((f(c+h)-f(c))/h\)</span>.</p>
<ul>
<li>The <em>tangent line</em> to the graph of <span class="math inline">\(f(x)\)</span> at <span class="math inline">\(x=c\)</span> is described by the function</li>
</ul>
<p><span class="math display">\[
tl(x) = f(c) + f'(c) \cdot(x - c).
\]</span></p>
<p>The key is the term multiplying <span class="math inline">\((x-c)\)</span> for the secant line is an approximation to the related term for the tangent line. That is, the secant line approximates the tangent line, which is the linear function that best approximates the function at the point <span class="math inline">\((c, f(c))\)</span>. This is quantified by the <em>mean value theorem</em> which states under our assumptions on <span class="math inline">\(f(x)\)</span> that there exists some <span class="math inline">\(\xi\)</span> between <span class="math inline">\(x\)</span> and <span class="math inline">\(c\)</span> for which:</p>
<p><span class="math display">\[
f(x) - tl(x) = \frac{f''(\xi)}{2} \cdot (x-c)^2.
\]</span></p>
<p>The term “best” is deserved, as any other straight line will differ at least in an <span class="math inline">\((x-c)\)</span> term, which in general is larger than an <span class="math inline">\((x-c)^2\)</span> term for <span class="math inline">\(x\)</span> “near” <span class="math inline">\(c\)</span>.</p>
<p>(This is a consequence of Cauchys mean value theorem with <span class="math inline">\(F(c) = f(c) - f'(c)\cdot(c-x)\)</span> and <span class="math inline">\(G(c) = (c-x)^2\)</span></p>
<p><span class="math display">\[
\begin{align*}
\frac{F'(\xi)}{G'(\xi)} &amp;=
\frac{f'(\xi) - f''(\xi)(\xi-x) - f(\xi)\cdot 1}{2(\xi-x)} \\
&amp;= -f''(\xi)/2\\
&amp;= \frac{F(c) - F(x)}{G(c) - G(x)}\\
&amp;= \frac{f(c) - f'(c)(c-x) - (f(x) - f'(x)(x-x))}{(c-x)^2 - (x-x)^2} \\
&amp;= \frac{f(c) + f'(c)(x-c) - f(x)}{(x-c)^2}
\end{align*}
\]</span></p>
<p>That is, <span class="math inline">\(f(x) = f(c) + f'(c)(x-c) + f''(\xi)/2\cdot(x-c)^2\)</span>, or <span class="math inline">\(f(x)-tl(x)\)</span> is as described.)</p>
<p>The secant line also has an interpretation that will generalize - it is the smallest order polynomial that goes through, or <em>interpolates</em>, the points <span class="math inline">\((c,f(c))\)</span> and <span class="math inline">\((c+h, f(c+h))\)</span>. This is obvious from the construction - as this is how the slope is derived - but from the formula itself requires showing <span class="math inline">\(tl(c) = f(c)\)</span> and <span class="math inline">\(tl(c+h) = f(c+h)\)</span>. The former is straightforward, as <span class="math inline">\((c-c) = 0\)</span>, so clearly <span class="math inline">\(tl(c) = f(c)\)</span>. The latter requires a bit of algebra.</p>
<p>We have:</p>
<blockquote class="blockquote">
<p>The best <em>linear</em> approximation at a point <span class="math inline">\(c\)</span> is related to the <em>linear</em> polynomial interpolating the points <span class="math inline">\(c\)</span> and <span class="math inline">\(c+h\)</span> as <span class="math inline">\(h\)</span> goes to <span class="math inline">\(0\)</span>.</p>
</blockquote>
<p>This is the relationship we seek to generalize through our round about approach below:</p>
<blockquote class="blockquote">
<p>The best approximation at a point <span class="math inline">\(c\)</span> by a polynomial of degree <span class="math inline">\(n\)</span> or less is related to the polynomial interpolating through the points <span class="math inline">\(c, c+h, \dots, c+nh\)</span> as <span class="math inline">\(h\)</span> goes to <span class="math inline">\(0\)</span>.</p>
</blockquote>
<p>As in the linear case, there is flexibility in the exact points chosen for the interpolation.</p>
<hr>
<p>Now, we take a small detour to define some notation. Instead of writing our two points as <span class="math inline">\(c\)</span> and <span class="math inline">\(c+h,\)</span> we use <span class="math inline">\(x_0\)</span> and <span class="math inline">\(x_1\)</span>. For any set of points <span class="math inline">\(x_0, x_1, \dots, x_n\)</span>, define the <strong>divided differences</strong> of <span class="math inline">\(f\)</span> inductively, as follows:</p>
<p><span class="math display">\[
\begin{align}
f[x_0] &amp;= f(x_0) \\
f[x_0, x_1] &amp;= \frac{f[x_1] - f[x_0]}{x_1 - x_0}\\
\cdots &amp;\\
f[x_0, x_1, x_2, \dots, x_n] &amp;= \frac{f[x_1, \dots, x_n] - f[x_0, x_1, x_2, \dots, x_{n-1}]}{x_n - x_0}.
\end{align}
\]</span></p>
<p>We see the first two values look familiar, and to generate more we just take certain ratios akin to those formed when finding a secant line.</p>
<p>With this notation the secant line can be re-expressed as:</p>
<p><span class="math display">\[
sl(x) = f[c] + f[c, c+h] \cdot (x-c).
\]</span></p>
<p>If we think of <span class="math inline">\(f[c, c+h]\)</span> as an approximate <em>first</em> derivative, we have an even stronger parallel between a secant line <span class="math inline">\(x=c\)</span> and the tangent line at <span class="math inline">\(x=c\)</span>: <span class="math inline">\(tl(x) = f(c) + f'(c)\cdot (x-c)\)</span>.</p>
<p>We use <code>SymPy</code> to investigate. First we create a <em>recursive</em> function to compute the divided differences:</p>
<div class="cell" data-execution_count="5">
<div class="sourceCode cell-code" id="cb2"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">divided_differences</span>(f, x) <span class="op">=</span> <span class="fu">f</span>(x)</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> <span class="fu">divided_differences</span>(f, x, xs<span class="op">...</span>)</span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> xs <span class="op">=</span> <span class="fu">sort</span>(<span class="fu">vcat</span>(x, xs<span class="op">...</span>))</span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> (<span class="fu">divided_differences</span>(f, xs[<span class="fl">2</span><span class="op">:</span><span class="kw">end</span>]<span class="op">...</span>) <span class="op">-</span> <span class="fu">divided_differences</span>(f, xs[<span class="fl">1</span><span class="op">:</span><span class="kw">end</span><span class="op">-</span><span class="fl">1</span>]<span class="op">...</span>)) <span class="op">/</span> (xs[<span class="kw">end</span>] <span class="op">-</span> xs[<span class="fl">1</span>])</span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="6">
<pre><code>divided_differences (generic function with 2 methods)</code></pre>
</div>
</div>
<p>In the following, by adding a <code>getindex</code> method, we enable the <code>[]</code> notation of Newton to work with symbolic functions, like <code>u()</code> defined below, which is used in place of <span class="math inline">\(f\)</span>:</p>
<div class="cell" data-execution_count="6">
<div class="sourceCode cell-code" id="cb4"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="bu">Base</span>.<span class="fu">getindex</span>(u<span class="op">::</span><span class="dt">SymFunction</span>, xs<span class="op">...</span>) <span class="op">=</span> <span class="fu">divided_differences</span>(u, xs<span class="op">...</span>)</span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="pp">@syms</span> x<span class="op">::</span><span class="dt">real </span>c<span class="op">::</span><span class="dt">real </span>h<span class="op">::</span><span class="dt">positive </span><span class="fu">u</span>()</span>
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a>ex <span class="op">=</span> u[c, c<span class="op">+</span>h]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="7">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\frac{- u{\left(c \right)} + u{\left(c + h \right)}}{h}
\]
</span>
</div>
</div>
<p>We can take a limit and see the familiar (yet differently represented) value of <span class="math inline">\(u'(c)\)</span>:</p>
<div class="cell" data-execution_count="7">
<div class="sourceCode cell-code" id="cb5"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="fu">limit</span>(ex, h <span class="op">=&gt;</span> <span class="fl">0</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="8">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\left. \frac{d}{d \xi_{1}} u{\left(\xi_{1} \right)} \right|_{\substack{ \xi_{1}=c }}
\]
</span>
</div>
</div>
<p>The choice of points is flexible. Here we use <span class="math inline">\(c-h\)</span> and <span class="math inline">\(c+h\)</span>:</p>
<div class="cell" data-execution_count="8">
<div class="sourceCode cell-code" id="cb6"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">limit</span>(u[c<span class="op">-</span>h, c<span class="op">+</span>h], h<span class="op">=&gt;</span><span class="fl">0</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="9">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\left. \frac{d}{d \xi_{1}} u{\left(\xi_{1} \right)} \right|_{\substack{ \xi_{1}=c }}
\]
</span>
</div>
</div>
<p>Now, lets look at:</p>
<div class="cell" data-execution_count="9">
<div class="sourceCode cell-code" id="cb7"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>ex₂ <span class="op">=</span> u[c, c<span class="op">+</span>h, c<span class="op">+</span><span class="fl">2</span>h]</span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a><span class="fu">simplify</span>(ex₂)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="10">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\frac{u{\left(c \right)} - 2 u{\left(c + h \right)} + u{\left(c + 2 h \right)}}{2 h^{2}}
\]
</span>
</div>
</div>
<p>Not so bad after simplification. The limit shows this to be an approximation to the second derivative divided by <span class="math inline">\(2\)</span>:</p>
<div class="cell" data-execution_count="10">
<div class="sourceCode cell-code" id="cb8"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="fu">limit</span>(ex₂, h <span class="op">=&gt;</span> <span class="fl">0</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="11">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\frac{\left. \frac{d^{2}}{d \xi_{1}^{2}} u{\left(\xi_{1} \right)} \right|_{\substack{ \xi_{1}=c }}}{2}
\]
</span>
</div>
</div>
<p>(The expression is, up to a divisor of <span class="math inline">\(2\)</span>, the second order forward <a href="http://tinyurl.com/n4235xy">difference equation</a>, a well-known approximation to <span class="math inline">\(f''\)</span>.)</p>
<p>This relationship between higher-order divided differences and higher-order derivatives generalizes. This is expressed in this <a href="http://tinyurl.com/zjogv83">theorem</a>:</p>
<blockquote class="blockquote">
<p>Suppose <span class="math inline">\(m=x_0 &lt; x_1 &lt; x_2 &lt; \dots &lt; x_n=M\)</span> are distinct points. If <span class="math inline">\(f\)</span> has <span class="math inline">\(n\)</span> continuous derivatives then there exists a value <span class="math inline">\(\xi\)</span>, where <span class="math inline">\(m &lt; \xi &lt; M\)</span>, satisfying:</p>
</blockquote>
<p><span class="math display">\[
f[x_0, x_1, \dots, x_n] = \frac{1}{n!} \cdot f^{(n)}(\xi).
\]</span></p>
<p>This immediately applies to the above, where we parameterized by <span class="math inline">\(h\)</span>: <span class="math inline">\(x_0=c, x_1=c+h, x_2 = c+2h\)</span>. For then, as <span class="math inline">\(h\)</span> goes to <span class="math inline">\(0\)</span>, it must be that <span class="math inline">\(m, M \rightarrow c\)</span>, and so the limit of the divided differences must converge to <span class="math inline">\((1/2!) \cdot f^{(2)}(c)\)</span>, as <span class="math inline">\(f^{(2)}(\xi)\)</span> converges to <span class="math inline">\(f^{(2)}(c)\)</span>.</p>
<p>A proof based on Rolles theorem appears in the appendix.</p>
</section>
<section id="quadratic-approximations-interpolating-polynomials" class="level2" data-number="35.2">
<h2 data-number="35.2" class="anchored" data-anchor-id="quadratic-approximations-interpolating-polynomials"><span class="header-section-number">35.2</span> Quadratic approximations; interpolating polynomials</h2>
<p>Why the fuss? The answer comes from a result of Newton on <em>interpolating</em> polynomials. Consider a function <span class="math inline">\(f\)</span> and <span class="math inline">\(n+1\)</span> points <span class="math inline">\(x_0\)</span>, <span class="math inline">\(x_1, \dots, x_n\)</span>. Then an interpolating polynomial is a polynomial of least degree that goes through each point <span class="math inline">\((x_i, f(x_i))\)</span>. The <a href="https://en.wikipedia.org/wiki/Newton_polynomial">Newton form</a> of such a polynomial can be written as:</p>
<p><span class="math display">\[
\begin{align*}
f[x_0] &amp;+ f[x_0,x_1] \cdot (x-x_0) + f[x_0, x_1, x_2] \cdot (x-x_0) \cdot (x-x_1) + \\
&amp; \cdots + f[x_0, x_1, \dots, x_n] \cdot (x-x_0)\cdot \cdots \cdot (x-x_{n-1}).
\end{align*}
\]</span></p>
<p>The case <span class="math inline">\(n=0\)</span> gives the value <span class="math inline">\(f[x_0] = f(c)\)</span>, which can be interpreted as the slope-<span class="math inline">\(0\)</span> line that goes through the point <span class="math inline">\((c,f(c))\)</span>.</p>
<p>We are familiar with the case <span class="math inline">\(n=1\)</span>, with <span class="math inline">\(x_0=c\)</span> and <span class="math inline">\(x_1=c+h\)</span>, this becomes our secant-line formula:</p>
<p><span class="math display">\[
f[c] + f[c, c+h](x-c).
\]</span></p>
<p>As mentioned, we can verify directly that it interpolates the points <span class="math inline">\((c,f(c))\)</span> and <span class="math inline">\((c+h, f(c+h))\)</span>. He we let <code>SymPy</code> do the algebra:</p>
<div class="cell" data-execution_count="11">
<div class="sourceCode cell-code" id="cb9"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>p₁ <span class="op">=</span> u[c] <span class="op">+</span> u[c, c<span class="op">+</span>h] <span class="op">*</span> (x<span class="op">-</span>c)</span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a><span class="fu">p₁</span>(x <span class="op">=&gt;</span> c) <span class="op">-</span> <span class="fu">u</span>(c), <span class="fu">p₁</span>(x <span class="op">=&gt;</span> c<span class="op">+</span>h) <span class="op">-</span> <span class="fu">u</span>(c<span class="op">+</span>h)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="12">
<pre><code>(0, 0)</code></pre>
</div>
</div>
<p>Now for something new. Take the <span class="math inline">\(n=2\)</span> case with <span class="math inline">\(x_0 = c\)</span>, <span class="math inline">\(x_1 = c + h\)</span>, and <span class="math inline">\(x_2 = c+2h\)</span>. Then the interpolating polynomial is:</p>
<p><span class="math display">\[
f[c] + f[c, c+h](x-c) + f[c, c+h, c+2h](x-c)(x-(c+h)).
\]</span></p>
<p>We add the next term to our previous polynomial and simplify</p>
<div class="cell" data-execution_count="12">
<div class="sourceCode cell-code" id="cb11"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>p₂ <span class="op">=</span> p₁ <span class="op">+</span> u[c, c<span class="op">+</span>h, c<span class="op">+</span><span class="fl">2</span>h] <span class="op">*</span> (x<span class="op">-</span>c) <span class="op">*</span> (<span class="fu">x-</span>(c<span class="op">+</span>h))</span>
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a><span class="fu">simplify</span>(p₂)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="13">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\frac{h^{2} u{\left(c \right)} + h \left(c - x\right) \left(u{\left(c \right)} - u{\left(c + h \right)}\right) + \frac{\left(c - x\right) \left(c + h - x\right) \left(u{\left(c \right)} - 2 u{\left(c + h \right)} + u{\left(c + 2 h \right)}\right)}{2}}{h^{2}}
\]
</span>
</div>
</div>
<p>We can check that this interpolates the three points. Notice that at <span class="math inline">\(x_0=c\)</span> and <span class="math inline">\(x_1=c+h\)</span>, the last term, <span class="math inline">\(f[x_0, x_1, x_2]\cdot(x-x_0)(x-x_1)\)</span>, vanishes, so we already have the polynomial interpolating there. Only the value <span class="math inline">\(x_2=c+2h\)</span> remains to be checked:</p>
<div class="cell" data-execution_count="13">
<div class="sourceCode cell-code" id="cb12"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="fu">p₂</span>(x <span class="op">=&gt;</span> c<span class="op">+</span><span class="fl">2</span>h) <span class="op">-</span> <span class="fu">u</span>(c<span class="op">+</span><span class="fl">2</span>h)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="14">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
h \left(- \frac{- u{\left(c \right)} + u{\left(c + h \right)}}{h} + \frac{- u{\left(c + h \right)} + u{\left(c + 2 h \right)}}{h}\right) - u{\left(c \right)} + 2 u{\left(c + h \right)} - u{\left(c + 2 h \right)}
\]
</span>
</div>
</div>
<p>Hmm, doesnt seem correct - that was supposed to be <span class="math inline">\(0\)</span>. The issue isnt the math, it is that SymPy needs to be encouraged to simplify:</p>
<div class="cell" data-execution_count="14">
<div class="sourceCode cell-code" id="cb13"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="fu">simplify</span>(<span class="fu">p₂</span>(x <span class="op">=&gt;</span> c<span class="op">+</span><span class="fl">2</span>h) <span class="op">-</span> <span class="fu">u</span>(c<span class="op">+</span><span class="fl">2</span>h))</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="15">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
0
\]
</span>
</div>
</div>
<p>By contrast, at the point <span class="math inline">\(x=c+3h\)</span> we have no guarantee of interpolation, and indeed dont, as this expression is non always zero:</p>
<div class="cell" data-execution_count="15">
<div class="sourceCode cell-code" id="cb14"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="fu">simplify</span>(<span class="fu">p₂</span>(x <span class="op">=&gt;</span> c<span class="op">+</span><span class="fl">3</span>h) <span class="op">-</span> <span class="fu">u</span>(c<span class="op">+</span><span class="fl">3</span>h))</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="16">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
u{\left(c \right)} - 3 u{\left(c + h \right)} + 3 u{\left(c + 2 h \right)} - u{\left(c + 3 h \right)}
\]
</span>
</div>
</div>
<p>Interpolating polynomials are of interest in their own right, but for now we want to use them as motivation for the best polynomial approximation of a certain degree for a function. Motivated by how the secant line leads to the tangent line, we note that coefficients of the quadratic interpolating polynomial above have limits as <span class="math inline">\(h\)</span> goes to <span class="math inline">\(0\)</span>, leaving this polynomial:</p>
<p><span class="math display">\[
f(c) + f'(c) \cdot (x-c) + \frac{1}{2!} \cdot f''(c) (x-c)^2.
\]</span></p>
<p>This is clearly related to the tangent line approximation of <span class="math inline">\(f(x)\)</span> at <span class="math inline">\(x=c\)</span>, but carrying an extra quadratic term.</p>
<p>Here we visualize the approximations with the function <span class="math inline">\(f(x) = \cos(x)\)</span> at <span class="math inline">\(c=0\)</span>.</p>
<div class="cell" data-hold="true" data-execution_count="16">
<div class="sourceCode cell-code" id="cb15"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="fu">f</span>(x) <span class="op">=</span> <span class="fu">cos</span>(x)</span>
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a>a, b <span class="op">=</span> <span class="op">-</span><span class="cn">pi</span><span class="op">/</span><span class="fl">2</span>, <span class="cn">pi</span><span class="op">/</span><span class="fl">2</span></span>
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a>c <span class="op">=</span> <span class="fl">0</span></span>
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true" tabindex="-1"></a>h <span class="op">=</span> <span class="fl">1</span><span class="op">/</span><span class="fl">4</span></span>
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true" tabindex="-1"></a>fp <span class="op">=</span> <span class="fu">-sin</span>(c) <span class="co"># by hand, or use diff(f), ...</span></span>
<span id="cb15-7"><a href="#cb15-7" aria-hidden="true" tabindex="-1"></a>fpp <span class="op">=</span> <span class="fu">-cos</span>(c)</span>
<span id="cb15-8"><a href="#cb15-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-9"><a href="#cb15-9" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb15-10"><a href="#cb15-10" aria-hidden="true" tabindex="-1"></a>p <span class="op">=</span> <span class="fu">plot</span>(f, a, b, linewidth<span class="op">=</span><span class="fl">5</span>, legend<span class="op">=</span><span class="cn">false</span>, color<span class="op">=:</span>blue)</span>
<span id="cb15-11"><a href="#cb15-11" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(p, <span class="fu">x-&gt;f</span>(c) <span class="op">+</span> <span class="fu">fp*</span>(x<span class="op">-</span>c), a, b; color<span class="op">=:</span>green, alpha<span class="op">=</span><span class="fl">0.25</span>, linewidth<span class="op">=</span><span class="fl">5</span>) <span class="co"># tangent line is flat</span></span>
<span id="cb15-12"><a href="#cb15-12" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(p, <span class="fu">x-&gt;f</span>(c) <span class="op">+</span> <span class="fu">fp*</span>(x<span class="op">-</span>c) <span class="op">+</span> (<span class="fl">1</span><span class="op">/</span><span class="fl">2</span>)<span class="fu">*fpp*</span>(x<span class="op">-</span>c)<span class="op">^</span><span class="fl">2</span>, a, b; color<span class="op">=:</span>green, alpha<span class="op">=</span><span class="fl">0.25</span>, linewidth<span class="op">=</span><span class="fl">5</span>) <span class="co"># a parabola</span></span>
<span id="cb15-13"><a href="#cb15-13" aria-hidden="true" tabindex="-1"></a>p</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="17">
<p><img src="taylor_series_polynomials_files/figure-html/cell-17-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>This graph illustrates that the extra quadratic term can track the curvature of the function, whereas the tangent line itself cant. So, we have a polynomial which is a “better” approximation, is it the best approximation?</p>
<p>The Cauchy mean value theorem, as in the case of the tangent line, will guarantee the existence of <span class="math inline">\(\xi\)</span> between <span class="math inline">\(c\)</span> and <span class="math inline">\(x\)</span>, for which</p>
<p><span class="math display">\[
f(x) - \left(f(c) + f'(c) \cdot(x-c) + \frac{1}{2}\cdot f''(c) \cdot (x-c)^2 \right) =
\frac{1}{3!}f'''(\xi) \cdot (x-c)^3.
\]</span></p>
<p>In this sense, the above quadratic polynomial, called the Taylor Polynomial of degree 2, is the best <em>quadratic</em> approximation to <span class="math inline">\(f\)</span>, as the difference goes to <span class="math inline">\(0\)</span> at a rate of <span class="math inline">\((x-c)^3\)</span>.</p>
<p>The graphs of the secant line and approximating parabola for <span class="math inline">\(h=1/4\)</span> are similar:</p>
<div class="cell" data-hold="true" data-execution_count="17">
<div class="sourceCode cell-code" id="cb16"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="fu">f</span>(x) <span class="op">=</span> <span class="fu">cos</span>(x)</span>
<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a>a, b <span class="op">=</span> <span class="op">-</span><span class="cn">pi</span><span class="op">/</span><span class="fl">2</span>, <span class="cn">pi</span><span class="op">/</span><span class="fl">2</span></span>
<span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a>c <span class="op">=</span> <span class="fl">0</span></span>
<span id="cb16-4"><a href="#cb16-4" aria-hidden="true" tabindex="-1"></a>h <span class="op">=</span> <span class="fl">1</span><span class="op">/</span><span class="fl">4</span></span>
<span id="cb16-5"><a href="#cb16-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-6"><a href="#cb16-6" aria-hidden="true" tabindex="-1"></a>x0, x1, x2 <span class="op">=</span> c<span class="op">-</span>h, c, c<span class="op">+</span>h</span>
<span id="cb16-7"><a href="#cb16-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-8"><a href="#cb16-8" aria-hidden="true" tabindex="-1"></a>f0 <span class="op">=</span> <span class="fu">divided_differences</span>(f, x0)</span>
<span id="cb16-9"><a href="#cb16-9" aria-hidden="true" tabindex="-1"></a>fd <span class="op">=</span> <span class="fu">divided_differences</span>(f, x0, x1)</span>
<span id="cb16-10"><a href="#cb16-10" aria-hidden="true" tabindex="-1"></a>fdd <span class="op">=</span> <span class="fu">divided_differences</span>(f, x0, x1, x2)</span>
<span id="cb16-11"><a href="#cb16-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-12"><a href="#cb16-12" aria-hidden="true" tabindex="-1"></a>p <span class="op">=</span> <span class="fu">plot</span>(f, a, b, color<span class="op">=:</span>blue, linewidth<span class="op">=</span><span class="fl">5</span>, legend<span class="op">=</span><span class="cn">false</span>)</span>
<span id="cb16-13"><a href="#cb16-13" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(p, x <span class="op">-&gt;</span> f0 <span class="op">+</span> <span class="fu">fd*</span>(x<span class="op">-</span>x0), a, b, color<span class="op">=:</span>green, alpha<span class="op">=</span><span class="fl">0.25</span>, linewidth<span class="op">=</span><span class="fl">5</span>);</span>
<span id="cb16-14"><a href="#cb16-14" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(p, x <span class="op">-&gt;</span> f0 <span class="op">+</span> <span class="fu">fd*</span>(x<span class="op">-</span>x0) <span class="op">+</span> fdd <span class="op">*</span> (x<span class="op">-</span>x0)<span class="fu">*</span>(x<span class="op">-</span>x1), a,b, color<span class="op">=:</span>green, alpha<span class="op">=</span><span class="fl">0.25</span>, linewidth<span class="op">=</span><span class="fl">5</span>);</span>
<span id="cb16-15"><a href="#cb16-15" aria-hidden="true" tabindex="-1"></a>p</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="18">
<p><img src="taylor_series_polynomials_files/figure-html/cell-18-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>Though similar, the graphs are <strong>not</strong> identical, as the interpolating polynomials arent the best approximations. For example, in the tangent-line graph the parabola only intersects the cosine graph at <span class="math inline">\(x=0\)</span>, whereas for the secant-line graph - by definition - the parabola intersects the graph at least <span class="math inline">\(2\)</span> times and the interpolating polynomial <span class="math inline">\(3\)</span> times (at <span class="math inline">\(x_0\)</span>, <span class="math inline">\(x_1\)</span>, and <span class="math inline">\(x_2\)</span>).</p>
<section id="example" class="level5">
<h5 class="anchored" data-anchor-id="example">Example</h5>
<p>Consider the function <span class="math inline">\(f(t) = \log(1 + t)\)</span>. We have mentioned that for <span class="math inline">\(t\)</span> small, the value <span class="math inline">\(t\)</span> is a good approximation. A better one becomes:</p>
<p><span class="math display">\[
f(0) + f'(0) \cdot t + \frac{1}{2} \cdot f''(0) \cdot t^2 = 0 + 1t - \frac{t^2}{2}
\]</span></p>
<p>A graph shows the difference:</p>
<div class="cell" data-hold="true" data-execution_count="18">
<div class="sourceCode cell-code" id="cb17"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="fu">f</span>(t) <span class="op">=</span> <span class="fu">log</span>(<span class="fl">1</span> <span class="op">+</span> t)</span>
<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a>a, b <span class="op">=</span> <span class="op">-</span><span class="fl">1</span><span class="op">/</span><span class="fl">2</span>, <span class="fl">1</span></span>
<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(f, a, b, legend<span class="op">=</span><span class="cn">false</span>, linewidth<span class="op">=</span><span class="fl">5</span>)</span>
<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(t <span class="op">-&gt;</span> t, a, b)</span>
<span id="cb17-5"><a href="#cb17-5" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(t <span class="op">-&gt;</span> t <span class="op">-</span> t<span class="op">^</span><span class="fl">2</span><span class="op">/</span><span class="fl">2</span>, a, b)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="19">
<p><img src="taylor_series_polynomials_files/figure-html/cell-19-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>Though we can see that the tangent line is a good approximation, the quadratic polynomial tracks the logarithm better farther from <span class="math inline">\(c=0\)</span>.</p>
</section>
<section id="example-1" class="level5">
<h5 class="anchored" data-anchor-id="example-1">Example</h5>
<p>A wire is bent in the form of a half circle with radius <span class="math inline">\(R\)</span> centered at <span class="math inline">\((0,R)\)</span>, so the bottom of the wire is at the origin. A bead is released on the wire at angle <span class="math inline">\(\theta\)</span>. As time evolves, the bead will slide back and forth. How? (Ignoring friction.)</p>
<p>Let <span class="math inline">\(U\)</span> be the potential energy, <span class="math inline">\(U=mgh = mgR \cdot (1 - \cos(\theta))\)</span>. The velocity of the object will depend on <span class="math inline">\(\theta\)</span> - it will be <span class="math inline">\(0\)</span> at the high point, and largest in magnitude at the bottom - and is given by <span class="math inline">\(v(\theta) = R \cdot d\theta/ dt\)</span>. (The bead moves along the wire so its distance traveled is <span class="math inline">\(R\cdot \Delta \theta\)</span>, this, then, is just the time derivative of distance.)</p>
<p>By ignoring friction, the total energy is conserved giving:</p>
<p><span class="math display">\[
K = \frac{1}{2}m v^2 + mgR \cdot (1 - \cos(\theta) =
\frac{1}{2} m R^2 (\frac{d\theta}{dt})^2 + mgR \cdot (1 - \cos(\theta)).
\]</span></p>
<p>The value of <span class="math inline">\(1-\cos(\theta)\)</span> inhibits further work which would be possible were there an easier formula there. In fact, we could try the excellent approximation <span class="math inline">\(1 - \theta^2/2\)</span> from the quadratic approximation. Then we have:</p>
<p><span class="math display">\[
K \approx \frac{1}{2} m R^2 (\frac{d\theta}{dt})^2 + mgR \cdot (1 - \theta^2/2).
\]</span></p>
<p>Assuming equality and differentiating in <span class="math inline">\(t\)</span> gives by the chain rule:</p>
<p><span class="math display">\[
0 = \frac{1}{2} m R^2 2\frac{d\theta}{dt} \cdot \frac{d^2\theta}{dt^2} - mgR \theta\cdot \frac{d\theta}{dt}.
\]</span></p>
<p>This can be solved to give this relationship:</p>
<p><span class="math display">\[
\frac{d^2\theta}{dt^2} = - \frac{g}{R}\theta.
\]</span></p>
<p>The solution to this “equation” can be written (in some parameterization) as <span class="math inline">\(\theta(t)=A\cos \left(\omega t+\phi \right)\)</span>. This motion is the well-studied simple <a href="https://en.wikipedia.org/wiki/Harmonic_oscillator">harmonic oscillator</a>, a model for a simple pendulum.</p>
</section>
<section id="example-optimization" class="level4">
<h4 class="anchored" data-anchor-id="example-optimization">Example: optimization</h4>
<p>Consider the following approach to finding the minimum or maximum of a function:</p>
<ul>
<li>At <span class="math inline">\(x_k\)</span> fit a quadratic polynomial to <span class="math inline">\(f(x)\)</span> matching the derivative and second derivative of <span class="math inline">\(f\)</span>.</li>
<li>Let <span class="math inline">\(x_{k+1}\)</span> be at the vertex of this fitted quadratic polynomial</li>
<li>Iterate to convergence</li>
</ul>
<p>The polynomial in question will be the Taylor polynomial of degree <span class="math inline">\(2\)</span>:</p>
<p><span class="math display">\[
T_2(x_k) = f(x_k) + f'(x_k)(x-x_k) + \frac{f''(x_k)}{2}(x - x_k)^2
\]</span></p>
<p>The vertex of this quadratic polynomial will be when its derivative is <span class="math inline">\(0\)</span> which can be solved for <span class="math inline">\(x_{k+1}\)</span> giving:</p>
<p><span class="math display">\[
x_{k+1} = x_k - \frac{f'(x_k)}{f''(x_k)}.
\]</span></p>
<p>This assumes <span class="math inline">\(f''(x_k)\)</span> is non-zero.</p>
<p>On inspection, it is seen that this is Newtons method applied to <span class="math inline">\(f'(x)\)</span>. This method, when convergent, finds a zero of <span class="math inline">\(f'(x)\)</span>. We know that should the algorithm converge, it will have found a critical point, not necessarily a value for a local extrema.</p>
</section>
</section>
<section id="the-taylor-polynomial-of-degree-n" class="level2" data-number="35.3">
<h2 data-number="35.3" class="anchored" data-anchor-id="the-taylor-polynomial-of-degree-n"><span class="header-section-number">35.3</span> The Taylor polynomial of degree <span class="math inline">\(n\)</span></h2>
<p>Starting with the Newton form of the interpolating polynomial of smallest degree:</p>
<p><span class="math display">\[
\begin{align*}
f[x_0] &amp;+ f[x_0,x_1] \cdot (x - x_0) + f[x_0, x_1, x_2] \cdot (x - x_0)\cdot(x-x_1) + \\
&amp; \cdots + f[x_0, x_1, \dots, x_n] \cdot (x-x_0) \cdot \cdots \cdot (x-x_{n-1}).
\end{align*}
\]</span></p>
<p>and taking <span class="math inline">\(x_i = c + i\cdot h\)</span>, for a given <span class="math inline">\(n\)</span>, we have in the limit as <span class="math inline">\(h &gt; 0\)</span> goes to zero that coefficients of this polynomial converge to the coefficients of the <em>Taylor Polynomial of degree n</em>:</p>
<p><span class="math display">\[
f(c) + f'(c)\cdot(x-c) + \frac{f''(c)}{2!}(x-c)^2 + \cdots + \frac{f^{(n)}(c)}{n!} (x-c)^n.
\]</span></p>
<p>This polynomial will be the best approximation of degree <span class="math inline">\(n\)</span> or less to the function <span class="math inline">\(f\)</span>, near <span class="math inline">\(c\)</span>. The error will be given - again by an application of the Cauchy mean value theorem:</p>
<p><span class="math display">\[
\frac{1}{(n+1)!} \cdot f^{(n+1)}(\xi) \cdot (x-c)^n
\]</span></p>
<p>for some <span class="math inline">\(\xi\)</span> between <span class="math inline">\(c\)</span> and <span class="math inline">\(x\)</span>.</p>
<p>The Taylor polynomial for <span class="math inline">\(f\)</span> about <span class="math inline">\(c\)</span> of degree <span class="math inline">\(n\)</span> can be computed by taking <span class="math inline">\(n\)</span> derivatives. For such a task, the computer is very helpful. In <code>SymPy</code> the <code>series</code> function will compute the Taylor polynomial for a given <span class="math inline">\(n\)</span>. For example, here is the series expansion to 10 terms of the function <span class="math inline">\(\log(1+x)\)</span> about <span class="math inline">\(c=0\)</span>:</p>
<div class="cell" data-hold="true" data-execution_count="19">
<div class="sourceCode cell-code" id="cb18"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a>c, n <span class="op">=</span> <span class="fl">0</span>, <span class="fl">10</span></span>
<span id="cb18-2"><a href="#cb18-2" aria-hidden="true" tabindex="-1"></a>l <span class="op">=</span> <span class="fu">series</span>(<span class="fu">log</span>(<span class="fl">1</span> <span class="op">+</span> x), x, c, n<span class="op">+</span><span class="fl">1</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="20">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
x - \frac{x^{2}}{2} + \frac{x^{3}}{3} - \frac{x^{4}}{4} + \frac{x^{5}}{5} - \frac{x^{6}}{6} + \frac{x^{7}}{7} - \frac{x^{8}}{8} + \frac{x^{9}}{9} - \frac{x^{10}}{10} + O\left(x^{11}\right)
\]
</span>
</div>
</div>
<p>A pattern can be observed.</p>
<p>Using <code>series</code>, we can see Taylor polynomials for several familiar functions:</p>
<div class="cell" data-execution_count="20">
<div class="sourceCode cell-code" id="cb19"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="fu">series</span>(<span class="fl">1</span><span class="op">/</span>(<span class="fl">1</span><span class="op">-</span>x), x, <span class="fl">0</span>, <span class="fl">10</span>) <span class="co"># sum x^i for i in 0:n</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="21">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
1 + x + x^{2} + x^{3} + x^{4} + x^{5} + x^{6} + x^{7} + x^{8} + x^{9} + O\left(x^{10}\right)
\]
</span>
</div>
</div>
<div class="cell" data-execution_count="21">
<div class="sourceCode cell-code" id="cb20"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="fu">series</span>(<span class="fu">exp</span>(x), x, <span class="fl">0</span>, <span class="fl">10</span>) <span class="co"># sum x^i/i! for i in 0:n</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="22">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
1 + x + \frac{x^{2}}{2} + \frac{x^{3}}{6} + \frac{x^{4}}{24} + \frac{x^{5}}{120} + \frac{x^{6}}{720} + \frac{x^{7}}{5040} + \frac{x^{8}}{40320} + \frac{x^{9}}{362880} + O\left(x^{10}\right)
\]
</span>
</div>
</div>
<div class="cell" data-execution_count="22">
<div class="sourceCode cell-code" id="cb21"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="fu">series</span>(<span class="fu">sin</span>(x), x, <span class="fl">0</span>, <span class="fl">10</span>) <span class="co"># sum (-1)^i * x^(2i+1) / (2i+1)! for i in 0:n</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="23">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
x - \frac{x^{3}}{6} + \frac{x^{5}}{120} - \frac{x^{7}}{5040} + \frac{x^{9}}{362880} + O\left(x^{10}\right)
\]
</span>
</div>
</div>
<div class="cell" data-execution_count="23">
<div class="sourceCode cell-code" id="cb22"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="fu">series</span>(<span class="fu">cos</span>(x), x, <span class="fl">0</span>, <span class="fl">10</span>) <span class="co"># sum (-1)^i * x^(2i) / (2i)! for i in 0:n</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="24">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
1 - \frac{x^{2}}{2} + \frac{x^{4}}{24} - \frac{x^{6}}{720} + \frac{x^{8}}{40320} + O\left(x^{10}\right)
\]
</span>
</div>
</div>
<p>Each of these last three have a pattern that can be expressed quite succinctly if the denominator is recognized as <span class="math inline">\(n!\)</span>.</p>
<p>The output of <code>series</code> includes a big “Oh” term, which identifies the scale of the error term, but also gets in the way of using the output. <code>SymPy</code> provides the <code>removeO</code> method to strip this. (It is called as <code>object.removeO()</code>, as it is a method of an object in SymPy.)</p>
<div class="callout-note callout callout-style-default callout-captioned">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-caption-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>A Taylor polynomial of degree <span class="math inline">\(n\)</span> consists of <span class="math inline">\(n+1\)</span> terms and an error term. The “Taylor series” is an <em>infinite</em> collection of terms, the first <span class="math inline">\(n+1\)</span> matching the Taylor polynomial of degree <span class="math inline">\(n\)</span>. The fact that series are <em>infinite</em> means care must be taken when even talking about their existence, unlike a Tyalor polynomial, which is just a polynomial and exists as long as a sufficient number of derivatives are available.</p>
</div>
</div>
<p>We define a function to compute Taylor polynomials from a function. The following returns a function, not a symbolic object, using <code>D</code>, from <code>CalculusWithJulia</code>, which is based on <code>ForwardDiff.derivative</code>, to find higher-order derivatives:</p>
<div class="cell" data-execution_count="24">
<div class="sourceCode cell-code" id="cb23"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> <span class="fu">taylor_poly</span>(f, c<span class="op">=</span><span class="fl">0</span>, n<span class="op">=</span><span class="fl">2</span>)</span>
<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a> x <span class="op">-&gt;</span> <span class="fu">f</span>(c) <span class="op">+</span> <span class="fu">sum</span>(<span class="fu">D</span>(f, i)(c) <span class="op">*</span> (x<span class="op">-</span>c)<span class="op">^</span>i <span class="op">/</span> <span class="fu">factorial</span>(i) <span class="cf">for</span> i <span class="kw">in</span> <span class="fl">1</span><span class="op">:</span>n)</span>
<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a><span class="cf">end</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="25">
<pre><code>taylor_poly (generic function with 3 methods)</code></pre>
</div>
</div>
<p>With a function, we can compare values. For example, here we see the difference between the Taylor polynomial and the answer for a small value of <span class="math inline">\(x\)</span>:</p>
<div class="cell" data-hold="true" data-execution_count="25">
<div class="sourceCode cell-code" id="cb25"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a>a <span class="op">=</span> <span class="fl">.1</span></span>
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a><span class="fu">f</span>(x) <span class="op">=</span> <span class="fu">log</span>(<span class="fl">1</span><span class="op">+</span>x)</span>
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a>Tn <span class="op">=</span> <span class="fu">taylor_poly</span>(f, <span class="fl">0</span>, <span class="fl">5</span>)</span>
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true" tabindex="-1"></a><span class="fu">Tn</span>(a) <span class="op">-</span> <span class="fu">f</span>(a)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="26">
<pre><code>1.5352900840925887e-7</code></pre>
</div>
</div>
<section id="plotting" class="level3" data-number="35.3.1">
<h3 data-number="35.3.1" class="anchored" data-anchor-id="plotting"><span class="header-section-number">35.3.1</span> Plotting</h3>
<p>Lets now visualize a function and the two approximations - the Taylor polynomial and the interpolating polynomial. We use this function to generate the interpolating polynomial as a function:</p>
<div class="cell" data-execution_count="26">
<div class="sourceCode cell-code" id="cb27"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="kw">function</span> <span class="fu">newton_form</span>(f, xs)</span>
<span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a> x <span class="op">-&gt;</span> <span class="cf">begin</span></span>
<span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a> tot <span class="op">=</span> <span class="fu">divided_differences</span>(f, xs[<span class="fl">1</span>])</span>
<span id="cb27-4"><a href="#cb27-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> i <span class="kw">in</span> <span class="fl">2</span><span class="op">:</span><span class="fu">length</span>(xs)</span>
<span id="cb27-5"><a href="#cb27-5" aria-hidden="true" tabindex="-1"></a> tot <span class="op">+=</span> <span class="fu">divided_differences</span>(f, xs[<span class="fl">1</span><span class="op">:</span>i]<span class="op">...</span>) <span class="op">*</span> <span class="fu">prod</span>([x<span class="op">-</span>xs[j] for j <span class="kw">in</span> <span class="fl">1</span><span class="op">:</span>(i<span class="op">-</span><span class="fl">1</span>)])</span>
<span id="cb27-6"><a href="#cb27-6" aria-hidden="true" tabindex="-1"></a> <span class="cf">end</span></span>
<span id="cb27-7"><a href="#cb27-7" aria-hidden="true" tabindex="-1"></a> tot</span>
<span id="cb27-8"><a href="#cb27-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">end</span></span>
<span id="cb27-9"><a href="#cb27-9" aria-hidden="true" tabindex="-1"></a><span class="kw">end</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="27">
<pre><code>newton_form (generic function with 1 method)</code></pre>
</div>
</div>
<p>To see a plot, we have</p>
<div class="cell" data-execution_count="27">
<div class="sourceCode cell-code" id="cb29"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="fu">𝒇</span>(x) <span class="op">=</span> <span class="fu">sin</span>(x)</span>
<span id="cb29-2"><a href="#cb29-2" aria-hidden="true" tabindex="-1"></a>𝒄, 𝒉, 𝒏 <span class="op">=</span> <span class="fl">0</span>, <span class="fl">1</span><span class="op">/</span><span class="fl">4</span>, <span class="fl">4</span></span>
<span id="cb29-3"><a href="#cb29-3" aria-hidden="true" tabindex="-1"></a>int_poly <span class="op">=</span> <span class="fu">newton_form</span>(𝒇, [𝒄 <span class="op">+</span> i<span class="op">*</span>𝒉 for i <span class="kw">in</span> <span class="fl">0</span><span class="op">:</span>𝒏])</span>
<span id="cb29-4"><a href="#cb29-4" aria-hidden="true" tabindex="-1"></a>tp <span class="op">=</span> <span class="fu">taylor_poly</span>(𝒇, 𝒄, 𝒏)</span>
<span id="cb29-5"><a href="#cb29-5" aria-hidden="true" tabindex="-1"></a>𝒂, 𝒃 <span class="op">=</span> <span class="op">-</span><span class="cn">pi</span>, <span class="cn">pi</span></span>
<span id="cb29-6"><a href="#cb29-6" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(𝒇, 𝒂, 𝒃; linewidth<span class="op">=</span><span class="fl">5</span>, label<span class="op">=</span><span class="st">"f"</span>)</span>
<span id="cb29-7"><a href="#cb29-7" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(int_poly; color<span class="op">=:</span>green, label<span class="op">=</span><span class="st">"interpolating"</span>)</span>
<span id="cb29-8"><a href="#cb29-8" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(tp; color<span class="op">=:</span>red, label<span class="op">=</span><span class="st">"Taylor"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="28">
<p><img src="taylor_series_polynomials_files/figure-html/cell-28-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>To get a better sense, we plot the residual differences here:</p>
<div class="cell" data-execution_count="28">
<div class="sourceCode cell-code" id="cb30"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="fu">d1</span>(x) <span class="op">=</span> <span class="fu">𝒇</span>(x) <span class="op">-</span> <span class="fu">int_poly</span>(x)</span>
<span id="cb30-2"><a href="#cb30-2" aria-hidden="true" tabindex="-1"></a><span class="fu">d2</span>(x) <span class="op">=</span> <span class="fu">𝒇</span>(x) <span class="op">-</span> <span class="fu">tp</span>(x)</span>
<span id="cb30-3"><a href="#cb30-3" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(d1, 𝒂, 𝒃; color<span class="op">=:</span>blue, label<span class="op">=</span><span class="st">"interpolating"</span>)</span>
<span id="cb30-4"><a href="#cb30-4" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(d2; color<span class="op">=:</span>green, label<span class="op">=</span><span class="st">"Taylor"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="29">
<p><img src="taylor_series_polynomials_files/figure-html/cell-29-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>The graph should be <span class="math inline">\(0\)</span> at each of the the points in <code>xs</code>, which we can verify in the graph above. Plotting over a wider region shows a common phenomenon that these polynomials approximate the function near the values, but quickly deviate away:</p>
<p>In this graph we make a plot of the Taylor polynomial for different sizes of <span class="math inline">\(n\)</span> for the function <span class="math inline">\(f(x) = 1 - \cos(x)\)</span>:</p>
<div class="cell" data-hold="true" data-execution_count="29">
<div class="sourceCode cell-code" id="cb31"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="fu">f</span>(x) <span class="op">=</span> <span class="fl">1</span> <span class="op">-</span> <span class="fu">cos</span>(x)</span>
<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a>a, b <span class="op">=</span> <span class="op">-</span><span class="cn">pi</span>, <span class="cn">pi</span></span>
<span id="cb31-3"><a href="#cb31-3" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(f, a, b, linewidth<span class="op">=</span><span class="fl">5</span>, label<span class="op">=</span><span class="st">"f"</span>)</span>
<span id="cb31-4"><a href="#cb31-4" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(<span class="fu">taylor_poly</span>(f, <span class="fl">0</span>, <span class="fl">2</span>), label<span class="op">=</span><span class="st">"T₂"</span>)</span>
<span id="cb31-5"><a href="#cb31-5" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(<span class="fu">taylor_poly</span>(f, <span class="fl">0</span>, <span class="fl">4</span>), label<span class="op">=</span><span class="st">"T₄"</span>)</span>
<span id="cb31-6"><a href="#cb31-6" aria-hidden="true" tabindex="-1"></a><span class="fu">plot!</span>(<span class="fu">taylor_poly</span>(f, <span class="fl">0</span>, <span class="fl">6</span>), label<span class="op">=</span><span class="st">"T₆"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="30">
<p><img src="taylor_series_polynomials_files/figure-html/cell-30-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>Though all are good approximations near <span class="math inline">\(c=0\)</span>, as more terms are included, the Taylor polynomial becomes a better approximation over a wider range of values.</p>
<section id="example-period-of-an-orbiting-satellite" class="level5">
<h5 class="anchored" data-anchor-id="example-period-of-an-orbiting-satellite">Example: period of an orbiting satellite</h5>
<p>Keplers third <a href="http://tinyurl.com/y7oa4x2g">law</a> of planetary motion states:</p>
<blockquote class="blockquote">
<p>The square of the orbital period of a planet is directly proportional to the cube of the semi-major axis of its orbit.</p>
</blockquote>
<p>In formulas, <span class="math inline">\(P^2 = a^3 \cdot (4\pi^2) / (G\cdot(M + m))\)</span>, where <span class="math inline">\(M\)</span> and <span class="math inline">\(m\)</span> are the respective masses. Suppose a satellite is in low earth orbit with a constant height, <span class="math inline">\(a\)</span>. Use a Taylor polynomial to approximate the period using Keplers third law to relate the quantities.</p>
<p>Suppose <span class="math inline">\(R\)</span> is the radius of the earth and <span class="math inline">\(h\)</span> the height above the earth assuming <span class="math inline">\(h\)</span> is much smaller than <span class="math inline">\(R\)</span>. The mass <span class="math inline">\(m\)</span> of a satellite is negligible to that of the earth, so <span class="math inline">\(M+m=M\)</span> for this purpose. We have:</p>
<p><span class="math display">\[
P = \frac{2\pi}{\sqrt{G\cdot M}} \cdot (h+R)^{3/2} = \frac{2\pi}{\sqrt{G\cdot M}} \cdot R^{3/2} \cdot (1 + h/R)^{3/2} = P_0 \cdot (1 + h/R)^{3/2},
\]</span></p>
<p>where <span class="math inline">\(P_0\)</span> collects terms that involve the constants.</p>
<p>We can expand <span class="math inline">\((1+x)^{3/2}\)</span> to fifth order, to get:</p>
<p><span class="math display">\[
(1+x)^{3/2} \approx 1 + \frac{3x}{2} + \frac{3x^2}{8} - \frac{1x^3}{16} + \frac{3x^4}{128} -\frac{3x^5}{256}
\]</span></p>
<p>Our approximation becomes:</p>
<p><span class="math display">\[
P \approx P_0 \cdot (1 + \frac{3(h/R)}{2} + \frac{3(h/R)^2}{8} - \frac{(h/R)^3}{16} + \frac{3(h/R)^4}{128} - \frac{3(h/R)^5}{256}).
\]</span></p>
<p>Typically, if <span class="math inline">\(h\)</span> is much smaller than <span class="math inline">\(R\)</span> the first term is enough giving a formula like <span class="math inline">\(P \approx P_0 \cdot(1 + \frac{3h}{2R})\)</span>.</p>
<p>A satellite phone utilizes low orbit satellites to relay phone communications. The <a href="http://www.kddi.com/english/business/cloud-network-voice/satellite/iridium/mobile/">Iridium</a> system uses satellites with an elevation <span class="math inline">\(h=780km\)</span>. The radius of the earth is <span class="math inline">\(3,959 miles\)</span>, the mass of the earth is <span class="math inline">\(5.972 × 10^{24} kg\)</span>, and the gravitational <a href="https://en.wikipedia.org/wiki/Gravitational_constant">constant</a>, <span class="math inline">\(G\)</span> is <span class="math inline">\(6.67408 \cdot 10^{-11}\)</span> <span class="math inline">\(m^3/(kg \cdot s^2)\)</span>.</p>
<p>Compare the approximate value with <span class="math inline">\(1\)</span> term to the exact value.</p>
<div class="cell" data-execution_count="30">
<div class="sourceCode cell-code" id="cb32"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a>G <span class="op">=</span> <span class="fl">6.67408e-11</span></span>
<span id="cb32-2"><a href="#cb32-2" aria-hidden="true" tabindex="-1"></a>H <span class="op">=</span> <span class="fl">780</span> <span class="op">*</span> <span class="fl">1000</span></span>
<span id="cb32-3"><a href="#cb32-3" aria-hidden="true" tabindex="-1"></a>R <span class="op">=</span> <span class="fl">3959</span> <span class="op">*</span> <span class="fl">1609.34</span> <span class="co"># 1609 meters per mile</span></span>
<span id="cb32-4"><a href="#cb32-4" aria-hidden="true" tabindex="-1"></a>M <span class="op">=</span> <span class="fl">5.972e24</span></span>
<span id="cb32-5"><a href="#cb32-5" aria-hidden="true" tabindex="-1"></a>P0, HR <span class="op">=</span> (<span class="fl">2</span>pi)<span class="op">/</span><span class="fu">sqrt</span>(G<span class="op">*</span>M) <span class="op">*</span> R<span class="op">^</span>(<span class="fl">3</span><span class="op">/</span><span class="fl">2</span>), H<span class="op">/</span>R</span>
<span id="cb32-6"><a href="#cb32-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb32-7"><a href="#cb32-7" aria-hidden="true" tabindex="-1"></a>Preal <span class="op">=</span> P0 <span class="op">*</span> (<span class="fl">1</span> <span class="op">+</span> HR)<span class="op">^</span>(<span class="fl">3</span><span class="op">/</span><span class="fl">2</span>)</span>
<span id="cb32-8"><a href="#cb32-8" aria-hidden="true" tabindex="-1"></a>P1 <span class="op">=</span> P0 <span class="op">*</span> (<span class="fl">1</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HR<span class="op">/</span><span class="fl">2</span>)</span>
<span id="cb32-9"><a href="#cb32-9" aria-hidden="true" tabindex="-1"></a>Preal, P1</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="31">
<pre><code>(6018.78431252517, 5990.893153415102)</code></pre>
</div>
</div>
<p>With terms out to the fifth power, we get a better approximation:</p>
<div class="cell" data-execution_count="31">
<div class="sourceCode cell-code" id="cb34"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a>P5 <span class="op">=</span> P0 <span class="op">*</span> (<span class="fl">1</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HR<span class="op">/</span><span class="fl">2</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HR<span class="op">^</span><span class="fl">2</span><span class="op">/</span><span class="fl">8</span> <span class="op">-</span> HR<span class="op">^</span><span class="fl">3</span><span class="op">/</span><span class="fl">16</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HR<span class="op">^</span><span class="fl">4</span><span class="op">/</span><span class="fl">128</span> <span class="op">-</span> <span class="fl">3</span><span class="op">*</span>HR<span class="op">^</span><span class="fl">5</span><span class="op">/</span><span class="fl">256</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="32">
<pre><code>6018.784204505923</code></pre>
</div>
</div>
<p>The units of the period above are in seconds. That answer here is about <span class="math inline">\(100\)</span> minutes:</p>
<div class="cell" data-execution_count="32">
<div class="sourceCode cell-code" id="cb36"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a>Preal<span class="op">/</span><span class="fl">60</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="33">
<pre><code>100.31307187541951</code></pre>
</div>
</div>
<p>When <span class="math inline">\(H\)</span> is much smaller than <span class="math inline">\(R\)</span> the approximation with <span class="math inline">\(5\)</span>th order is really good, and serviceable with just <span class="math inline">\(1\)</span> term. Next we check if this is the same when <span class="math inline">\(H\)</span> is larger than <span class="math inline">\(R\)</span>.</p>
<hr>
<p>The height of a <a href="http://www.gps.gov/systems/gps/space/">GPS satellite</a> is about <span class="math inline">\(12,550\)</span> miles. Compute the period of a circular orbit and compare with the estimates.</p>
<div class="cell" data-execution_count="33">
<div class="sourceCode cell-code" id="cb38"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a>Hₛ <span class="op">=</span> <span class="fl">12250</span> <span class="op">*</span> <span class="fl">1609.34</span> <span class="co"># 1609 meters per mile</span></span>
<span id="cb38-2"><a href="#cb38-2" aria-hidden="true" tabindex="-1"></a>HRₛ <span class="op">=</span> Hₛ<span class="op">/</span>R</span>
<span id="cb38-3"><a href="#cb38-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb38-4"><a href="#cb38-4" aria-hidden="true" tabindex="-1"></a>Prealₛ <span class="op">=</span> P0 <span class="op">*</span> (<span class="fl">1</span> <span class="op">+</span> HRₛ)<span class="op">^</span>(<span class="fl">3</span><span class="op">/</span><span class="fl">2</span>)</span>
<span id="cb38-5"><a href="#cb38-5" aria-hidden="true" tabindex="-1"></a>P1ₛ <span class="op">=</span> P0 <span class="op">*</span> (<span class="fl">1</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HRₛ<span class="op">/</span><span class="fl">2</span>)</span>
<span id="cb38-6"><a href="#cb38-6" aria-hidden="true" tabindex="-1"></a>P5ₛ <span class="op">=</span> P0 <span class="op">*</span> (<span class="fl">1</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HRₛ<span class="op">/</span><span class="fl">2</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HRₛ<span class="op">^</span><span class="fl">2</span><span class="op">/</span><span class="fl">8</span> <span class="op">-</span> HRₛ<span class="op">^</span><span class="fl">3</span><span class="op">/</span><span class="fl">16</span> <span class="op">+</span> <span class="fl">3</span><span class="op">*</span>HRₛ<span class="op">^</span><span class="fl">4</span><span class="op">/</span><span class="fl">128</span> <span class="op">-</span> <span class="fl">3</span><span class="op">*</span>HRₛ<span class="op">^</span><span class="fl">5</span><span class="op">/</span><span class="fl">256</span>)</span>
<span id="cb38-7"><a href="#cb38-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb38-8"><a href="#cb38-8" aria-hidden="true" tabindex="-1"></a>Prealₛ, P1ₛ, P5ₛ</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="34">
<pre><code>(41930.52564789311, 28553.22950490504, 31404.73066617854)</code></pre>
</div>
</div>
<p>We see the Taylor polynomial underestimates badly in this case. A reminder that these approximations are locally good, but may not be good on all scales. Here <span class="math inline">\(h \approx 3R\)</span>. We can see from this graph of <span class="math inline">\((1+x)^{3/2}\)</span> and its <span class="math inline">\(5\)</span>th degree Taylor polynomial <span class="math inline">\(T_5\)</span> that it is a bad approximation when <span class="math inline">\(x &gt; 2\)</span>.</p>
<div class="cell" data-execution_count="34">
<div class="cell-output cell-output-display" data-execution_count="35">
<p><img src="taylor_series_polynomials_files/figure-html/cell-35-output-1.svg" class="img-fluid"></p>
</div>
</div>
<hr>
<p>Finally, we show how to use the <code>Unitful</code> package. This package allows us to define different units, carry these units through computations, and convert between similar units with <code>uconvert</code>. In this example, we define several units, then show how they can then be used as constants.</p>
<div class="cell" data-hold="true" data-execution_count="35">
<div class="sourceCode cell-code" id="cb40"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a>m, mi, kg, s, hr <span class="op">=</span> u<span class="st">"m"</span>, u<span class="st">"mi"</span>, u<span class="st">"kg"</span>, u<span class="st">"s"</span>, u<span class="st">"hr"</span></span>
<span id="cb40-2"><a href="#cb40-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb40-3"><a href="#cb40-3" aria-hidden="true" tabindex="-1"></a>G <span class="op">=</span> <span class="fl">6.67408e-11</span> <span class="op">*</span> m<span class="op">^</span><span class="fl">3</span> <span class="op">/</span> kg <span class="op">/</span> s<span class="op">^</span><span class="fl">2</span></span>
<span id="cb40-4"><a href="#cb40-4" aria-hidden="true" tabindex="-1"></a>H <span class="op">=</span> <span class="fu">uconvert</span>(m, <span class="fl">12250</span> <span class="op">*</span> mi) <span class="co"># unit convert miles to meter</span></span>
<span id="cb40-5"><a href="#cb40-5" aria-hidden="true" tabindex="-1"></a>R <span class="op">=</span> <span class="fu">uconvert</span>(m, <span class="fl">3959</span> <span class="op">*</span> mi)</span>
<span id="cb40-6"><a href="#cb40-6" aria-hidden="true" tabindex="-1"></a>M <span class="op">=</span> <span class="fl">5.972e24</span> <span class="op">*</span> kg</span>
<span id="cb40-7"><a href="#cb40-7" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb40-8"><a href="#cb40-8" aria-hidden="true" tabindex="-1"></a>P0, HR <span class="op">=</span> (<span class="fl">2</span>pi)<span class="op">/</span><span class="fu">sqrt</span>(G<span class="op">*</span>M) <span class="op">*</span> R<span class="op">^</span>(<span class="fl">3</span><span class="op">/</span><span class="fl">2</span>), H<span class="op">/</span>R</span>
<span id="cb40-9"><a href="#cb40-9" aria-hidden="true" tabindex="-1"></a>Preal <span class="op">=</span> P0 <span class="op">*</span> (<span class="fl">1</span> <span class="op">+</span> HR)<span class="op">^</span>(<span class="fl">3</span><span class="op">/</span><span class="fl">2</span>) <span class="co"># in seconds</span></span>
<span id="cb40-10"><a href="#cb40-10" aria-hidden="true" tabindex="-1"></a>Preal, <span class="fu">uconvert</span>(hr, Preal) <span class="co"># ≈ 11.65 hours</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="36">
<pre><code>(41930.68197490307 s, 11.647411659695297 hr)</code></pre>
</div>
</div>
<p>We see <code>Preal</code> has the right units - the units of mass and distance cancel leaving a measure of time - but it is hard to sense how long this is. Converting to hours, helps us see the satellite orbits about twice per day.</p>
</section>
<section id="example-computing-logx" class="level5">
<h5 class="anchored" data-anchor-id="example-computing-logx">Example: computing <span class="math inline">\(\log(x)\)</span></h5>
<p>Where exactly does the value assigned to <span class="math inline">\(\log(5)\)</span> come from? The value needs to be computed. At some level, many questions resolve down to the basic operations of addition, subtraction, multiplication, and division. Preferably not the latter, as division is slow. Polynomials then should be fast to compute, and so computing logarithms using a polynomial becomes desirable.</p>
<p>But how? One can see details of a possible way <a href="https://github.com/musm/Amal.jl/blob/master/src/log.jl">here</a>.</p>
<p>First, there is usually a reduction stage. In this phase, the problem is transformed in a manner to one involving only a fixed interval of values. For this, function values of <span class="math inline">\(k\)</span> and <span class="math inline">\(m\)</span> are found so that <span class="math inline">\(x = 2^k \cdot (1+m)\)</span> <em>and</em> <span class="math inline">\(\sqrt{2}/2 &lt; 1+m &lt; \sqrt{2}\)</span>. If these are found, then <span class="math inline">\(\log(x)\)</span> can be computed with <span class="math inline">\(k \cdot \log(2) + \log(1+m)\)</span>. The first value - a multiplication - can easily be computed using pre-computed value of <span class="math inline">\(\log(2)\)</span>, the second then <em>reduces</em> the problem to an interval.</p>
<p>Now, for this problem a further trick is utilized, writing <span class="math inline">\(s= f/(2+f)\)</span> so that <span class="math inline">\(\log(1+m)=\log(1+s)-\log(1-s)\)</span> for some small range of <span class="math inline">\(s\)</span> values. These combined make it possible to compute <span class="math inline">\(\log(x)\)</span> for any real <span class="math inline">\(x\)</span>.</p>
<p>To compute <span class="math inline">\(\log(1\pm s)\)</span>, we can find a Taylor polynomial. Lets go out to degree <span class="math inline">\(19\)</span> and use <code>SymPy</code> to do the work:</p>
<div class="cell" data-execution_count="36">
<div class="sourceCode cell-code" id="cb42"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a><span class="pp">@syms</span> s</span>
<span id="cb42-2"><a href="#cb42-2" aria-hidden="true" tabindex="-1"></a>aₗ <span class="op">=</span> <span class="fu">series</span>(<span class="fu">log</span>(<span class="fl">1</span> <span class="op">+</span> s), s, <span class="fl">0</span>, <span class="fl">19</span>)</span>
<span id="cb42-3"><a href="#cb42-3" aria-hidden="true" tabindex="-1"></a>bₗ <span class="op">=</span> <span class="fu">series</span>(<span class="fu">log</span>(<span class="fl">1</span> <span class="op">-</span> s), s, <span class="fl">0</span>, <span class="fl">19</span>)</span>
<span id="cb42-4"><a href="#cb42-4" aria-hidden="true" tabindex="-1"></a>a_b <span class="op">=</span> (aₗ <span class="op">-</span> bₗ).<span class="fu">removeO</span>() <span class="co"># remove"Oh" not remove"zero"</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="37">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\frac{2 s^{17}}{17} + \frac{2 s^{15}}{15} + \frac{2 s^{13}}{13} + \frac{2 s^{11}}{11} + \frac{2 s^{9}}{9} + \frac{2 s^{7}}{7} + \frac{2 s^{5}}{5} + \frac{2 s^{3}}{3} + 2 s
\]
</span>
</div>
</div>
<p>This is re-expressed as <span class="math inline">\(2s + s \cdot p\)</span> with <span class="math inline">\(p\)</span> given by:</p>
<div class="cell" data-execution_count="37">
<div class="sourceCode cell-code" id="cb43"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb43-1"><a href="#cb43-1" aria-hidden="true" tabindex="-1"></a><span class="fu">cancel</span>(a_b <span class="op">-</span> <span class="fl">2</span>s<span class="op">/</span>s)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="38">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
\frac{2 s^{17}}{17} + \frac{2 s^{15}}{15} + \frac{2 s^{13}}{13} + \frac{2 s^{11}}{11} + \frac{2 s^{9}}{9} + \frac{2 s^{7}}{7} + \frac{2 s^{5}}{5} + \frac{2 s^{3}}{3} + 2 s - 2
\]
</span>
</div>
</div>
<p>Now, <span class="math inline">\(2s = m - s\cdot m\)</span>, so the above can be reworked to be <span class="math inline">\(\log(1+m) = m - s\cdot(m-p)\)</span>.</p>
<p>(For larger values of <span class="math inline">\(m\)</span>, a similar, but different approximation, can be used to minimize floating point errors.)</p>
<p>How big can the error be between this <em>approximations</em> and <span class="math inline">\(\log(1+m)\)</span>? We plot to see how big <span class="math inline">\(s\)</span> can be:</p>
<div class="cell" data-execution_count="38">
<div class="sourceCode cell-code" id="cb44"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a><span class="pp">@syms</span> v</span>
<span id="cb44-2"><a href="#cb44-2" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(v<span class="op">/</span>(<span class="fl">2</span><span class="op">+</span>v), <span class="fu">sqrt</span>(<span class="fl">2</span>)<span class="op">/</span><span class="fl">2</span> <span class="op">-</span> <span class="fl">1</span>, <span class="fu">sqrt</span>(<span class="fl">2</span>)<span class="op">-</span><span class="fl">1</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="39">
<p><img src="taylor_series_polynomials_files/figure-html/cell-39-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>This shows, <span class="math inline">\(s\)</span> is as big as</p>
<div class="cell" data-execution_count="39">
<div class="sourceCode cell-code" id="cb45"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb45-1"><a href="#cb45-1" aria-hidden="true" tabindex="-1"></a>Max <span class="op">=</span> (v<span class="op">/</span>(<span class="fl">2</span><span class="op">+</span>v))(v <span class="op">=&gt;</span> <span class="fu">sqrt</span>(<span class="fl">2</span>) <span class="op">-</span> <span class="fl">1</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="40">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
0.17157287525381
\]
</span>
</div>
</div>
<p>The error term is like <span class="math inline">\(2/19 \cdot \xi^{19}\)</span> which is largest at this value of <span class="math inline">\(M\)</span>. Large is relative - it is really small:</p>
<div class="cell" data-execution_count="40">
<div class="sourceCode cell-code" id="cb46"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a>(<span class="fl">2</span><span class="op">/</span><span class="fl">19</span>)<span class="op">*</span>Max<span class="op">^</span><span class="fl">19</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="41">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
2.99778410043418 \cdot 10^{-16}
\]
</span>
</div>
</div>
<p>Basically that is machine precision. Which means, that as far as can be told on the computer, the value produced by <span class="math inline">\(2s + s \cdot p\)</span> is about as accurate as can be done.</p>
<p>To try this out to compute <span class="math inline">\(\log(5)\)</span>. We have <span class="math inline">\(5 = 2^2(1+0.25)\)</span>, so <span class="math inline">\(k=2\)</span> and <span class="math inline">\(m=0.25\)</span>.</p>
<div class="cell" data-execution_count="41">
<div class="sourceCode cell-code" id="cb47"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a>k, m <span class="op">=</span> <span class="fl">2</span>, <span class="fl">0.25</span></span>
<span id="cb47-2"><a href="#cb47-2" aria-hidden="true" tabindex="-1"></a>𝒔 <span class="op">=</span> m <span class="op">/</span> (<span class="fl">2</span><span class="op">+</span>m)</span>
<span id="cb47-3"><a href="#cb47-3" aria-hidden="true" tabindex="-1"></a>pₗ <span class="op">=</span> <span class="fl">2</span> <span class="op">*</span> <span class="fu">sum</span>(𝒔<span class="op">^</span>(<span class="fl">2</span>i)<span class="op">/</span>(<span class="fl">2</span>i<span class="op">+</span><span class="fl">1</span>) <span class="cf">for</span> i <span class="kw">in</span> <span class="fl">1</span><span class="op">:</span><span class="fl">8</span>) <span class="co"># where the polynomial approximates the logarithm...</span></span>
<span id="cb47-4"><a href="#cb47-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb47-5"><a href="#cb47-5" aria-hidden="true" tabindex="-1"></a><span class="fu">log</span>(<span class="fl">1</span> <span class="op">+</span> m), m <span class="op">-</span> <span class="fu">𝒔*</span>(m<span class="op">-</span>pₗ), <span class="fu">log</span>(<span class="fl">1</span> <span class="op">+</span> m) <span class="op">-</span> ( m <span class="op">-</span> <span class="fu">𝒔*</span>(m<span class="op">-</span>pₗ))</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="42">
<pre><code>(0.22314355131420976, 0.22314355131420976, 0.0)</code></pre>
</div>
</div>
<p>The two values differ by less than <span class="math inline">\(10^{-16}\)</span>, as advertised. Re-assembling then, we compare the computed values:</p>
<div class="cell" data-execution_count="42">
<div class="sourceCode cell-code" id="cb49"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a>Δ <span class="op">=</span> k <span class="op">*</span> <span class="fu">log</span>(<span class="fl">2</span>) <span class="op">+</span> (m <span class="op">-</span> <span class="fu">𝒔*</span>(m<span class="op">-</span>pₗ)) <span class="op">-</span> <span class="fu">log</span>(<span class="fl">5</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="43">
<pre><code>0.0</code></pre>
</div>
</div>
<p>The actual code is different, as the Taylor polynomial isnt used. The Taylor polynomial is a great approximation near a point, but there might be better polynomial approximations for all values in an interval. In this case there is, and that polynomial is used in the production setting. This makes things a bit more efficient, but the basic idea remains - for a prescribed accuracy, a polynomial approximation can be found over a given interval, which can be cleverly utilized to solve for all applicable values.</p>
</section>
<section id="example-higher-order-derivatives-of-the-inverse-function" class="level5">
<h5 class="anchored" data-anchor-id="example-higher-order-derivatives-of-the-inverse-function">Example: higher order derivatives of the inverse function</h5>
<p>For notational purposes, let <span class="math inline">\(g(x)\)</span> be the inverse function for <span class="math inline">\(f(x)\)</span>. Assume <em>both</em> functions have a Taylor polynomial expansion:</p>
<p><span class="math display">\[
\begin{align*}
f(x_0 + \Delta_x) &amp;= f(x_0) + a_1 \Delta_x + a_2 (\Delta_x)^2 + \cdots a_n + (\Delta_x)^n + \dots\\
g(y_0 + \Delta_y) &amp;= g(y_0) + b_1 \Delta_y + b_2 (\Delta_y)^2 + \cdots b_n + (\Delta_y)^n + \dots
\end{align*}
\]</span></p>
<p>Then using <span class="math inline">\(x = g(f(x))\)</span>, we have expanding the terms and using <span class="math inline">\(\approx\)</span> to drop the <span class="math inline">\(\dots\)</span>:</p>
<p><span class="math display">\[
\begin{align*}
x_0 + \Delta_x &amp;= g(f(x_0 + \Delta_x)) \\
&amp;\approx g(f(x_0) + \sum_{j=1}^n a_j (\Delta_x)^j) \\
&amp;\approx g(f(x_0)) + \sum_{i=1}^n b_i \left(\sum_{j=1}^n a_j (\Delta_x)^j \right)^i \\
&amp;\approx x_0 + \sum_{i=1}^{n-1} b_i \left(\sum_{j=1}^n a_j (\Delta_x)^j\right)^i + b_n \left(\sum_{j=1}^n a_j (\Delta_x)^j\right)^n
\end{align*}
\]</span></p>
<p>That is:</p>
<p><span class="math display">\[
b_n \left(\sum_{j=1}^n a_j (\Delta_x)^j \right)^n =
(x_0 + \Delta_x) - \left( x_0 + \sum_{i=1}^{n-1} b_i \left(\sum_{j=1}^n a_j (\Delta_x)^j \right)^i \right)
\]</span></p>
<p>Solving for <span class="math inline">\(b_n = g^{(n)}(y_0) / n!\)</span> gives the formal expression:</p>
<p><span class="math display">\[
g^{(n)}(y_0) = n! \cdot \lim_{\Delta_x \rightarrow 0}
\frac{\Delta_x - \sum_{i=1}^{n-1} b_i \left(\sum_{j=1}^n a_j (\Delta_x)^j \right)^i}{
\left(\sum_{j=1}^n a_j \left(\Delta_x^j\right)^i\right)^n}
\]</span></p>
<p>(This is following <a href="https://vixra.org/pdf/1703.0295v1.pdf">Liptaj</a>).</p>
<p>We will use <code>SymPy</code> to take this limit for the first <code>4</code> derivatives. Here is some code that expands <span class="math inline">\(x + \Delta_x = g(f(x_0 + \Delta_x))\)</span> and then uses <code>SymPy</code> to solve:</p>
<div class="cell" data-execution_count="43">
<div class="sourceCode cell-code" id="cb51"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a><span class="pp">@syms</span> x₀ Δₓ f[<span class="fl">1</span><span class="op">:</span><span class="fl">4</span>] g[<span class="fl">1</span><span class="op">:</span><span class="fl">4</span>]</span>
<span id="cb51-2"><a href="#cb51-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb51-3"><a href="#cb51-3" aria-hidden="true" tabindex="-1"></a><span class="fu">as</span>(i) <span class="op">=</span> f[i]<span class="op">/</span><span class="fu">factorial</span>(i)</span>
<span id="cb51-4"><a href="#cb51-4" aria-hidden="true" tabindex="-1"></a><span class="fu">bs</span>(i) <span class="op">=</span> g[i]<span class="op">/</span><span class="fu">factorial</span>(i)</span>
<span id="cb51-5"><a href="#cb51-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb51-6"><a href="#cb51-6" aria-hidden="true" tabindex="-1"></a>gᵏs <span class="op">=</span> <span class="dt">Any</span>[]</span>
<span id="cb51-7"><a href="#cb51-7" aria-hidden="true" tabindex="-1"></a>eqns <span class="op">=</span> <span class="dt">Any</span>[]</span>
<span id="cb51-8"><a href="#cb51-8" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> n <span class="op"></span> <span class="fl">1</span><span class="op">:</span><span class="fl">4</span></span>
<span id="cb51-9"><a href="#cb51-9" aria-hidden="true" tabindex="-1"></a> Δy <span class="op">=</span> <span class="fu">sum</span>(<span class="fu">as</span>(j) <span class="op">*</span> Δₓ<span class="op">^</span>j <span class="cf">for</span> j <span class="op"></span> <span class="fl">1</span><span class="op">:</span>n)</span>
<span id="cb51-10"><a href="#cb51-10" aria-hidden="true" tabindex="-1"></a> left <span class="op">=</span> x₀ <span class="op">+</span> Δₓ</span>
<span id="cb51-11"><a href="#cb51-11" aria-hidden="true" tabindex="-1"></a> right <span class="op">=</span> x₀ <span class="op">+</span> <span class="fu">sum</span>(<span class="fu">bs</span>(i)<span class="op">*</span>Δy<span class="op">^</span>i <span class="cf">for</span> i <span class="op"></span> <span class="fl">1</span><span class="op">:</span>n)</span>
<span id="cb51-12"><a href="#cb51-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb51-13"><a href="#cb51-13" aria-hidden="true" tabindex="-1"></a> eqn <span class="op">=</span> left <span class="op">~</span> right</span>
<span id="cb51-14"><a href="#cb51-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">push!</span>(eqns, eqn)</span>
<span id="cb51-15"><a href="#cb51-15" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb51-16"><a href="#cb51-16" aria-hidden="true" tabindex="-1"></a> gⁿ <span class="op">=</span> g[n]</span>
<span id="cb51-17"><a href="#cb51-17" aria-hidden="true" tabindex="-1"></a> ϕ <span class="op">=</span> <span class="fu">solve</span>(eqn, gⁿ)[<span class="fl">1</span>]</span>
<span id="cb51-18"><a href="#cb51-18" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb51-19"><a href="#cb51-19" aria-hidden="true" tabindex="-1"></a> <span class="co"># replace gᵢs in terms of computed fᵢs</span></span>
<span id="cb51-20"><a href="#cb51-20" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> j <span class="op"></span> <span class="fl">1</span><span class="op">:</span>n<span class="op">-</span><span class="fl">1</span></span>
<span id="cb51-21"><a href="#cb51-21" aria-hidden="true" tabindex="-1"></a> ϕ <span class="op">=</span> <span class="fu">subs</span>(ϕ, g[j] <span class="op">=&gt;</span> gᵏs[j])</span>
<span id="cb51-22"><a href="#cb51-22" aria-hidden="true" tabindex="-1"></a> <span class="cf">end</span></span>
<span id="cb51-23"><a href="#cb51-23" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb51-24"><a href="#cb51-24" aria-hidden="true" tabindex="-1"></a> L <span class="op">=</span> <span class="fu">limit</span>(ϕ, Δₓ <span class="op">=&gt;</span> <span class="fl">0</span>)</span>
<span id="cb51-25"><a href="#cb51-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">push!</span>(gᵏs, L)</span>
<span id="cb51-26"><a href="#cb51-26" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb51-27"><a href="#cb51-27" aria-hidden="true" tabindex="-1"></a><span class="cf">end</span></span>
<span id="cb51-28"><a href="#cb51-28" aria-hidden="true" tabindex="-1"></a>gᵏs</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="44">
<pre><code>4-element Vector{Any}:
1/f
-f₂/f₁^3
(-12*f₁^2*f₃ + 36*f₁*f₂^2)/(12*f₁^6)
(-3456*f₁^9*f₄ + 34560*f₁^8*f₂*f₃ - 51840*f₁^7*f₂^3)/(3456*f₁^14)</code></pre>
</div>
</div>
<p>We can see the expected <code>g' = 1/f'</code> (where the point of evalution is <span class="math inline">\(g(y) = 1/f'(f^{-1}(y))\)</span> is not written). In addition, we get 3 more formulas, hinting that the answers grow rapidly in terms of their complexity.</p>
<p>In the above, for each <code>n</code>, the code above sets up the two sides, <code>left</code> and <code>right</code>, of an equation involving the higher-order derivatives of <span class="math inline">\(g\)</span>. For example, when <code>n=2</code> we have:</p>
<div class="cell" data-execution_count="44">
<div class="sourceCode cell-code" id="cb53"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a>eqns[<span class="fl">2</span>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="45">
<span class="math-left-align" style="padding-left: 4px; width:0; float:left;">
\[
x₀ + Δₓ = g₁ \left(f₁ Δₓ + \frac{f₂ Δₓ^{2}}{2}\right) + \frac{g₂ \left(f₁ Δₓ + \frac{f₂ Δₓ^{2}}{2}\right)^{2}}{2} + x₀
\]
</span>
</div>
</div>
<p>The <code>solve</code> function is used to identify <span class="math inline">\(g^{(n)}\)</span> represented in terms of lower-order derivatives of <span class="math inline">\(g\)</span>. These values have been computed and stored and are then substituted into <code>ϕ</code>. Afterwards a limit is taken and the answer recorded.</p>
</section>
</section>
</section>
<section id="questions" class="level2" data-number="35.4">
<h2 data-number="35.4" class="anchored" data-anchor-id="questions"><span class="header-section-number">35.4</span> Questions</h2>
<section id="question" class="level6">
<h6 class="anchored" data-anchor-id="question">Question</h6>
<p>Compute the Taylor polynomial of degree <span class="math inline">\(10\)</span> for <span class="math inline">\(\sin(x)\)</span> about <span class="math inline">\(c=0\)</span> using <code>SymPy</code>. Based on the form, which formula seems appropriate:</p>
<div class="cell" data-hold="true" data-execution_count="45">
<div class="cell-output cell-output-display" data-execution_count="46">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="14976421186369826867" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_14976421186369826867">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_14976421186369826867_1">
<input class="form-check-input" type="radio" name="radio_14976421186369826867" id="radio_14976421186369826867_1" value="1">
<span class="label-body px-1">
\(\sum_{k=1}^{10} (-1)^{n+1} x^n/n\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_14976421186369826867_2">
<input class="form-check-input" type="radio" name="radio_14976421186369826867" id="radio_14976421186369826867_2" value="2">
<span class="label-body px-1">
\(\sum_{k=0}^{4} (-1)^k/(2k+1)! \cdot x^{2k+1}\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_14976421186369826867_3">
<input class="form-check-input" type="radio" name="radio_14976421186369826867" id="radio_14976421186369826867_3" value="3">
<span class="label-body px-1">
\(\sum_{k=0}^{10} x^k\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_14976421186369826867_4">
<input class="form-check-input" type="radio" name="radio_14976421186369826867" id="radio_14976421186369826867_4" value="4">
<span class="label-body px-1">
\(\sum_{k=0}^{10} x^n/n!\)
</span>
</label>
</div>
</div>
</div>
<div id="14976421186369826867_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_14976421186369826867"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 2;
var msgBox = document.getElementById('14976421186369826867_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_14976421186369826867")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_14976421186369826867")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
<section id="question-1" class="level6">
<h6 class="anchored" data-anchor-id="question-1">Question</h6>
<p>Compute the Taylor polynomial of degree <span class="math inline">\(10\)</span> for <span class="math inline">\(e^x\)</span> about <span class="math inline">\(c=0\)</span> using <code>SymPy</code>. Based on the form, which formula seems appropriate:</p>
<div class="cell" data-hold="true" data-execution_count="46">
<div class="cell-output cell-output-display" data-execution_count="47">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="3989567966967397227" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_3989567966967397227">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_3989567966967397227_1">
<input class="form-check-input" type="radio" name="radio_3989567966967397227" id="radio_3989567966967397227_1" value="1">
<span class="label-body px-1">
\(\sum_{k=0}^{4} (-1)^k/(2k+1)! \cdot x^{2k+1}\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_3989567966967397227_2">
<input class="form-check-input" type="radio" name="radio_3989567966967397227" id="radio_3989567966967397227_2" value="2">
<span class="label-body px-1">
\(\sum_{k=1}^{10} (-1)^{n+1} x^n/n\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_3989567966967397227_3">
<input class="form-check-input" type="radio" name="radio_3989567966967397227" id="radio_3989567966967397227_3" value="3">
<span class="label-body px-1">
\(\sum_{k=0}^{10} x^k\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_3989567966967397227_4">
<input class="form-check-input" type="radio" name="radio_3989567966967397227" id="radio_3989567966967397227_4" value="4">
<span class="label-body px-1">
\(\sum_{k=0}^{10} x^n/n!\)
</span>
</label>
</div>
</div>
</div>
<div id="3989567966967397227_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_3989567966967397227"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 4;
var msgBox = document.getElementById('3989567966967397227_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_3989567966967397227")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_3989567966967397227")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
<section id="question-2" class="level6">
<h6 class="anchored" data-anchor-id="question-2">Question</h6>
<p>Compute the Taylor polynomial of degree <span class="math inline">\(10\)</span> for <span class="math inline">\(1/(1-x)\)</span> about <span class="math inline">\(c=0\)</span> using <code>SymPy</code>. Based on the form, which formula seems appropriate:</p>
<div class="cell" data-hold="true" data-execution_count="47">
<div class="cell-output cell-output-display" data-execution_count="48">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="8437219689580748457" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_8437219689580748457">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_8437219689580748457_1">
<input class="form-check-input" type="radio" name="radio_8437219689580748457" id="radio_8437219689580748457_1" value="1">
<span class="label-body px-1">
\(\sum_{k=0}^{10} x^n/n!\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_8437219689580748457_2">
<input class="form-check-input" type="radio" name="radio_8437219689580748457" id="radio_8437219689580748457_2" value="2">
<span class="label-body px-1">
\(\sum_{k=1}^{10} (-1)^{n+1} x^n/n\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_8437219689580748457_3">
<input class="form-check-input" type="radio" name="radio_8437219689580748457" id="radio_8437219689580748457_3" value="3">
<span class="label-body px-1">
\(\sum_{k=0}^{4} (-1)^k/(2k+1)! \cdot x^{2k+1}\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_8437219689580748457_4">
<input class="form-check-input" type="radio" name="radio_8437219689580748457" id="radio_8437219689580748457_4" value="4">
<span class="label-body px-1">
\(\sum_{k=0}^{10} x^k\)
</span>
</label>
</div>
</div>
</div>
<div id="8437219689580748457_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_8437219689580748457"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 4;
var msgBox = document.getElementById('8437219689580748457_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_8437219689580748457")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_8437219689580748457")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
<section id="question-3" class="level6">
<h6 class="anchored" data-anchor-id="question-3">Question</h6>
<p>Let <span class="math inline">\(T_5(x)\)</span> be the Taylor polynomial of degree <span class="math inline">\(5\)</span> for the function <span class="math inline">\(\sqrt{1+x}\)</span> about <span class="math inline">\(x=0\)</span>. What is the coefficient of the <span class="math inline">\(x^5\)</span> term?</p>
<div class="cell" data-hold="true" data-execution_count="48">
<div class="cell-output cell-output-display" data-execution_count="49">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="2339374861109216656" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_2339374861109216656">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_2339374861109216656_1">
<input class="form-check-input" type="radio" name="radio_2339374861109216656" id="radio_2339374861109216656_1" value="1">
<span class="label-body px-1">
\(7/256\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_2339374861109216656_2">
<input class="form-check-input" type="radio" name="radio_2339374861109216656" id="radio_2339374861109216656_2" value="2">
<span class="label-body px-1">
\(-5/128\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_2339374861109216656_3">
<input class="form-check-input" type="radio" name="radio_2339374861109216656" id="radio_2339374861109216656_3" value="3">
<span class="label-body px-1">
\(2/15\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_2339374861109216656_4">
<input class="form-check-input" type="radio" name="radio_2339374861109216656" id="radio_2339374861109216656_4" value="4">
<span class="label-body px-1">
\(1/5!\)
</span>
</label>
</div>
</div>
</div>
<div id="2339374861109216656_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_2339374861109216656"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 1;
var msgBox = document.getElementById('2339374861109216656_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_2339374861109216656")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_2339374861109216656")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
<section id="question-4" class="level6">
<h6 class="anchored" data-anchor-id="question-4">Question</h6>
<p>The <span class="math inline">\(5\)</span>th order Taylor polynomial for <span class="math inline">\(\sin(x)\)</span> about <span class="math inline">\(c=0\)</span> is: <span class="math inline">\(x - x^3/3! + x^5/5!\)</span>. Use this to find the first <span class="math inline">\(3\)</span> terms of the Taylor polynomial of <span class="math inline">\(\sin(x^2)\)</span> about <span class="math inline">\(c=0\)</span>.</p>
<p>They are:</p>
<div class="cell" data-hold="true" data-execution_count="49">
<div class="cell-output cell-output-display" data-execution_count="50">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="4650444306843843416" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_4650444306843843416">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_4650444306843843416_1">
<input class="form-check-input" type="radio" name="radio_4650444306843843416" id="radio_4650444306843843416_1" value="1">
<span class="label-body px-1">
\(x^2\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_4650444306843843416_2">
<input class="form-check-input" type="radio" name="radio_4650444306843843416" id="radio_4650444306843843416_2" value="2">
<span class="label-body px-1">
\(x^2 \cdot (x - x^3/3! + x^5/5!)\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_4650444306843843416_3">
<input class="form-check-input" type="radio" name="radio_4650444306843843416" id="radio_4650444306843843416_3" value="3">
<span class="label-body px-1">
\(x^2 - x^6/3! + x^{10}/5!\)
</span>
</label>
</div>
</div>
</div>
<div id="4650444306843843416_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_4650444306843843416"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 3;
var msgBox = document.getElementById('4650444306843843416_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_4650444306843843416")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_4650444306843843416")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
<section id="question-5" class="level6">
<h6 class="anchored" data-anchor-id="question-5">Question</h6>
<p>A more direct derivation of the form of the Taylor polynomial (here taken about <span class="math inline">\(c=0\)</span>) is to <em>assume</em> a polynomial form that matches <span class="math inline">\(f\)</span>:</p>
<p><span class="math display">\[
f(x) = a + bx + cx^2 + dx^3 + ex^4 + \cdots
\]</span></p>
<p>If this is true, then formally evaluating at <span class="math inline">\(x=0\)</span> gives <span class="math inline">\(f(0) = a\)</span>, so <span class="math inline">\(a\)</span> is determined. Similarly, formally differentiating and evaluating at <span class="math inline">\(0\)</span> gives <span class="math inline">\(f'(0) = b\)</span>. What is the result of formally differentiating <span class="math inline">\(4\)</span> times and evaluating at <span class="math inline">\(0\)</span>:</p>
<div class="cell" data-hold="true" data-execution_count="50">
<div class="cell-output cell-output-display" data-execution_count="51">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="12327269650119636836" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_12327269650119636836">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_12327269650119636836_1">
<input class="form-check-input" type="radio" name="radio_12327269650119636836" id="radio_12327269650119636836_1" value="1">
<span class="label-body px-1">
\(f''''(0) = 0\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_12327269650119636836_2">
<input class="form-check-input" type="radio" name="radio_12327269650119636836" id="radio_12327269650119636836_2" value="2">
<span class="label-body px-1">
\(f''''(0) = e\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_12327269650119636836_3">
<input class="form-check-input" type="radio" name="radio_12327269650119636836" id="radio_12327269650119636836_3" value="3">
<span class="label-body px-1">
\(f''''(0) = 4 \cdot 3 \cdot 2 e = 4! e\)
</span>
</label>
</div>
</div>
</div>
<div id="12327269650119636836_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_12327269650119636836"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 3;
var msgBox = document.getElementById('12327269650119636836_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_12327269650119636836")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_12327269650119636836")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
<section id="question-6" class="level6">
<h6 class="anchored" data-anchor-id="question-6">Question</h6>
<p>How big an error is there in approximating <span class="math inline">\(e^x\)</span> by its <span class="math inline">\(5\)</span>th degree Taylor polynomial about <span class="math inline">\(c=0\)</span>, <span class="math inline">\(1 + x + x^2/2! + x^3/3! + x^4/4! + x^5/5!\)</span>, over <span class="math inline">\([-1,1]\)</span>?</p>
<p>The error is known to be <span class="math inline">\(( f^{(6)}(\xi)/6!) \cdot x^6\)</span> for some <span class="math inline">\(\xi\)</span> in <span class="math inline">\([-1,1]\)</span>.</p>
<ul>
<li>The <span class="math inline">\(6\)</span>th derivative of <span class="math inline">\(e^x\)</span> is still <span class="math inline">\(e^x\)</span>:</li>
</ul>
<div class="cell" data-hold="true" data-execution_count="51">
<div class="cell-output cell-output-display" data-execution_count="52">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="1987034626305634080" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_1987034626305634080">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_1987034626305634080_1">
<input class="form-check-input" type="radio" name="radio_1987034626305634080" id="radio_1987034626305634080_1" value="1">
<span class="label-body px-1">
Yes
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_1987034626305634080_2">
<input class="form-check-input" type="radio" name="radio_1987034626305634080" id="radio_1987034626305634080_2" value="2">
<span class="label-body px-1">
No
</span>
</label>
</div>
</div>
</div>
<div id="1987034626305634080_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_1987034626305634080"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 1;
var msgBox = document.getElementById('1987034626305634080_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_1987034626305634080")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_1987034626305634080")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
<ul>
<li>Which is true about the function <span class="math inline">\(e^x\)</span>:</li>
</ul>
<div class="cell" data-hold="true" data-execution_count="52">
<div class="cell-output cell-output-display" data-execution_count="53">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="2312736062218522134" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_2312736062218522134">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_2312736062218522134_1">
<input class="form-check-input" type="radio" name="radio_2312736062218522134" id="radio_2312736062218522134_1" value="1">
<span class="label-body px-1">
It is decreasing
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_2312736062218522134_2">
<input class="form-check-input" type="radio" name="radio_2312736062218522134" id="radio_2312736062218522134_2" value="2">
<span class="label-body px-1">
It both increases and decreases
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_2312736062218522134_3">
<input class="form-check-input" type="radio" name="radio_2312736062218522134" id="radio_2312736062218522134_3" value="3">
<span class="label-body px-1">
It is increasing
</span>
</label>
</div>
</div>
</div>
<div id="2312736062218522134_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_2312736062218522134"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 3;
var msgBox = document.getElementById('2312736062218522134_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_2312736062218522134")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_2312736062218522134")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
<ul>
<li>The maximum value of <span class="math inline">\(e^x\)</span> over <span class="math inline">\([-1,1]\)</span> occurs at</li>
</ul>
<div class="cell" data-hold="true" data-execution_count="53">
<div class="cell-output cell-output-display" data-execution_count="54">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="694393002035554750" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_694393002035554750">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_694393002035554750_1">
<input class="form-check-input" type="radio" name="radio_694393002035554750" id="radio_694393002035554750_1" value="1">
<span class="label-body px-1">
An end point
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_694393002035554750_2">
<input class="form-check-input" type="radio" name="radio_694393002035554750" id="radio_694393002035554750_2" value="2">
<span class="label-body px-1">
A critical point
</span>
</label>
</div>
</div>
</div>
<div id="694393002035554750_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_694393002035554750"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 1;
var msgBox = document.getElementById('694393002035554750_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_694393002035554750")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_694393002035554750")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
<ul>
<li>Which theorem tells you that for a <em>continuous</em> function over <em>closed</em> interval, a maximum value will exist?</li>
</ul>
<div class="cell" data-hold="true" data-execution_count="54">
<div class="cell-output cell-output-display" data-execution_count="55">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="10289117014016785309" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_10289117014016785309">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_10289117014016785309_1">
<input class="form-check-input" type="radio" name="radio_10289117014016785309" id="radio_10289117014016785309_1" value="1">
<span class="label-body px-1">
The mean value theorem
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_10289117014016785309_2">
<input class="form-check-input" type="radio" name="radio_10289117014016785309" id="radio_10289117014016785309_2" value="2">
<span class="label-body px-1">
The extreme value theorem
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_10289117014016785309_3">
<input class="form-check-input" type="radio" name="radio_10289117014016785309" id="radio_10289117014016785309_3" value="3">
<span class="label-body px-1">
The intermediate value theorem
</span>
</label>
</div>
</div>
</div>
<div id="10289117014016785309_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_10289117014016785309"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 2;
var msgBox = document.getElementById('10289117014016785309_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_10289117014016785309")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_10289117014016785309")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
<ul>
<li>What is the <em>largest</em> possible value of the error:</li>
</ul>
<div class="cell" data-hold="true" data-execution_count="55">
<div class="cell-output cell-output-display" data-execution_count="56">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="3456204453175563448" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_3456204453175563448">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_3456204453175563448_1">
<input class="form-check-input" type="radio" name="radio_3456204453175563448" id="radio_3456204453175563448_1" value="1">
<span class="label-body px-1">
\(1/6!\cdot e^1 \cdot 1^6\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_3456204453175563448_2">
<input class="form-check-input" type="radio" name="radio_3456204453175563448" id="radio_3456204453175563448_2" value="2">
<span class="label-body px-1">
\(1^6 \cdot 1 \cdot 1^6\)
</span>
</label>
</div>
</div>
</div>
<div id="3456204453175563448_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_3456204453175563448"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 1;
var msgBox = document.getElementById('3456204453175563448_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_3456204453175563448")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_3456204453175563448")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
<section id="question-7" class="level6">
<h6 class="anchored" data-anchor-id="question-7">Question</h6>
<p>The error in using <span class="math inline">\(T_k(x)\)</span> to approximate <span class="math inline">\(e^x\)</span> over the interval <span class="math inline">\([-1/2, 1/2]\)</span> is <span class="math inline">\((1/(k+1)!) e^\xi x^{k+1}\)</span>, for some <span class="math inline">\(\xi\)</span> in the interval. This is <em>less</em> than <span class="math inline">\(1/((k+1)!) e^{1/2} (1/2)^{k+1}\)</span>.</p>
<ul>
<li>Why?</li>
</ul>
<div class="cell" data-hold="true" data-execution_count="56">
<div class="cell-output cell-output-display" data-execution_count="57">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="7638431106114353954" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_7638431106114353954">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_7638431106114353954_1">
<input class="form-check-input" type="radio" name="radio_7638431106114353954" id="radio_7638431106114353954_1" value="1">
<span class="label-body px-1">
The function has a critical point at \(x=1/2\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_7638431106114353954_2">
<input class="form-check-input" type="radio" name="radio_7638431106114353954" id="radio_7638431106114353954_2" value="2">
<span class="label-body px-1">
The function is monotonic in \(k\), so achieves its maximum at \(k+1\)
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_7638431106114353954_3">
<input class="form-check-input" type="radio" name="radio_7638431106114353954" id="radio_7638431106114353954_3" value="3">
<span class="label-body px-1">
The function \(e^x\) is increasing, so takes on its largest value at the endpoint and the function \(|x^n| \leq |x|^n \leq (1/2)^n\)
</span>
</label>
</div>
</div>
</div>
<div id="7638431106114353954_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_7638431106114353954"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 3;
var msgBox = document.getElementById('7638431106114353954_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_7638431106114353954")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_7638431106114353954")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
<p>Assuming the above is right, find the smallest value <span class="math inline">\(k\)</span> guaranteeing a error no more than <span class="math inline">\(10^{-16}\)</span>.</p>
<div class="cell" data-hold="true" data-execution_count="57">
<div class="cell-output cell-output-display" data-execution_count="58">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="1532267961115748201" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_1532267961115748201">
<div style="padding-top: 5px">
<br>
<div class="input-group">
<input id="1532267961115748201" type="number" class="form-control" placeholder="Numeric answer">
</div>
</div>
</div>
<div id="1532267961115748201_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.getElementById("1532267961115748201").addEventListener("change", function() {
var correct = (Math.abs(this.value - 14) <= 0);
var msgBox = document.getElementById('1532267961115748201_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_1532267961115748201")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_1532267961115748201")
if (explanation != null) {
explanation.style.display = "block";
}
}
});
</script>
</div>
</div>
<ul>
<li>The function <span class="math inline">\(f(x) = (1 - x + x^2) \cdot e^x\)</span> has a Taylor polynomial about <span class="math inline">\(0\)</span> such that all coefficients are rational numbers. Is it true that the numerators are all either <span class="math inline">\(1\)</span> or prime? (From the 2014 <a href="http://kskedlaya.org/putnam-archive/2014.pdf">Putnam</a> exam.)</li>
</ul>
<p>Here is one way to get all the values bigger than 1:</p>
<div class="cell" data-hold="true" data-execution_count="58">
<div class="sourceCode cell-code" id="cb54"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a>ex <span class="op">=</span> (<span class="fl">1</span> <span class="op">-</span> x <span class="op">+</span> x<span class="op">^</span><span class="fl">2</span>)<span class="fu">*exp</span>(x)</span>
<span id="cb54-2"><a href="#cb54-2" aria-hidden="true" tabindex="-1"></a>Tn <span class="op">=</span> <span class="fu">series</span>(ex, x, <span class="fl">0</span>, <span class="fl">100</span>).<span class="fu">removeO</span>()</span>
<span id="cb54-3"><a href="#cb54-3" aria-hidden="true" tabindex="-1"></a>ps <span class="op">=</span> sympy.<span class="fu">Poly</span>(Tn, x).<span class="fu">coeffs</span>()</span>
<span id="cb54-4"><a href="#cb54-4" aria-hidden="true" tabindex="-1"></a>qs <span class="op">=</span> <span class="fu">numer</span>.(ps)</span>
<span id="cb54-5"><a href="#cb54-5" aria-hidden="true" tabindex="-1"></a>qs[qs <span class="op">.&gt;</span> <span class="fl">1</span>] <span class="op">|&gt;</span> <span class="dt">Tuple</span> <span class="co"># format better for output</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
<div class="cell-output cell-output-display" data-execution_count="59">
<pre><code>(97, 89, 83, 79, 73, 71, 67, 61, 59, 53, 47, 43, 41, 37, 31, 29, 23, 19, 17, 13, 11, 7, 5, 2, 3, 2)</code></pre>
</div>
</div>
<p>Verify by hand that each of the remaining values is a prime number to answer the question (Or you can use <code>sympy.isprime.(qs)</code>).</p>
<p>Are they all prime or <span class="math inline">\(1\)</span>?</p>
<div class="cell" data-hold="true" data-execution_count="59">
<div class="cell-output cell-output-display" data-execution_count="60">
<form class="mx-2 my-3 mw-100" name="WeaveQuestion" data-id="4510127231051355711" data-controltype="">
<div class="form-group ">
<div class="controls">
<div class="form" id="controls_4510127231051355711">
<div style="padding-top: 5px">
<div class="form-check">
<label class="form-check-label" for="radio_4510127231051355711_1">
<input class="form-check-input" type="radio" name="radio_4510127231051355711" id="radio_4510127231051355711_1" value="1">
<span class="label-body px-1">
Yes
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label" for="radio_4510127231051355711_2">
<input class="form-check-input" type="radio" name="radio_4510127231051355711" id="radio_4510127231051355711_2" value="2">
<span class="label-body px-1">
No
</span>
</label>
</div>
</div>
</div>
<div id="4510127231051355711_message" style="padding-bottom: 15px"></div>
</div>
</div>
</form>
<script text="text/javascript">
document.querySelectorAll('input[name="radio_4510127231051355711"]').forEach(function(rb) {
rb.addEventListener("change", function() {
var correct = rb.value == 1;
var msgBox = document.getElementById('4510127231051355711_message');
if(correct) {
msgBox.innerHTML = "<div class='pluto-output admonition note alert alert-success'><span> 👍&nbsp; Correct </span></div>";
var explanation = document.getElementById("explanation_4510127231051355711")
if (explanation != null) {
explanation.style.display = "none";
}
} else {
msgBox.innerHTML = "<div class='pluto-output admonition alert alert-danger'><span>👎&nbsp; Incorrect </span></div>";
var explanation = document.getElementById("explanation_4510127231051355711")
if (explanation != null) {
explanation.style.display = "block";
}
}
})});
</script>
</div>
</div>
</section>
</section>
<section id="appendix" class="level2" data-number="35.5">
<h2 data-number="35.5" class="anchored" data-anchor-id="appendix"><span class="header-section-number">35.5</span> Appendix</h2>
<p>We mentioned two facts that could use a proof: the Newton form of the interpolating polynomial and the mean value theorem for divided differences. Our explanation tries to emphasize a parallel with the secant lines relationship with the tangent line. The standard way to discuss Taylor polynomials is different (also more direct) and so these two proofs are not in most calculus texts.</p>
<p>A <a href="https://www.math.uh.edu/~jingqiu/math4364/interpolation.pdf">proof</a> of the Newton form can be done knowing that the interpolating polynomial is unique and can be expressed either as</p>
<p><span class="math display">\[
g(x)=a_0 + a_1 (x-x_0) + \cdots + a_n (x-x_0)\cdot\cdots\cdot(x-x_{n-1})
\]</span></p>
<p><em>or</em> in this reversed form</p>
<p><span class="math display">\[
h(x)=b_0 + b_1 (x-x_n) + b_2(x-x_n)(x-x_{n-1}) + \cdots + b_n (x-x_n)(x-x_{n-1})\cdot\cdots\cdot(x-x_1).
\]</span></p>
<p>These two polynomials are of degree <span class="math inline">\(n\)</span> or less and have <span class="math inline">\(u(x) = h(x)-g(x)=0\)</span>, by uniqueness. So the coefficients of <span class="math inline">\(u(x)\)</span> are <span class="math inline">\(0\)</span>. We have that the coefficient of <span class="math inline">\(x^n\)</span> must be <span class="math inline">\(a_n-b_n\)</span> so <span class="math inline">\(a_n=b_n\)</span>. Our goal is to express <span class="math inline">\(a_n\)</span> in terms of <span class="math inline">\(a_{n-1}\)</span> and <span class="math inline">\(b_{n-1}\)</span>. Focusing on the <span class="math inline">\(x^{n-1}\)</span> term, we have:</p>
<p><span class="math display">\[
\begin{align*}
b_n(x-x_n)(x-x_{n-1})\cdot\cdots\cdot(x-x_1)
&amp;- a_n\cdot(x-x_0)\cdot\cdots\cdot(x-x_{n-1}) \\
&amp;=
a_n [(x-x_1)\cdot\cdots\cdot(x-x_{n-1})] [(x- x_n)-(x-x_0)] \\
&amp;= -a_n \cdot(x_n - x_0) x^{n-1} + p_{n-2},
\end{align*}
\]</span></p>
<p>where <span class="math inline">\(p_{n-2}\)</span> is a polynomial of at most degree <span class="math inline">\(n-2\)</span>. (The expansion of <span class="math inline">\((x-x_1)\cdot\cdots\cdot(x-x_{n-1}))\)</span> leaves <span class="math inline">\(x^{n-1}\)</span> plus some lower degree polynomial.) Similarly, we have <span class="math inline">\(a_{n-1}(x-x_0)\cdot\cdots\cdot(x-x_{n-2}) = a_{n-1}x^{n-1} + q_{n-2}\)</span> and <span class="math inline">\(b_{n-1}(x-x_n)\cdot\cdots\cdot(x-x_2) = b_{n-1}x^{n-1}+r_{n-2}\)</span>. Combining, we get that the <span class="math inline">\(x^{n-1}\)</span> term of <span class="math inline">\(u(x)\)</span> is</p>
<p><span class="math display">\[
(b_{n-1}-a_{n-1}) - a_n(x_n-x_0) = 0.
\]</span></p>
<p>On rearranging, this yields <span class="math inline">\(a_n = (b_{n-1}-a_{n-1}) / (x_n - x_0)\)</span>. By <em>induction</em> - that <span class="math inline">\(a_i=f[x_0, x_1, \dots, x_i]\)</span> and <span class="math inline">\(b_i = f[x_n, x_{n-1}, \dots, x_{n-i}]\)</span> (which has trivial base case) - this is <span class="math inline">\((f[x_1, \dots, x_n] - f[x_0,\dots x_{n-1}])/(x_n-x_0)\)</span>.</p>
<p>Now, assuming the Newton form is correct, a <a href="http://tinyurl.com/zjogv83">proof</a> of the mean value theorem for divided differences comes down to Rolles theorem. Starting from the Newton form of the polynomial and expanding in terms of <span class="math inline">\(1, x, \dots, x^n\)</span> we see that <span class="math inline">\(g(x) = p_{n-1}(x) + f[x_0, x_1, \dots,x_n]\cdot x^n\)</span>, where now <span class="math inline">\(p_{n-1}(x)\)</span> is a polynomial of degree at most <span class="math inline">\(n-1\)</span>. That is, the coefficient of <span class="math inline">\(x^n\)</span> is <span class="math inline">\(f[x_0, x_1, \dots, x_n]\)</span>. Consider the function <span class="math inline">\(h(x)=f(x) - g(x)\)</span>. It has zeros <span class="math inline">\(x_0, x_1, \dots, x_n\)</span>.</p>
<p>By Rolles theorem, between any two such zeros <span class="math inline">\(x_i, x_{i+1}\)</span>, <span class="math inline">\(0 \leq i &lt; n\)</span> there must be a zero of the derivative of <span class="math inline">\(h(x)\)</span>, say <span class="math inline">\(\xi^1_i\)</span>. So <span class="math inline">\(h'(x)\)</span> has zeros <span class="math inline">\(\xi^1_0 &lt; \xi^1_1 &lt; \dots &lt; \xi^1_{n-1}\)</span>.</p>
<p>We visualize this with <span class="math inline">\(f(x) = \sin(x)\)</span> and <span class="math inline">\(x_i = i\)</span> for <span class="math inline">\(i=0, 1, 2, 3\)</span>, The <span class="math inline">\(x_i\)</span> values are indicated with circles, the <span class="math inline">\(\xi^1_i\)</span> values indicated with squares:</p>
<div class="cell" data-hold="true" data-execution_count="60">
<div class="cell-output cell-output-display" data-execution_count="61">
<p><img src="taylor_series_polynomials_files/figure-html/cell-61-output-1.svg" class="img-fluid"></p>
</div>
</div>
<p>Again by Rolles theorem, between any pair of adjacent zeros <span class="math inline">\(\xi^1_i, \xi^1_{i+1}\)</span> there must be a zero <span class="math inline">\(\xi^2_i\)</span> of <span class="math inline">\(h''(x)\)</span>. So there are <span class="math inline">\(n-1\)</span> zeros of <span class="math inline">\(h''(x)\)</span>. Continuing, we see that there will be <span class="math inline">\(n+1-3\)</span> zeros of <span class="math inline">\(h^{(3)}(x)\)</span>, <span class="math inline">\(n+1-4\)</span> zeros of <span class="math inline">\(h^{4}(x)\)</span>, <span class="math inline">\(\dots\)</span>, <span class="math inline">\(n+1-(n-1)\)</span> zeros of <span class="math inline">\(h^{n-1}(x)\)</span>, and finally <span class="math inline">\(n+1-n\)</span> (<span class="math inline">\(1\)</span>) zeros of <span class="math inline">\(h^{(n)}(x)\)</span>. Call this last zero <span class="math inline">\(\xi\)</span>. It satisfies <span class="math inline">\(x_0 \leq \xi \leq x_n\)</span>. Further, <span class="math inline">\(0 = h^{(n)}(\xi) = f^{(n)}(\xi) - g^{(n)}(\xi)\)</span>. But <span class="math inline">\(g\)</span> is a degree <span class="math inline">\(n\)</span> polynomial, so the <span class="math inline">\(n\)</span>th derivative is the coefficient of <span class="math inline">\(x^n\)</span> times <span class="math inline">\(n!\)</span>. In this case we have <span class="math inline">\(0 = f^{(n)}(\xi) - f[x_0, \dots, x_n] n!\)</span>. Rearranging yields the result.</p>
</section>
</main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
const toggleBodyColorMode = (bsSheetEl) => {
const mode = bsSheetEl.getAttribute("data-mode");
const bodyEl = window.document.querySelector("body");
if (mode === "dark") {
bodyEl.classList.add("quarto-dark");
bodyEl.classList.remove("quarto-light");
} else {
bodyEl.classList.add("quarto-light");
bodyEl.classList.remove("quarto-dark");
}
}
const toggleBodyColorPrimary = () => {
const bsSheetEl = window.document.querySelector("link#quarto-bootstrap");
if (bsSheetEl) {
toggleBodyColorMode(bsSheetEl);
}
}
toggleBodyColorPrimary();
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const clipboard = new window.ClipboardJS('.code-copy-button', {
target: function(trigger) {
return trigger.previousElementSibling;
}
});
clipboard.on('success', function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!");
setTimeout(function() {
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
});
function tippyHover(el, contentFn) {
const config = {
allowHTML: true,
content: contentFn,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start'
};
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
let href = ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
return note.innerHTML;
});
}
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const cites = ref.parentNode.getAttribute('data-cites').split(' ');
tippyHover(ref, function() {
var popup = window.document.createElement('div');
cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// target, if specified
link.setAttribute("target", "_blank");
}
}
});
</script>
<nav class="page-navigation">
<div class="nav-page nav-page-previous">
<a href="../derivatives/related_rates.html" class="pagination-link">
<i class="bi bi-arrow-left-short"></i> <span class="nav-page-text"><span class="chapter-number">34</span>&nbsp; <span class="chapter-title">Related rates</span></span>
</a>
</div>
<div class="nav-page nav-page-next">
<a href="../integrals/area.html" class="pagination-link">
<span class="nav-page-text"><span class="chapter-number">36</span>&nbsp; <span class="chapter-title">Area under a curve</span></span> <i class="bi bi-arrow-right-short"></i>
</a>
</div>
</nav>
</div> <!-- /content -->
<footer class="footer">
<div class="nav-footer">
<div class="nav-footer-center">Copyright 2022, John Verzani</div>
</div>
</footer>
</body></html>