8-SageCalculus.ipynb (214050B)
1 { 2 "cells": [ 3 { 4 "cell_type": "markdown", 5 "metadata": {}, 6 "source": [ 7 "# Symbolic expressions\n", 8 "\n", 9 "**Reference:** [[1](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html)]\n", 10 "\n", 11 "Last time we saw the basics of symbolic expressions:\n", 12 "* How to define and manipulate symbolic expressions\n", 13 "* How to introduce new variables (in the Mathematical sense) with `var()`\n", 14 "* How to solve equations and inequalities\n", 15 "* Some of the Mathematical constants that are included in Sage, and how to approximate them using `n()`\n", 16 "\n", 17 "Here are some examples to remind you of these basic things:" 18 ] 19 }, 20 { 21 "cell_type": "code", 22 "execution_count": 2, 23 "metadata": {}, 24 "outputs": [ 25 { 26 "name": "stdout", 27 "output_type": "stream", 28 "text": [ 29 "[\n", 30 "x == -sqrt(-pi),\n", 31 "x == sqrt(-pi)\n", 32 "]\n", 33 "[\n", 34 "z == -sqrt(pi + x^2),\n", 35 "z == sqrt(pi + x^2)\n", 36 "]\n", 37 "[[y < -2], [y > 1]]\n", 38 "2*pi + e is approximately 9.00146713563863\n" 39 ] 40 } 41 ], 42 "source": [ 43 "var('y', 'z') # Define new variables (x is already defined by Sage)\n", 44 "f = x^2 + pi\n", 45 "g = y^2 + y - 2 > 0\n", 46 "print( solve(f==0, x) )\n", 47 "print( solve(z^2 - f, z) )\n", 48 "print( solve(g, y) )\n", 49 "print( 2*pi + e, \"is approximately\", n(2*pi + e) )" 50 ] 51 }, 52 { 53 "cell_type": "markdown", 54 "metadata": {}, 55 "source": [ 56 "Now we will see some more details about solving equations and manipulating their solutions." 57 ] 58 }, 59 { 60 "cell_type": "markdown", 61 "metadata": {}, 62 "source": [ 63 "## Solving equations and inequalities\n", 64 "\n", 65 "**Reference** [[1](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html)] for the details of `solve()` and `find_root()`, [[2](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/relation.html#solving)] for examples.\n", 66 "\n", 67 "Other than equations and inequalities, we can also solve systems: it is enough to give Sage a list of expressions and a list of variables with respect to which we want to solve. For example the system\n", 68 "\n", 69 "\\begin{align*}\n", 70 " \\begin{cases}\n", 71 " x + y = 2 \\\\\n", 72 " 2x - y = 6\n", 73 " \\end{cases}\n", 74 "\\end{align*}\n", 75 "\n", 76 "Can be solved as" 77 ] 78 }, 79 { 80 "cell_type": "code", 81 "execution_count": 40, 82 "metadata": {}, 83 "outputs": [ 84 { 85 "data": { 86 "text/plain": [ 87 "[[x == (8/3), y == (-2/3)]]" 88 ] 89 }, 90 "execution_count": 40, 91 "metadata": {}, 92 "output_type": "execute_result" 93 } 94 ], 95 "source": [ 96 "solve([x+y == 2, 2*x - y == 6], [x,y])" 97 ] 98 }, 99 { 100 "cell_type": "markdown", 101 "metadata": {}, 102 "source": [ 103 "**Exercise.** Find the intersection of the circle of radius $2$ centered in the origin and the parabula of equation $y=x^2-2x^2+1$." 104 ] 105 }, 106 { 107 "cell_type": "markdown", 108 "metadata": {}, 109 "source": [ 110 "### The set of solutions\n", 111 "\n", 112 "One would expect the result of `solve()` to be a list of solutions, but it is actually a list of expressions (technically it is not a list but a different type of Python collection, but this is not so important)" 113 ] 114 }, 115 { 116 "cell_type": "code", 117 "execution_count": 37, 118 "metadata": {}, 119 "outputs": [ 120 { 121 "data": { 122 "text/plain": [ 123 "x == -3" 124 ] 125 }, 126 "execution_count": 37, 127 "metadata": {}, 128 "output_type": "execute_result" 129 } 130 ], 131 "source": [ 132 "solutions = solve(x^2-9 == 0, x)\n", 133 "solutions[0] # This is the expression 'x == -3'" 134 ] 135 }, 136 { 137 "cell_type": "markdown", 138 "metadata": {}, 139 "source": [ 140 "To read the actual solution without the `x ==` part you can use the `rhs()` or `lhs()` functions, which can be applied to any expression containing a relation operator (like `==`, `<`, `>=`...) and return the *right hand side* and *left hand side* of the expression, respectively" 141 ] 142 }, 143 { 144 "cell_type": "code", 145 "execution_count": 41, 146 "metadata": {}, 147 "outputs": [ 148 { 149 "name": "stdout", 150 "output_type": "stream", 151 "text": [ 152 "rhs: 2\n", 153 "lhs: x\n" 154 ] 155 } 156 ], 157 "source": [ 158 "f = x == 2\n", 159 "print(\"rhs:\", f.rhs())\n", 160 "print(\"lhs:\", f.lhs())" 161 ] 162 }, 163 { 164 "cell_type": "markdown", 165 "metadata": {}, 166 "source": [ 167 "When you solve an inequality or a system, the set of solutions can be more complicated to describe. In this case the result is a list containing lists of expressions that have to be `True` at the same time. It is easier to explain with an example:" 168 ] 169 }, 170 { 171 "cell_type": "code", 172 "execution_count": 38, 173 "metadata": {}, 174 "outputs": [ 175 { 176 "name": "stdout", 177 "output_type": "stream", 178 "text": [ 179 "Simple inequality: [[x < -3], [x > 3]]\n", 180 "System of inequalities:\n", 181 " [\n", 182 "[3 < x, x < 6],\n", 183 "[x < -3]\n", 184 "]\n" 185 ] 186 } 187 ], 188 "source": [ 189 "print(\"Simple inequality:\", solve(x^2-9 > 0, x))\n", 190 "print(\"System of inequalities:\\n\", solve([x^2-9 > 0, x < 6], x))" 191 ] 192 }, 193 { 194 "cell_type": "markdown", 195 "metadata": {}, 196 "source": [ 197 "In the last example (system of inequalities), Sage is telling us that the system\n", 198 "\\begin{align*}\n", 199 " \\begin{cases}\n", 200 " x^2-9 > 9 \\\\\n", 201 " x < 6\n", 202 " \\end{cases}\n", 203 "\\end{align*}\n", 204 "has two solutions:\n", 205 "* $x$ is between $3$ and $6$;\n", 206 "* $x$ is less than $-3$.\n", 207 "\n", 208 "Since in Sage (and in Python) expressions can have at most on relational operator like `<`, the first solution requires two expressions to be described. Hence the \"list of lists\".\n" 209 ] 210 }, 211 { 212 "cell_type": "markdown", 213 "metadata": {}, 214 "source": [ 215 "**Exercise.** In the first exercise you were asked to solve a system of equations, but some of its solutions were complex numbers. Select only the real solutions and print them as pairs $(x,y)$." 216 ] 217 }, 218 { 219 "cell_type": "markdown", 220 "metadata": {}, 221 "source": [ 222 "When solving a system of equations (not inequalities), you can use the option `solution_dict=True` to have the solutions arranged as a *dictionary*, which is a type of Python collection that we did not treat in this course" 223 ] 224 }, 225 { 226 "cell_type": "code", 227 "execution_count": 44, 228 "metadata": {}, 229 "outputs": [ 230 { 231 "data": { 232 "text/plain": [ 233 "[{x: 8/3, y: -2/3}]" 234 ] 235 }, 236 "execution_count": 44, 237 "metadata": {}, 238 "output_type": "execute_result" 239 } 240 ], 241 "source": [ 242 "solve([x+y == 2, 2*x - y == 6], [x,y], solution_dict=True)" 243 ] 244 }, 245 { 246 "cell_type": "markdown", 247 "metadata": {}, 248 "source": [ 249 "### Alternative method for real roots: `find_root()`\n", 250 "\n", 251 "The `solve()` method is very useful when solving *symbolic* equations, for example when you have two variables and you want to solve for one of them in terms of the other. However, it does not always find explicit solutions.\n", 252 "\n", 253 "When you want to find an explicit, even if approximate, solution, it can be better to use `find_root()`. This function works *numerically*, which means that it finds an approximation of the root. It only works for real solutions and you need to specify an interval where you want the root to be searched:" 254 ] 255 }, 256 { 257 "cell_type": "code", 258 "execution_count": 52, 259 "metadata": {}, 260 "outputs": [ 261 { 262 "name": "stdout", 263 "output_type": "stream", 264 "text": [ 265 "Using solve():\n", 266 " [\n", 267 "x == -e^x + 10\n", 268 "]\n", 269 "Using find_root(): 2.070579904980303\n" 270 ] 271 } 272 ], 273 "source": [ 274 "f = e^x + x - 10\n", 275 "print(\"Using solve():\\n\", solve(f, x))\n", 276 "print(\"Using find_root():\", f.find_root(0,100))" 277 ] 278 }, 279 { 280 "cell_type": "markdown", 281 "metadata": {}, 282 "source": [ 283 "## Evaluating functions\n", 284 "\n", 285 "If an expression contains only one variable you can evaluate it easily, even if it is not a function." 286 ] 287 }, 288 { 289 "cell_type": "code", 290 "execution_count": 21, 291 "metadata": {}, 292 "outputs": [ 293 { 294 "name": "stdout", 295 "output_type": "stream", 296 "text": [ 297 "1\n", 298 "y + 3 > (y + 3)^2\n" 299 ] 300 } 301 ], 302 "source": [ 303 "var('y')\n", 304 "f = x^2-3\n", 305 "g = x > x^2\n", 306 "\n", 307 "print(f(2))\n", 308 "print(g(3+y))" 309 ] 310 }, 311 { 312 "cell_type": "markdown", 313 "metadata": {}, 314 "source": [ 315 "If an expression contains more than one variable, you can specify a value for each of them and they will be substituted in alphabetic order. You can also specify a value only for some of the variables." 316 ] 317 }, 318 { 319 "cell_type": "code", 320 "execution_count": 38, 321 "metadata": {}, 322 "outputs": [ 323 { 324 "name": "stdout", 325 "output_type": "stream", 326 "text": [ 327 "-2 == 0\n", 328 "3*y == 2\n" 329 ] 330 } 331 ], 332 "source": [ 333 "var('y','z')\n", 334 "\n", 335 "f = y*z^2 - y == z\n", 336 "print(f(2, 0))\n", 337 "print(f(z=2))" 338 ] 339 }, 340 { 341 "cell_type": "markdown", 342 "metadata": {}, 343 "source": [ 344 "## Symbolic computations\n", 345 "\n", 346 "Sage can understand and simplify symbolic expressions such as sums (finite or infinite) and products. In the following cell, we compute the following sums using the [`sum()`](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html#sage.symbolic.expression.Expression.sum) function:\n", 347 "\n", 348 "\\begin{align*}\n", 349 " \\begin{array}{llcc}\n", 350 " (1) & \\sum_{k=0}^nk &=&\\frac{n^2+n}{2}\\\\\n", 351 " (2) & \\sum_{k=0}^nk^4 &=&\\frac{6n^5+15n^4+10n^3-n}{30}\\\\\n", 352 " (3) & \\sum_{k=0}^n\\binom nk &=& 2^n\\\\\n", 353 " (4) & \\sum_{k=0}^\\infty \\frac1{k^2} &=& \\frac{\\pi^2}{6}\n", 354 " \\end{array}\n", 355 "\\end{align*}" 356 ] 357 }, 358 { 359 "cell_type": "code", 360 "execution_count": 22, 361 "metadata": {}, 362 "outputs": [ 363 { 364 "name": "stdout", 365 "output_type": "stream", 366 "text": [ 367 "(1) 1/2*n^2 + 1/2*n\n", 368 "(2) 1/5*n^5 + 1/2*n^4 + 1/3*n^3 - 1/30*n\n", 369 "(3) 2^n\n", 370 "(4) 1/6*pi^2\n" 371 ] 372 } 373 ], 374 "source": [ 375 "var('k', 'n') # Remember to declare all variables\n", 376 "\n", 377 "s = []\n", 378 "s.append( sum(k, k, 0, n) )\n", 379 "s.append( sum(k^4, k, 0, n) )\n", 380 "s.append( sum(binomial(n,k), k, 0, n) )\n", 381 "s.append( sum(1/k^2, k, 1, infinity) )\n", 382 "\n", 383 "for i in range(len(s)):\n", 384 " print(\"({}) {}\".format(i+1, s[i]))" 385 ] 386 }, 387 { 388 "cell_type": "markdown", 389 "metadata": {}, 390 "source": [ 391 "An alternative notation is `expression.sum(k, a, b)`. There is an analogous [`prod()`](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html#sage.symbolic.expression.Expression.prod) for products." 392 ] 393 }, 394 { 395 "cell_type": "markdown", 396 "metadata": {}, 397 "source": [ 398 "Sometimes Sage tries to keep an expression in its original form without expanding out sums and products. To change this behavior you can use the [`expand()`](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html#sage.symbolic.expression.Expression.expand) function:" 399 ] 400 }, 401 { 402 "cell_type": "code", 403 "execution_count": 30, 404 "metadata": {}, 405 "outputs": [ 406 { 407 "name": "stdout", 408 "output_type": "stream", 409 "text": [ 410 "(x + 1)^2 - (x - 1)^2\n", 411 "4*x\n" 412 ] 413 } 414 ], 415 "source": [ 416 "f = (x+1)^2 - (x-1)^2\n", 417 "print(f)\n", 418 "print(f.expand())" 419 ] 420 }, 421 { 422 "cell_type": "markdown", 423 "metadata": {}, 424 "source": [ 425 "### The Symbolic Ring\n", 426 "**Reference:** [[3](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/ring.html)]\n", 427 "\n", 428 "The symbolic expressions that we have seen so far live in a ring called *symbolic ring* and denoted by `SR` in Sage. This ring works like the ring `ZZ` of integers or `RR` of reals numbers. In particular, you can define matrices and other objects using it as a \"basis\"." 429 ] 430 }, 431 { 432 "cell_type": "code", 433 "execution_count": 45, 434 "metadata": {}, 435 "outputs": [ 436 { 437 "name": "stdout", 438 "output_type": "stream", 439 "text": [ 440 "-b*c + a*d\n", 441 "[(-a, 2)]\n" 442 ] 443 } 444 ], 445 "source": [ 446 "var('a', 'b', 'c', 'd')\n", 447 "\n", 448 "M = matrix([[a,b], [c,d]])\n", 449 "print(M.determinant())\n", 450 "\n", 451 "polring.<x> = SR[]\n", 452 "f = x^2 + 2*a*x + a^2\n", 453 "print(f.roots())" 454 ] 455 }, 456 { 457 "cell_type": "markdown", 458 "metadata": {}, 459 "source": [ 460 "**Exercise.** Compute the eigenvalues of the matrix\n", 461 "\\begin{align*}\n", 462 "\\begin{pmatrix}\n", 463 "\\cos \\alpha & \\sin \\alpha\\\\\n", 464 "-\\sin\\alpha & \\cos \\alpha\n", 465 "\\end{pmatrix}\n", 466 "\\end{align*}" 467 ] 468 }, 469 { 470 "cell_type": "markdown", 471 "metadata": {}, 472 "source": [ 473 "# Calculus\n", 474 "**Reference:** [[4](https://doc.sagemath.org/html/en/reference/calculus/index.html)] for an overview, but most functions are described in [[1](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html)]" 475 ] 476 }, 477 { 478 "cell_type": "markdown", 479 "metadata": {}, 480 "source": [ 481 "## Limits and series\n", 482 "\n", 483 "**References:** [[5](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/calculus.html#sage.calculus.calculus.limit)] for limits, [[6](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html#sage.symbolic.expression.Expression.series)] for series\n", 484 "\n", 485 "You can compute limits" 486 ] 487 }, 488 { 489 "cell_type": "code", 490 "execution_count": 54, 491 "metadata": {}, 492 "outputs": [ 493 { 494 "name": "stdout", 495 "output_type": "stream", 496 "text": [ 497 "1\n", 498 "0\n" 499 ] 500 } 501 ], 502 "source": [ 503 "f = sin(x)/x\n", 504 "# print(f(0)) # This one gives an error\n", 505 "print( f.limit(x=0) )\n", 506 "\n", 507 "print( (e^(-x)).limit(x=infinity) )" 508 ] 509 }, 510 { 511 "cell_type": "markdown", 512 "metadata": {}, 513 "source": [ 514 "**Exercise.** Compute the constant $e$ using a limit." 515 ] 516 }, 517 { 518 "cell_type": "markdown", 519 "metadata": {}, 520 "source": [ 521 "You can also specify a direction for the limit. If you don't, Sage assumes that you want to take a two-sided limit." 522 ] 523 }, 524 { 525 "cell_type": "code", 526 "execution_count": 55, 527 "metadata": {}, 528 "outputs": [ 529 { 530 "name": "stdout", 531 "output_type": "stream", 532 "text": [ 533 "und\n", 534 "1\n", 535 "-1\n" 536 ] 537 } 538 ], 539 "source": [ 540 "f = abs(x)/x # 1 if x>0, -1 if x<0\n", 541 "print( f.limit(x=0) ) # undefined\n", 542 "print( f.limit(x=0, dir=\"+\") )\n", 543 "print( f.limit(x=0, dir=\"-\") )" 544 ] 545 }, 546 { 547 "cell_type": "markdown", 548 "metadata": {}, 549 "source": [ 550 "There is also the alternative notation `limit(f, x, dir)` which does the same as `f.limit(x, dir)`." 551 ] 552 }, 553 { 554 "cell_type": "markdown", 555 "metadata": {}, 556 "source": [ 557 "You can also compute series expansions up to any order. **Watch out:** the notation uses `==` instead of `=` as `limit()` does." 558 ] 559 }, 560 { 561 "cell_type": "code", 562 "execution_count": 56, 563 "metadata": {}, 564 "outputs": [ 565 { 566 "name": "stdout", 567 "output_type": "stream", 568 "text": [ 569 "1 + 1*x + 1/2*x^2 + Order(x^3)\n", 570 "(-2) + 1*x + 1*x^2 + (-1/6)*x^3 + (-1/12)*x^4 + 1/120*x^5 + 1/360*x^6 + Order(x^7)\n", 571 "1*(x - 1) + (-1/2)*(x - 1)^2 + Order((x - 1)^3)\n" 572 ] 573 } 574 ], 575 "source": [ 576 "f = e^x\n", 577 "g = sin(x) - 2*cos(x)\n", 578 "h = log(x)\n", 579 "\n", 580 "print(f.series(x==0, 3))\n", 581 "print(g.series(x==0, 7))\n", 582 "print(h.series(x==1, 3))" 583 ] 584 }, 585 { 586 "cell_type": "markdown", 587 "metadata": {}, 588 "source": [ 589 "## Derivatives\n", 590 "**References:** [[7](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html#sage.symbolic.expression.Expression.derivative)] and [[8](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/functional.html#sage.calculus.functional.derivative)] for derivatives, [[9](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/functions.html#sage.calculus.functions.jacobian)] for the Jacobian matrix and [[10](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/expression.html#sage.symbolic.expression.Expression.hessian)] for the Hessian." 591 ] 592 }, 593 { 594 "cell_type": "markdown", 595 "metadata": {}, 596 "source": [ 597 "When computing derivatives, you need to specify with respect to which variables you want to derive, except in case there is only one." 598 ] 599 }, 600 { 601 "cell_type": "code", 602 "execution_count": 57, 603 "metadata": {}, 604 "outputs": [ 605 { 606 "name": "stdout", 607 "output_type": "stream", 608 "text": [ 609 "8*y^3\n", 610 "6*x^2 - 1\n" 611 ] 612 } 613 ], 614 "source": [ 615 "var('y')\n", 616 "print( (x^2+2*y^4).derivative(y) ) # Alternative: derivative(f, y)\n", 617 "print( (2*x^3-x+2).derivative() )" 618 ] 619 }, 620 { 621 "cell_type": "markdown", 622 "metadata": {}, 623 "source": [ 624 "You can also compute higher order derivatives:" 625 ] 626 }, 627 { 628 "cell_type": "code", 629 "execution_count": 58, 630 "metadata": {}, 631 "outputs": [ 632 { 633 "name": "stdout", 634 "output_type": "stream", 635 "text": [ 636 "6*x\n", 637 "84*x^5*y + 10*y^4 + 24*x^2*y\n", 638 "1680*x^3 + 48\n" 639 ] 640 } 641 ], 642 "source": [ 643 "print( (x^3).derivative(x, x) ) # Same as (x^3).derivative(x, 2)\n", 644 "\n", 645 "f = x^7*y^2 + x^4*y^2 - 2*x^3 + x^2*y^5 + y + 2\n", 646 "print( f.derivative(x, x, y) ) # Twice in x, once in y\n", 647 "print( f.derivative(x, 4, y, 2) ) # 4 times in x, twice in y" 648 ] 649 }, 650 { 651 "cell_type": "markdown", 652 "metadata": {}, 653 "source": [ 654 "Jacobian and Hessian matrices are also easy to compute:" 655 ] 656 }, 657 { 658 "cell_type": "code", 659 "execution_count": 59, 660 "metadata": {}, 661 "outputs": [ 662 { 663 "name": "stdout", 664 "output_type": "stream", 665 "text": [ 666 "[-2*x + 2*y 2*x]\n", 667 "[ 0 3*y^2]\n", 668 "[ y + 1 x + 1] \n", 669 "\n", 670 "[ 2 -4*y + 1]\n", 671 "[ -4*y + 1 -4*x + 6*y]\n" 672 ] 673 } 674 ], 675 "source": [ 676 "f = (-x^2 + 2*x*y, y^3, x+y+x*y)\n", 677 "print( jacobian(f, [x,y]), \"\\n\" )\n", 678 "\n", 679 "g = x^2 + x*y + y^3 -2*x*y^2 -3\n", 680 "print( g.hessian() )" 681 ] 682 }, 683 { 684 "cell_type": "markdown", 685 "metadata": {}, 686 "source": [ 687 "*Note:* the notation `f.jacobian([x,y])` is also valid, but only if you specify that `f` is vector by declaring it as `f = vector([...])`." 688 ] 689 }, 690 { 691 "cell_type": "markdown", 692 "metadata": {}, 693 "source": [ 694 "## Integrals\n", 695 "**References:** [[11](https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/integration/integral.html)] for symbolic integration and [[12](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/integration.html)] for numerical methods.\n", 696 "\n", 697 "You should remember from high school or from your first calculus/analysis course that derivatives are easy, but integrals are hard.\n", 698 "When using a computer software to solve your integrals, you have two choices:\n", 699 "\n", 700 "1. You can try to compute a primitive function exactly, and then (if you are computing a definite integral) substitute the endpoints of your integration interval to get the result. We can call this *symbolic integration*.\n", 701 "2. You can get an *approximated* result with a *numerical method*. This method always gives some kind of result, but it cannot be used to compute indefinite integrals.\n", 702 "\n", 703 "Sage can do both of these things, although people that work in numerical analysis and use often the second method tend to prefer other programs, such as Matlab (or its open-source clone Octave)." 704 ] 705 }, 706 { 707 "cell_type": "markdown", 708 "metadata": {}, 709 "source": [ 710 "### Symbolic integration\n", 711 "\n", 712 "Symbolic integrals work more or less like derivatives. You must specify an integration variable, but the endpoints of the integration interval are optional. If they are not given you get an indefinite integral." 713 ] 714 }, 715 { 716 "cell_type": "code", 717 "execution_count": 60, 718 "metadata": {}, 719 "outputs": [ 720 { 721 "name": "stdout", 722 "output_type": "stream", 723 "text": [ 724 "1/2*x^2 - cos(x)\n", 725 "0\n", 726 "-1/2*a^2 + 1/2*b^2 + cos(a) - cos(b)\n" 727 ] 728 } 729 ], 730 "source": [ 731 "var('a', 'b')\n", 732 "f = x + sin(x)\n", 733 "print( f.integral(x) ) # Alternative: integral(f, x)\n", 734 "print( f.integral(x, -10, 10) )\n", 735 "print( f.integral(x, a, b) )" 736 ] 737 }, 738 { 739 "cell_type": "markdown", 740 "metadata": {}, 741 "source": [ 742 "Your endpoints can also be $\\pm\\infty$:" 743 ] 744 }, 745 { 746 "cell_type": "code", 747 "execution_count": 61, 748 "metadata": {}, 749 "outputs": [ 750 { 751 "name": "stdout", 752 "output_type": "stream", 753 "text": [ 754 "1\n", 755 "sqrt(pi)\n" 756 ] 757 } 758 ], 759 "source": [ 760 "print( integral(e^(-x), x, 0, infinity) )\n", 761 "print( integral(e^(-x^2), x, -infinity, infinity) )" 762 ] 763 }, 764 { 765 "cell_type": "markdown", 766 "metadata": {}, 767 "source": [ 768 "The last function is also an example of an integral that perhaps you might want to compute numerically. In fact:" 769 ] 770 }, 771 { 772 "cell_type": "code", 773 "execution_count": 65, 774 "metadata": {}, 775 "outputs": [ 776 { 777 "name": "stdout", 778 "output_type": "stream", 779 "text": [ 780 "1/2*sqrt(pi)*erf(x)\n", 781 "1/2*sqrt(pi)*erf(2) - 1/2*sqrt(pi)*erf(1)\n" 782 ] 783 } 784 ], 785 "source": [ 786 "print( integral(e^(-x^2), x) )\n", 787 "print( integral(e^(-x^2), x, 1, 2) )" 788 ] 789 }, 790 { 791 "cell_type": "markdown", 792 "metadata": {}, 793 "source": [ 794 "Here `erf(x)` denotes the [error function](https://en.wikipedia.org/wiki/Error_function)." 795 ] 796 }, 797 { 798 "cell_type": "markdown", 799 "metadata": {}, 800 "source": [ 801 "### Numerical integration\n", 802 "\n", 803 "In order to get an explicit value for the computations above, we can use a *numerical* method.\n", 804 "\n", 805 "The word \"numerical\" does not have much to do with numbers, but it refers to the fact that we are trying to compute explicit results rather than symbolic or algebraic ones. [Numerical analysis](https://en.wikipedia.org/wiki/Numerical_analysis) is the branch of mathematics that studies methods to approximate computations over the real or complex numbers. With these methods there is usually a trade-off between speed and precision.\n", 806 "\n", 807 "The Sage function [`numerical_integral()`](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/integration.html#sage.calculus.integration.numerical_integral) takes as a parameter a real-valued one-variable function and the integration endpoints, and it returns both an approximate value for the integral and an error estimate." 808 ] 809 }, 810 { 811 "cell_type": "code", 812 "execution_count": 40, 813 "metadata": {}, 814 "outputs": [ 815 { 816 "data": { 817 "text/plain": [ 818 "(0.13525725794999466, 1.5016572202374808e-15)" 819 ] 820 }, 821 "execution_count": 40, 822 "metadata": {}, 823 "output_type": "execute_result" 824 } 825 ], 826 "source": [ 827 "numerical_integral(e^(-x^2), 1, 2)" 828 ] 829 }, 830 { 831 "cell_type": "markdown", 832 "metadata": {}, 833 "source": [ 834 "The result above means, in symbols\n", 835 "\\begin{align*}\n", 836 "\\int_1^2 e^{-x^2}\\mathrm dx = 0.13525725794999466 \\pm 1.5016572202374808\\times 10^{-15}\n", 837 "\\end{align*}\n", 838 "\n", 839 "There is also a [`monte_carlo_integral()`](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/integration.html#sage.calculus.integration.monte_carlo_integral) method for functions with more than one variable." 840 ] 841 }, 842 { 843 "cell_type": "markdown", 844 "metadata": {}, 845 "source": [ 846 "**Exercise.** Compute the area of the ellipse of equation $y^2+\\left(\\frac x3\\right)^2=1$." 847 ] 848 }, 849 { 850 "cell_type": "markdown", 851 "metadata": {}, 852 "source": [ 853 "## Differential equations\n", 854 "**Reference:** [[13](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/desolvers.html)]\n", 855 "\n", 856 "A [differential equation](https://en.wikipedia.org/wiki/Differential_equation) is an equation involving an unknwon function and its derivatives. They can be of two kinds: *ordinary* differential equations ([ODE](https://en.wikipedia.org/wiki/Ordinary_differential_equation)) and *partial* differential equations ([PDE](https://en.wikipedia.org/wiki/Partial_differential_equation)). The latter involve multivariate functions and their partial derivatives.\n", 857 "\n", 858 "Differential equations are in general hard to solve *exactly* (or *symbolically*): even a simple equation of the form $f'(x)=g(x)$, where $g(x)$ is someknown function, requires solving the integral $\\int g(x)\\mathrm{d}x$ in order to find $f$, which as we know is not always easy!\n", 859 "\n", 860 "Theoretical results on differential equations usually ensure the existence and/or uniquess of a solution under certain conditions, but in general they do not give a way to solve them. There exits many methods to find approximate solutions, and some of them are implemented in Sage as well (see [[13](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/desolvers.html)]). However we will focus on the simple ODEs that can be solved exactly.\n", 861 "\n", 862 "Let's start with a simple example. Let's find all functions $f(x)$ such that $f'(x)=f(x)$. In order to do so, we need to use the `function()` construct, which allows us to define an \"unknwon\" function inside Sage, like we define variables with `var()`." 863 ] 864 }, 865 { 866 "cell_type": "code", 867 "execution_count": 4, 868 "metadata": {}, 869 "outputs": [ 870 { 871 "data": { 872 "text/plain": [ 873 "_C*e^x" 874 ] 875 }, 876 "execution_count": 4, 877 "metadata": {}, 878 "output_type": "execute_result" 879 } 880 ], 881 "source": [ 882 "var('x')\n", 883 "function('f')\n", 884 "equation = derivative(f(x)) == f(x)\n", 885 "desolve(equation, f(x)) # f is the unknown function" 886 ] 887 }, 888 { 889 "cell_type": "markdown", 890 "metadata": {}, 891 "source": [ 892 "As you can expect, they are all the functions $Ce^x$ for some constant $C$. The constant $C$ plays the same role as the constant in the solution of an integral, but in this case Sage writes it explicitly.\n", 893 "\n", 894 "We can also specify *initial conditions* for our function. For example we can impose that $f(0)=3$ as follows:" 895 ] 896 }, 897 { 898 "cell_type": "code", 899 "execution_count": 5, 900 "metadata": {}, 901 "outputs": [ 902 { 903 "data": { 904 "text/plain": [ 905 "3*e^x" 906 ] 907 }, 908 "execution_count": 5, 909 "metadata": {}, 910 "output_type": "execute_result" 911 } 912 ], 913 "source": [ 914 "desolve(equation, f(x), (0,3))" 915 ] 916 }, 917 { 918 "cell_type": "markdown", 919 "metadata": {}, 920 "source": [ 921 "You can also solve *second order* equations, that is equations where the second derivative also appears. In this case if you want to specify an initial condition you should write the triple of values $(x_0, f(x_0), f'(x_0))$." 922 ] 923 }, 924 { 925 "cell_type": "code", 926 "execution_count": 6, 927 "metadata": {}, 928 "outputs": [ 929 { 930 "data": { 931 "text/plain": [ 932 "-1/2*I*sqrt(2)*sqrt(pi)*integrate(erf(1/2*I*sqrt(2)*x)*e^(-1/2*x^2), x)" 933 ] 934 }, 935 "execution_count": 6, 936 "metadata": {}, 937 "output_type": "execute_result" 938 } 939 ], 940 "source": [ 941 "equation = derivative(f(x), x, 2) + x*derivative(f(x)) == 1\n", 942 "desolve(equation, f(x), (0, 0, 0))" 943 ] 944 }, 945 { 946 "cell_type": "markdown", 947 "metadata": {}, 948 "source": [ 949 "**Exercise.** Use Sage to find out the functions $f(x)$ that satisfy\n", 950 "\\begin{align*}\n", 951 " \\begin{array}{rlcrl}\n", 952 " (A) &\n", 953 " \\begin{cases}\n", 954 " f(0) &= 1\\\\\n", 955 " f'(0) &= 0\\\\\n", 956 " f''(x) &= -f(x)\n", 957 " \\end{cases}\n", 958 " & \\qquad \\qquad &\n", 959 " (B) &\n", 960 " \\begin{cases}\n", 961 " f(0) &= 0\\\\\n", 962 " f'(0) &= 1\\\\\n", 963 " f''(x) &= -f(x)\n", 964 " \\end{cases}\n", 965 " \\end{array}\n", 966 "\\end{align*}" 967 ] 968 }, 969 { 970 "cell_type": "code", 971 "execution_count": null, 972 "metadata": {}, 973 "outputs": [], 974 "source": [] 975 }, 976 { 977 "cell_type": "markdown", 978 "metadata": {}, 979 "source": [ 980 "### A real-world example\n", 981 "\n", 982 "Differential equations have countless applications in Science, so it would be a shame not to see at least a simple one.\n", 983 "\n", 984 "Consider an object moving with constant acceleration $a$. Its velocity at time $t$ is described by the formula $v(t) = v(0) + at$. For example an object falling from the sky has acceleration $g\\sim 9.8 m/s^2$ towards the ground, so its velocity is $v(t) = -gt$.\n", 985 "\n", 986 "However in the real world you need to take into account the air's resistance, which depends (among other things) on the velocity of the object. In this case the acceleration $a(t)$ is not constant anymore, and it satisfies an equation of the form $a(t)=-g -kv(t)$, where $k$ is some constant that may depend on the shape and mass of the object (in practice it may be more complicated than this).\n", 987 "\n", 988 "Since the acceleration is the derivative of the velocity, we have a differential equation\n", 989 "\\begin{align*}\n", 990 " v'(t) = -g -kv(t)\n", 991 "\\end{align*}\n", 992 "and we can try to solve it with Sage!" 993 ] 994 }, 995 { 996 "cell_type": "code", 997 "execution_count": 7, 998 "metadata": {}, 999 "outputs": [ 1000 { 1001 "data": { 1002 "text/plain": [ 1003 "-98/15*(e^(3/2*t) - 1)*e^(-3/2*t)" 1004 ] 1005 }, 1006 "execution_count": 7, 1007 "metadata": {}, 1008 "output_type": "execute_result" 1009 } 1010 ], 1011 "source": [ 1012 "var('t')\n", 1013 "function('v')\n", 1014 "g = 9.8\n", 1015 "k = 1.5\n", 1016 "conditions = (0, 0) # Start with velocity 0\n", 1017 "desolve(derivative(v(t)) == -g -k*v(t), v(t), conditions)" 1018 ] 1019 }, 1020 { 1021 "cell_type": "markdown", 1022 "metadata": {}, 1023 "source": [ 1024 "If you want to solve this equation symbolically (that is, keeping $g$ and $k$ in symbols) you need to specify that $t$ is the *independent variable* of the equation:" 1025 ] 1026 }, 1027 { 1028 "cell_type": "code", 1029 "execution_count": 10, 1030 "metadata": {}, 1031 "outputs": [ 1032 { 1033 "data": { 1034 "text/plain": [ 1035 "-(g*e^(k*t) - g)*e^(-k*t)/k" 1036 ] 1037 }, 1038 "execution_count": 10, 1039 "metadata": {}, 1040 "output_type": "execute_result" 1041 } 1042 ], 1043 "source": [ 1044 "var('t', 'g', 'k')\n", 1045 "function('v')\n", 1046 "conditions = (0, 0) # Start with velocity 0\n", 1047 "desolve(derivative(v(t)) == -g -k*v(t), v(t), conditions, ivar=t)" 1048 ] 1049 }, 1050 { 1051 "cell_type": "markdown", 1052 "metadata": {}, 1053 "source": [ 1054 "# Basic data analysis and visualization\n", 1055 "\n", 1056 "## Statistics\n", 1057 "**References:** [[14](https://doc.sagemath.org/html/en/reference/stats/sage/stats/basic_stats.html)]\n", 1058 "\n", 1059 "Sage includes the most basic functions for statistical analysis." 1060 ] 1061 }, 1062 { 1063 "cell_type": "code", 1064 "execution_count": 20, 1065 "metadata": {}, 1066 "outputs": [ 1067 { 1068 "name": "stdout", 1069 "output_type": "stream", 1070 "text": [ 1071 "Values:\t [1, 2, 3, 3, -6, -2, 4, -1, 0, 2, 3, -4, 0]\n", 1072 "Mean:\t\t\t 5/13\n", 1073 "Median:\t\t\t 1\n", 1074 "Mode:\t\t\t [3]\n", 1075 "Standard deviation:\t 2*sqrt(29/13)\n", 1076 "Variance:\t\t 116/13\n", 1077 "Moving average (5): [3/5, 0, 2/5, -2/5, -1, 3/5, 8/5, 0, 1/5]\n" 1078 ] 1079 } 1080 ], 1081 "source": [ 1082 "L = [1, 2, 3, 3, -6, -2, 4, -1, 0, 2, 3, -4, 0]\n", 1083 "\n", 1084 "print(\"Values:\\t\", L)\n", 1085 "\n", 1086 "print(\"Mean:\\t\\t\\t\", mean(L))\n", 1087 "print(\"Median:\\t\\t\\t\", median(L))\n", 1088 "print(\"Mode:\\t\\t\\t\", mode(L))\n", 1089 "\n", 1090 "print(\"Standard deviation:\\t\", std(L))\n", 1091 "print(\"Variance:\\t\\t\", variance(L))\n", 1092 "\n", 1093 "print(\"Moving average (5):\", moving_average(L,5))" 1094 ] 1095 }, 1096 { 1097 "cell_type": "markdown", 1098 "metadata": {}, 1099 "source": [ 1100 "You can also compare your data to a probability distribution, see [this page](https://doc.sagemath.org/html/en/reference/probability/sage/probability/probability_distribution.html). If you need to do more advanced statistics you should consider using [R](https://www.r-project.org/); you can also use it inside Sage." 1101 ] 1102 }, 1103 { 1104 "cell_type": "markdown", 1105 "metadata": {}, 1106 "source": [ 1107 "## Plotting\n", 1108 "**Reference:** [[15](https://doc.sagemath.org/html/en/reference/plotting/index.html)], more specifically the subsection [[16](https://doc.sagemath.org/html/en/reference/plotting/sage/plot/plot.html)].\n", 1109 "\n", 1110 "Some Sage objects can be plotted:" 1111 ] 1112 }, 1113 { 1114 "cell_type": "code", 1115 "execution_count": 21, 1116 "metadata": {}, 1117 "outputs": [ 1118 { 1119 "data": { 1120 "image/png": "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\n", 1121 "text/plain": [ 1122 "Graphics object consisting of 1 graphics primitive" 1123 ] 1124 }, 1125 "execution_count": 21, 1126 "metadata": {}, 1127 "output_type": "execute_result" 1128 } 1129 ], 1130 "source": [ 1131 "f = sin(x)\n", 1132 "plot(f)" 1133 ] 1134 }, 1135 { 1136 "cell_type": "markdown", 1137 "metadata": {}, 1138 "source": [ 1139 "Sage's plotting functions are based on Python's [matplotlib](https://matplotlib.org/).\n", 1140 "\n", 1141 "You can give a number of options to adjust the aspect of your plot, see [here](https://doc.sagemath.org/html/en/reference/plotting/sage/plot/plot.html#sage.plot.plot.plot). Let's see some of them:" 1142 ] 1143 }, 1144 { 1145 "cell_type": "code", 1146 "execution_count": 67, 1147 "metadata": {}, 1148 "outputs": [ 1149 { 1150 "data": { 1151 "image/png": "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\n", 1152 "text/plain": [ 1153 "Graphics object consisting of 1 graphics primitive" 1154 ] 1155 }, 1156 "execution_count": 67, 1157 "metadata": {}, 1158 "output_type": "execute_result" 1159 } 1160 ], 1161 "source": [ 1162 "f = sin(x)\n", 1163 "plot(f,\n", 1164 " -2*pi, 2*pi, # bounds for x\n", 1165 " ymin = -0.7, ymax = 0.7, # bounds for y\n", 1166 " color = \"red\",\n", 1167 " title = \"The sin function\",\n", 1168 " )" 1169 ] 1170 }, 1171 { 1172 "cell_type": "markdown", 1173 "metadata": {}, 1174 "source": [ 1175 "Some of the options are not described precisely in Sage's documentation, but you can find them on [matplotlib's documentation](https://matplotlib.org/stable/contents.html). You can find many examples online for adjusting your plot as you like!" 1176 ] 1177 }, 1178 { 1179 "cell_type": "markdown", 1180 "metadata": {}, 1181 "source": [ 1182 "If you need to plot more than one object at the time, you can sum two plots and show them together with `show()`:" 1183 ] 1184 }, 1185 { 1186 "cell_type": "code", 1187 "execution_count": 36, 1188 "metadata": {}, 1189 "outputs": [ 1190 { 1191 "data": { 1192 "image/png": "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\n", 1193 "text/plain": [ 1194 "Graphics object consisting of 2 graphics primitives" 1195 ] 1196 }, 1197 "metadata": {}, 1198 "output_type": "display_data" 1199 } 1200 ], 1201 "source": [ 1202 "cosine = plot(cos(x), (x,-pi/2,pi/2), color=\"red\")\n", 1203 "exponential = plot(exp(x), (x,-2,0.5))\n", 1204 "\n", 1205 "show(cosine + exponential)" 1206 ] 1207 }, 1208 { 1209 "cell_type": "markdown", 1210 "metadata": {}, 1211 "source": [ 1212 "Finally, there are other types of plots that you can use, like [scatter plots](https://doc.sagemath.org/html/en/reference/plotting/sage/plot/scatter_plot.html#sage.plot.scatter_plot.scatter_plot) and [bar charts](https://doc.sagemath.org/html/en/reference/plotting/sage/plot/bar_chart.html#sage.plot.bar_chart.bar_chart). You can also add [text](https://doc.sagemath.org/html/en/reference/plotting/sage/plot/text.html#sage.plot.text.text) to your plot:" 1213 ] 1214 }, 1215 { 1216 "cell_type": "code", 1217 "execution_count": 53, 1218 "metadata": {}, 1219 "outputs": [ 1220 { 1221 "data": { 1222 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAGGCAYAAABxHyV7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAtOElEQVR4nO3dfZhcdX338fd3d8MGhAyBalVYS1QUNoEQIEErJkEUFEGw0oIPuYUqtBCrctfbCLWCogYK1QisDwhEqpBETW0Rq1IoBAENEBKQBuQpIdiIIEg2xTiE7O/+Y3Y3J7sz+5DM7uyceb+u61yzM+fMzPfMCexnf+d3vhMpJSRJklTSVOsCJEmSxhLDkSRJUobhSJIkKcNwJEmSlGE4kiRJyjAcSZIkZRiOJEmSMgxHkiRJGQ0djqJkQkRErWuRJEljQ0utCxhBg7b+3rBhA4VCgQ0bNoxGPZIkqbaGNBjS0CNHkiRJfdV1OIqI3SJiQUQ8HhGbIuKOiJhe67okSVL9qvfTalcAU4A5wHrgA8CNEdHuF+pKkqTtUbfhKCJ2Bt4DHJ9SurX74fMi4gTgjJoVJkmS6lrdhiNKtTcDf+zz+Cbg8HJPKBaLFIvF3vudnZ0jVpwkSapPdTvnKKW0Efg58I8R8cqIaI6IDwCHAa8o95z58+dTKBR6l7a2ttEsWZKkHRYxekujinqemxMRrwGuAmYCW4B7gIeAg1NK+/fdvtzIUVtbGxs2bGDChAmjVLUkSdtvNENLHUeESob06dXzaTVSSo8CsyLiJcCElNJvImIJsAboF45aW1tpbW0d7TIlSVIdqdvTalkppee7g9FE4Gjg32tdkyRJqk91HY4i4uiIeHtETIqItwE3A78CFta4NEmSVKfqOhwBBaADeBD4F+A24KiU0uaaViVJkupWvc85+i7w3VrXIUmS8qPeR44kSZKqqiHDUUdHB+3t7Uyf7tewSZKkbdV1n6NBDLpjnZ2dFAoF+xxJkuqGfY52yJA+vYYcOZIkSarEcCRJkpRhOJIkScowHEmSJGUYjiRJkjIMR5IkSRkNGY7scyRJkiqxz5F9jiRJdcQ+RzvEPkeSJEnDZTiSJEnKMBxJkiRlGI4kSZIyDEeSJEkZhiNJkqSMhgxH9jmSJEmV2OfIPkeSpDpin6MdYp8jVV9EEBGcd955tS5lSGbPnk1EMHv27FqXIkmqE4YjaZSdcsopvSFz7dq1tS5HktSH4UjaAWvXru0NOt/61rdqXY4kqQoMR5IkSRmGI0mSpAzDkSRJUsawwlFE/CgiUkT8vML6w7vXp4h4LiKay2wzMSK6ureZW+F1XhoRn4+Ild2v88eIWBsR346Iwwd4Ts97/025bT784Q/3zg/ZY489yvY5WrBgARFBS0sLnZ2dA34e2+u5557jC1/4Am984xuZOHEi48aN46UvfSnt7e28+93v5mtf+xpPPfVUv+cN9UqxoV6htXbtWubNm8chhxzCnnvuyfjx45k0aRJHHHEE//zP/8y6desG3Ze77rqL9773vey99960tray1157MWfOHB544IFBnzuQ8847r3d/ofSZnXvuuUyePJldd92VPfbYg9mzZ3PNNdfs0Pv0uO2225gzZw777LMP48ePZ/fdd2fatGl8+tOf5umnny77nIhg0qRJvfdPPfXU3prr7ao+SY1gY60LqB8ppSEvwP+j1D9oM7BrmfWf7l7fsxxaZpsTMuunlFl/FLChz+v0XS4Dmso897+71y9OZbzmNa/pfY3JkyenDRs2JCBt2LChd5vjjz8+AemQQw4p9xI7bPXq1emVr3zlQPuWgHTppZf2e27PunPPPXfA95g1a1YC0qxZsypuc9FFF6Vx48YNWEO552druPTSS1NLS0vZ5+6yyy5p2bJlw/x0tjr33HN7X+uxxx7b5tj1XU488cS0efPm7fostmzZkubOnTvg51AoFNINN9xQ8bMYaCl3rD74wQ/2rl+zZs12f0aSGlOp+9Bwl3sSjOu+HfrzcmhIeadlyCmqZFn3bQtwOPCTPutnl7l/d4VtfkcpzPSKiIOAHwI7UQpgHcC/A88D04BPAZOAud2PzStTXzswq2/h//M//8Ojjz7ae3/16tX87ne/22ablBI/+9nPSkWOUF+cOXPmsH79esaNG8dpp53GO97xDl7+8pfT1dXF+vXrufPOO1m6dOmIvHeP888/n8985jMA7L777px55pkcccQR7Lnnnjz33HPcc889/OAHP+gdtSnnpz/9KcuXL+fAAw/kYx/7GAcccACbNm3iBz/4AV/5ylf4wx/+wJw5c3j44YfZaaeddqjek046iTVr1vC3f/u3nHjiiRQKBe677z4uvPBCHnroIb7//e/zile8gksuuWTYr/2pT32Kjo4OACZN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i2XLlvGJT3yCY489li1btrDTTjv1m6cG0NLS0huYrrrqKhYtWsQDDzzAI488wiOPPFKVq9skafjWsYWVFGkmcSFd3AgcTBc3kbiAIs1s4R7giVoXOjYNtZV234XSXKPsVzx8osJ2N2W2eY4yXxjbZ/vt/uLZ7PKhD32od/uISE899VS/HuKrV6/e5nX/7u/+bsCe41/96ld7t73kkksG3LachQsXDrRPvcvhhx+ennnmmbKv8aUvfani8yZOnJiWLVs2pC+e/eIXv1jxS2N7lsG+eHYgQ6lhIH2/eHbSpEkV63zPe96zQ188e+aZZw74ORQKhfTTn/60Yq3XX399ioiyz/WLZ6XRN/yv19ixZWzu3xMJjkmwvML6X3Svf2JM7dsoqP7Xh/RxJ5DtXHhLhe1uzvxcab5Rr1T62pDXAl+k9D1snUARWEepc9WbU0ofGex1siNFfecb9dhrr722uT/YfKOf/7x0JnHixImccsopA25bzvve9z5uvvlmzjnnHN785jczadIkdtllF3baaSf23ntv3vWud3HttdeybNmyildFnXXWWfzkJz/h6KOPZuLEibS2tjJp0iTmzp3LqlWrhtyG4Oyzz2b16tV8/OMfZ8qUKUyYMIHx48fz6le/miOPPJIFCxawePHiYe/jSJg0aRIrVqzgnHPOYf/992eXXXahUCgwc+ZMvvOd7/D973+flpbtm1jY1NRER0cHt956K+9///t51ate1dsL66CDDuKcc87h4Ycf5qijjqr4Gu985zu56aabOP7443nlK1/Z2zBSkmpnb+BHbL1+qa/DutdX/pqoRhapiv1bxpiKO9bR0UFHRwdbtmzhoYceYsOGDUPqObPPPvvw+OOP89nPfrb3W+01Ms4777ze0385/jcqaQSM9kWko/2/qNHcvxz+73dIn96OjBzVrblz57J69ephfYnounXrePzxxykUCnzsYx8bweokSVItNWQ42h49HbQ/+tGP9nY4liRJ+WMHqCGaM2fOmLl6S5IkjRxHjiRJkjIMR5IkSRkNebVaj87OTgqFwpCvVpMkjX1erVY9OYwIXq0mSZI0XA0Zjjo6Omhvb+/3PVmSJEmeVvO0miTliqfVqieHEcHTapIkScNlOJIkScowHEmSJGUYjiRJkjIMR5IkSRmGI0mSpIyGDEf2OZIkSZXY58g+R5KUK/Y5qp4cRgT7HEmSJA2X4UiSJCnDcCRJkpRhOJIkScowHEmSJGUYjiRJkjIaMhzZ50iqrY0bN9a6BEmqyD5H9jmSRtXKlSs57LDDWL58OdOmTat1Ocoh+xxVTw4jgn2OJI09ixYtYvPmzSxevLjWpUhSWYYjSaMmpcTSJUtoApYuWUKOR64l1bG6DUcRsTYiUpmlo9a1SSpv1apVPLZuHWcBjz7+OPfee2+tS5KkflpqXcAOmA40Z+5PAf4T+F5typGU9eCDD/YLP9dddx0Tm5v53JYtXNnczMUXX8xxxx23zTZTp05lv/32G81SJWkbuZmQHRELgGOBfVNpp5yQLdXQiSeeyNKlS/s9Phe4rPv2qxWe973v+TeOtp8TsqsnJxEhq3EmZEfETsAHgKvSAGmvWCzS2dm5zSJpZFx55ZWcfNJJAPwV8CSwEbi0e/1l3fef7F4P8N6TT+aKK64Y5UolaVu5CEfACcDuwLcG2mj+/PkUCoXepa2tbRRKkxpToVDg2kWLuOqqq7h+/HhmtbSwlq1/tgWwFpjV0sL148ezcOFCrrn2WgqFQq1KbigRo7dI9SYXp9Ui4qfACyml7OSFfjtWLBYpFou99zs7O2lra/O0mjTCfvWrX3HItGm8f9MmvpF5/HTg2p13ZsXKlbz+9a+vVXkNKc+nZjytVj05iAh9DenTq+cJ2QBExJ8BbwX+YrBtW1tbaW1tHfmiJG2jubmZ5zdt4ijgaWAhcCpwFPDNTZtoaan7/xVJypE8nFY7FXgK+FGtC5FU3tKlS9m5qYlxwIHNzcwDpra0sBOwc1NT2YnbklQrdR2OIqKJUji6OqX0Yq3rkVTe0iVLSF1dnABMmTmTFStW0H744ZwApK4uli5ZUtsCJSmjrsMRpdNprwKuqnUhkspbt24dd61cyYvNzVxw4YX89MYbOfjgg7nhppuYf8EFvNjczJ333MMTTzxR61IlCajzcJRSuiGlFCmlh2pdi6TympqaOOaYY7j9jjv45Cc/SVNTU+/j8+bN47bbb+eYY44hvKxJ0hiRi6vVKrAJpCRVkOcrnrxarXpyGBEapwnkcHV0dNDe3s706dNrXYokSRpjHDly5EhSA8rz6IMjR9WTw4jgyJEkSdJwGY4kSZIyDEeSJEkZhiNJkqQMw5EkSVKG4UiSJCmjIcORfY4kSVIl9jmyz5GkBpTnXjn2OaqeHEYE+xxJkiQNl+FIkiQpw3AkSZKUYTiSJEnKMBxJkiRlGI4kSZIyGjIc2edIkiRVYp8j+xxJakB57pVjn6PqyWFEsM+RJEnScBmOJEmSMgxHkiRJGYYjSZKkDMORJElShuFIkiQpoyHDkX2OJElSJfY5ss+RpAaU51459jmqnhxGBPscSZIkDZfhSJIkKaOuw1FE7BUR34mIZyLiDxGxKiIOqXVdkiSpfrXUuoDtFRETgduBm4F3AE8BrwGeq2FZkiSpztVtOALmAU+klE7NPLa2RrVIkqScqOfTau8C7o6I70XEUxGxMiJOG+gJxWKRzs7ObRZJkqSseg5HrwbOAB4Gjga+DlwSEf+n0hPmz59PoVDoXdra2kapVEn1JmJ0F0ljR932OYqIF4C7U0p/nnnsEmB6SumNlOlzVCwWKRaLvfc7Oztpa2uzz5GkfuyVUz153jfI9/7VaUQYyJA+vXqec/QbYHWfxx4A3lPpCa2trbS2to5oUZIkqb7V82m124HX93nsdcDjNahFkiTlRD2Hoy8Db4iIcyLitRHxPuB0oKPGdUmSpDpWt+EopXQX8G7gvcD9wD8CH08pXVPTwiRJUl2r5zlHpJSuB66vdR2SJCk/6nbkSJIkaSQ0ZDjq6Oigvb2d6dOn17oUSZI0xtRtn6MhGHTHOjs7KRQK9jmS1I+9cqonz/sG+d6/HEaEIX16DTlyJEmSVInhSJIkKcNwJEmSlGE4kiRJyjAcSZIkZRiOJEmSMhoyHNnnSJIkVWKfI/scSSrDXjnVk+d9g3zvXw4jgn2OJEmShstwJEmSlGE4kiRJyjAcSZIkZRiOJEmSMgxHkiRJGQ0ZjuxzJEmSKrHPkX2OJJVhr5zqyfO+Qb73L4cRwT5HkiRJw2U4kiRJyjAcSZIkZRiOJEmSMgxHkiRJGYYjSZKkjIYMR43S52jjxo21LkGSpLpjn6Oc9jlauXIlhx12GMuXL2fatGm1LkeqO/bKqZ487xvke/9yGBHsc9TIFi1axObNm1m8eHGtS5Ekqa4YjnIopcTSJUtoApYuWUKORwclSaq6ug1HEXFeRKQ+y5O1rmssWLVqFY+tW8dZwKOPP869995b65IkSaobLbUuYAf9N/DWzP0ttSqkVh588MF+4ee6665jYnMzn9uyhSubm7n44os57rjjttlm6tSp7LfffqNZqiRJdaFuJ2RHxHnACSmlgyps0hATsk888USWLl3a7/G5wGXdt1+t8Lzvfe97I1ydVL+c1Fs9ed43yPf+1WlEGEhDTMjeNyLWR8SaiFgcEa8eaONisUhnZ+c2S7278sorOfmkkwD4K+BJYCNwaff6y7rvP9m9HuC9J5/MFVdcMcqVSpJUH+o5HC0H/g9wNHAa8HLgjojYs9IT5s+fT6FQ6F3a2tpGqdSRUygUuHbRIq666iquHz+eWS0trGVrNA5gLTCrpYXrx49n4cKFXHPttRQKhVqVrByJGN1FkkZD3Z5W6ysiXgI8CvxTSulLlDmtViwWKRaLvfc7Oztpa2ur69NqWb/61a84ZNo03r9pE9/IPH46cO3OO7Ni5Upe//rX16o85VCeT1/ked8g36dmPHbVk5OIkNUQp9V6pZSeB34J7Ftpm9bWViZMmLDNkifNzc08v2kTRwFPA//UfXsU8PymTbS01Pv8e0mSRl5uwlFEtAL7A7+pdS21snTpUnZuamIccGBzM/OAqS0t7ATs3NRUduK2JEnaVt2Go4i4OCJmRcSkiDgM+D4wAbi6xqXVzNIlS0hdXZwATJk5kxUrVtB++OGcAKSuLpYuWVLbAiVJqgN1G46AvYFFwK+AfwVeAN6QUnq8plXVyLp167hr5UpebG7mggsv5Kc33sjBBx/MDTfdxPwLLuDF5mbuvOcennjiiVqXKknSmFa3k1BSSifXuoaxpKmpiWOOOYZzzz2XGTNmbPP4vHnzmD17Np/73OcIL/mRJGlAublarYyGaAIp1VKerwrK875Bvq948thVTw4jQmNdrTYcHR0dtLe3M3369FqXIkmSxhhHjhw5krZbnv9Cz/O+Qb5HHzx21ZPDiODIkSRJ0nAZjiRJkjIMR5IkSRmGI0mSpAzDkSRJUobhSJIkKaMhw5F9jiRJUiX2ObLPkbTd8txPJs/7BvnuleOxq54cRgT7HEmSJA2X4UiSJCnDcCRJkpRhOJIkScowHEmSJGUYjiRJkjIaMhzZ50iSJFVinyP7HEnbLc/9ZPK8b5DvXjkeu+rJYUSwz5EkSdJwGY4kSZIyDEeSJEkZhiNJkqQMw5EkSVKG4UiSJCmjIcORfY4kSVIl9jmyz5G03fLcTybP+wb57pXjsaueHEYE+xxJkiQNl+FIkiQpIzfhKCLOjogUEQtqXYskSapfuQhHETEdOB24r9a1SJKk+lb34SgidgWuAU4Dfl/jciRJUp2r+3AEdAA/SindONiGxWKRzs7ObRZJkqSsug5HEXEycDBw9lC2nz9/PoVCoXdpa2sb2QLV8CJGd5Ek7bi67XMUEW3A3cBRKaV7ux+7BViVUvo4ZfocFYtFisVi7/3Ozk7a2trsc6QRY7+V6rLPUfXkuVeOx6566jQiDGRIn17LSFcxgg4BXgasiK3/UpqBmRHxkRdffJHm5uZtntDa2kpra+voVilJkupKPYejm4AD+jy2EHgQuLC5ufmXo1+SJEmqd3UbjlJKG4H7s49FxPPAMyml+8s/S5IkaWB1PSFbkiSp2up25KiclNLsWtcgSZLqmyNHkiRJGQ0Zjjo6Omhvb2f69Om1LkWSJI0xddvnaAgG3bHOzk4KhYJ9jjRi7LdSXfY5qp4898rx2FVPDiPCkD69hhw5kiRJqsRwJEmSlGE4kiRJyjAcSZIkZRiOJEmSMgxHkiRJGQ0ZjuxzJEmSKrHPkX2ONILst1Jd9jmqnjz3yvHYVU8OI4J9jiRJkobLcCRJkpRhOJIkScowHEmSJGUYjiRJkjIMR5IkSRkNGY7scyRJkiqxz5F9jjSC7LdSXfY5qp4898rx2FVPDiOCfY4kSZKGy3AkSZKUYTiSJEnKMBxJkiRlGI4kSZIyDEeSJEkZDRmO7HMkSZIqsc+RfY40guy3Ul32OaqePPfK8dhVTw4jgn2OJEmShstwJEmSlFG34SgizoiI+yKis3v5eUS8o9Z1SZKk+la34Qj4NfAp4NDu5b+Af4+IyTWtSpIk1bWWWhewvVJKP+zz0D9ExBnAG4D/rkFJkiQpB+o2HGVFRDPwl8BLgJ9X2q5YLFIsFnvvd3Z2jnxxkiSprtTzaTUi4oCI+F+gCHwdeHdKaXWl7efPn0+hUOhd2traRq1WVRYxuoskSQOp6z5HEbET8Cpgd+A9wIeBWd0Bqd+OlRs5amtrs89RjeW5J0me9w3yvX953jfId68cj1311HFEqGRIn15dn1ZLKb0APNJ99+6ImA58DPibctu3trbS2to6WuVJkqQ6VNen1coIwPQjSZK2W92OHEXEF4EfA08AuwEnA7OBt9ewLEmSVOfqNhwBfwp8G3gFsAG4D3h7Suk/a1qVJEmqa3UbjlJKH6p1DZIkKX/yNudIkiRphzRkOOro6KC9vZ3p06fXuhRJkjTG1HWfo0EMumOdnZ0UCgX7HNVYnnuS5HnfIN/7l+d9g3z3yvHYVU8OI8KQPr2GHDmSJEmqxHAkSZKUYTiSJEnKMBxJkiRlGI4kSZIyDEeSJEkZDRmO7HMkSZIqsc+RfY5qLs89SfK8b5Dv/cvzvkG+e+V47KonhxHBPkeSJEnDZTiSJEnKMBxJkiRlGI4kSZIyDEeSJEkZhiNJkqSMhgxH9jmSJEmV2OfIPkc1l+eeJHneN8j3/uV53yDfvXI8dtWTw4hgnyNJkqThMhxJkiRlGI4kSZIyDEeSJEkZhiNJkqQMw5EkSVJGQ4Yj+xxJtbax1gVIUkX2ObLPUc3luSdJnvcNtnf/VgKHAcuBacN6pseuevLcK8djVz05jAj2OZI0Fi0CNgOLa12IJJVlOJI0ihItLKEJaGEJQxjglaRRV7fhKCLOjoi7ImJjRDwVEf8WEa+vdV2SBrKKF1nHWcCLPA7cW+uCJKmflloXsANmAR3AXZT24wvADRHRnlJ6vqaVSQIepH/4uY7daOZzbOFymtnIxcBxfbaZCuw3KhVKUjm5mZAdES8FngJmpZRuxQnZdSPPkyfzvG8w2P6dCCzt9+iZlP6qORP4WsXnfa/sGo9d9eR5Uq/HrnpyEhGyGm5CdqH79tlKGxSLRTo7O7dZJI2UKwlOAuAvgScpXcB/Wffaju77T3avBwhOBq4Y3TIlqY9chKOICOBLwG0ppfsrbTd//nwKhULv0tbWNnpF7oCI0V2k6iiQWARcxVLG8yZaWMvWP9sCWAu8iRaWMh5YSOJatv6dI0m1kYvTahHRAbwTODyl9Ovuh/vtWLFYpFgs9t7v7Oykra1tzJ9Wc4i4ujw1Uz1D379fEUzjNDbxjcyjpwNXsDOJlcDg11N47Konz6dmPHbVk4OI0FdjnFaLiEuBdwFHZIJRWa2trUyYMGGbRdJoaCaxiaOAp4F/6r49Ckhsor6vDZGUN3UbjqLkMuAvgLeklNbUuiZJlSyllSbGAe00Mw+YTAs7Aa00UW7itiTVSt2GI0rzOT8AvA/YGBEv7152rnFdkvpoZglBFycAzzITWMEzHM4JQNBFM0tqWp8kZdVzODqD0szNW4DfZJaTaliTpH7WsYWVFGkmcSFd3AgcTBc3kbiAIs1s4R7giVoXKklAHZ/oTyl5XZVUF5qAY0icC8zo8/g8ErOBzzHEeZKSNOJycbVaBblpAumVF9XlFU/Vk+f9y/O+Qb6vePLYVU8OI0JjXK22PTo6Omhvb2f69Om1LkWSJI0xjhw5ctRPnv8KAkcfqinP+5fnfYN8jz547KonhxHBkSNJkqThMhxJkiRlGI4kSZIyDEeSJEkZhiNJkqQMw5EkSVJGQ4Yj+xxJkqRK7HNkn6N+8tyzA+yVU0153r887xvku1eOx656chgR7HMkSZI0XIYjSZKkDMORJElShuFIkiQpw3AkSZKUYTiSJEnKaMhwZJ8jSZJUiX2O7HPUT557doC9cqopz/uX532DfPfK8dhVTw4jgn2OJEmShstwJEmSlGE4kiRJyjAcSZIkZRiOJEmSMgxHkiRJGQ0ZjuxzJEmSKrHPkX2O+slzzw6wV0415Xn/8rxvkO9eOR676slhRLDPkSRJ0nAZjiRJkjLqOhxFxMyI+GFErI+IFBEn1LomSZJU3+o6HAEvAe4FPlLrQiRJUj601LqAHZFS+jHwY4AY7Rl4kiQpl+o6HA1XsVikWCz23u/s7KxhNZIkaSzKbTgqP5A0H/hsv0cLheG/fg4vb5QkSdT/nKNhOhvYkFmeqG05kiRpzMntyFF5rd2LJElSeQ02ciRJkjSwuh45iohdgddmHpoUEQcBzw7h20MkSZL6qetwBBwK3Jy5/6Xu26trUIskScqBPH/x7KAiYgKlmdmFlJLX9UuSpIYPRwHsBmxMjfxBSJKkXg0djiRJkvryajVJkqQMw5EkSVKG4UiSJCnDcCRJkpRhOJIkScowHEmSJGUYjiRJkjIMR5IkSRmGI0mSpAzDkSRJUkZLrQsYCZnvTJMkScoa9PtUcxmOKAWjDbUuQpIkjTkFoHOgDXL5xbPDGDnaDfg1sDewcUSLKrkTmDEK79MI7+exq9/389jV7/t57Or3/Tx2WzXmyFH3Tg+YCgFKGQoofVCDbr+jIqJrNN6nEd7PY1e/7+exq9/389jV7/t57IbHCdmjq8P3q1t5/yw9dr7fWJT3z9JjN0bfL5en1YYqIiZQmptUGM2Eqx3nsatfHrv65bGrXx674Wn0kaMi8NnuW9UXj1398tjVL49d/fLYDUNDjxxJkiT11egjR5IkSdswHEmSJGUYjiRJkjIMR5IkSRkNG44i4syIWBMRf4yIFRHx5lrXpIFFxNkRcVdEbIyIpyLi3yLi9bWuS8PXfSxTRCyodS0aXETsFRHfiYhnIuIPEbEqIg6pdV0aWES0RMTnu3/XbYqIxyLiMxHRsL/7h6ohP6CIOAlYAHwBmAb8DPhxRLyqlnVpULMoNfp6A/A2Sh3eb4iIl9S0Kg1LREwHTgfuq3UtGlxETARuBzYD7wDagb8HnqthWRqaecDfAh8B9gc+Cfw/4O9qWVQ9aMhL+SNiOXBPSumMzGMPAP+WUjq7dpVpOCLipcBTwKyU0q21rkeDi4hdgXuAM4FPA6tSSh+vaVEaUERcALwppeToep2JiOuB36aUPpR5bCnwh5TSnNpVNvY13MhRROwEHALc0GfVDcCfj35F2gGF7ttna1qFhqMD+FFK6cZaF6Ihexdwd0R8r/t09sqIOK3WRWlIbgOOjIjXAUTEVOBw4D9qWlUdyOUXzw7iT4Bm4Ld9Hv8t8PLRL0fbI0rfovgl4LaU0v21rkeDi4iTgYOB6bWuRcPyauAMSv+9fZHSN59fEhHFlNK/1LQyDeZCSn9EPhgRWyj97vuHlNKi2pY19jViOOrR93xilHlMY9dlwIGU/grSGBcRbcBXgKNSSn+sdT0alibg7pTSOd33V0bEZEqByXA0tp0EfAB4H/DfwEHAgohYn1K6upaFjXWNGI5+B2yh/yjRy+g/mqQxKCIupTTUPzOl9Ota16MhOYTSf2MrSoN+QOmv2JkR8RGgNaW0pVbFaUC/AVb3eewB4D01qEXDcxFwQUppcff9X0bEnwFnA4ajATTcnKOU0gvACkpXO2W9Dbhj9CvSUEXJZcBfAG9JKa2pdU0aspuAAyj95dqz3A1cAxxkMBrTbgf6tsx4HfB4DWrR8OwCdPV5bAsN+Lt/uBpx5AhK586/HRF3Az+ndFnxq4Cv17QqDaaD0vDw8cDGiOgZ/duQUtpUu7I0mJTSRmCbuWER8TzwjHPGxrwvA3dExDnAdynNOTq9e9HY9kPgHyJiHaXTatOA/wtcVdOq6kBDXsoPpSaQlHo+vILS/7TP8nLwsS0iKv1jPTWl9K3RrEU7LiJuwUv560JEHAvMB/YF1gBfSil9s7ZVaTARsRtwPvBuSqe11wOLgM91n0VRBQ0bjiRJksrxvKMkSVKG4UiSJCnDcCRJkpRhOJIkScowHEmSJGUYjiRJkjIMR5IkSRmGI0mSpAzDkSRJUobhSJIkKcNwJEmSlGE4kiRJyvj/nEYfucnkN7kAAAAASUVORK5CYII=\n", 1223 "text/plain": [ 1224 "Graphics object consisting of 3 graphics primitives" 1225 ] 1226 }, 1227 "metadata": {}, 1228 "output_type": "display_data" 1229 } 1230 ], 1231 "source": [ 1232 "b = bar_chart(range(1,10))\n", 1233 "s = scatter_plot([(1,5), (4,2), (8,8), (4,7)],\n", 1234 " marker = \"*\", # symbol\n", 1235 " markersize = 100,\n", 1236 " edgecolor = \"black\",\n", 1237 " facecolor = \"red\"\n", 1238 " )\n", 1239 "t = text(\"wow, such plot!\", (1, 8), color=\"black\", fontsize=20)\n", 1240 "show(b + s + t)" 1241 ] 1242 }, 1243 { 1244 "cell_type": "markdown", 1245 "metadata": {}, 1246 "source": [ 1247 "## Interpolation\n", 1248 "**References:** [[17](https://doc.sagemath.org/html/en/reference/polynomial_rings/sage/rings/polynomial/polynomial_ring.html#sage.rings.polynomial.polynomial_ring.PolynomialRing_field.lagrange_polynomial)] and [[18](https://doc.sagemath.org/html/en/reference/calculus/sage/calculus/interpolation.html)].\n", 1249 "\n", 1250 "When you need to work with a discrete set of data, like measurements of real-world quantities, it can be useful to visualize a \"smoothed out\" version of this data, for example by plotting a function that approximates it.\n", 1251 "\n", 1252 "One way to do so is finding the lowest-degree polynomial that passes through all your points. This is called [Lagrange Polynomial](https://en.wikipedia.org/wiki/Lagrange_polynomial)." 1253 ] 1254 }, 1255 { 1256 "cell_type": "code", 1257 "execution_count": 65, 1258 "metadata": {}, 1259 "outputs": [ 1260 { 1261 "data": { 1262 "image/png": "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uFx7LaSnw+LFbicpGhVKIiIS8tavt7/IH34YIiLcThNcqlWDNm3s2K9A5DeFUnx8PDExMcTGxrodRUREQsz48XYj15493U4SnK67Dj7+GBIT3U5SeBrMLSIiIW3DBjj/fHjlFejTx+00wWnXLqhd26523quX22kyaTC3iIhIfp58EurWVWuSN9WqBRdeGJjLBKhQEhGRkLV9O/zvfzBqlMYmeVvXrvDRR3DsmNtJCkeFkoiIhKz//heqVoXbbnM7SfC76io4dAhWrnQ7SeGoUBIRkZC0axe8+ircey+ULu12muDXrBlUrw7vved2ksJRoSQiIiFp0iQoVw7uvtvtJKHBceDqq+Hdd91OUjgqlEREJOT89RfMnAlDh0L58m6nCR1XXw07dtixYYFChZKIiIScadPsZq1DhridJLR07Gi7OQOpVUmFkoiIhJTERHjuORgwACpVcjtNaClTBi69VIWS5OKvv/6iYcOGhIeHMz9Q13L3Y8888wyO43DxxRdz5MgRt+MEJd3DEgymT4fkZBgxwu0koenqq+3Mt3/+cTtJwQRMobRgwQIuv/xyKleujOM4bNiwIcfj1qxZw6WXXkrZsmU57bTTaN++PcnJyVmOSU5OpkyZMmzbto1Vq1bRunVrKlWqRGRkJA0bNmTKlCk5nrt9+/ZFzn/o0CG6dOlC5cqVGTduHL169WLZsmV5vmbChAk4jsOwYcOKfN2C+t///kezZs0oU6YMderU4amnnsry+eXLl+M4TrbHtm3bsp1r3Lhx3HTTTQDcfffd1KtXj8jISE4//XTi4uJyfM3y5csZN25ckfO//vrr3H///TzzzDMcPHiQ6667juPHj2c55sCBA1xxxRVUr16dUqVKUatWLQYPHkxSUlKRr5th+vTpnHfeeURFRREVFUWrVq1YunRprsfffffdOI7D1KlTsz1fkPfr5HsYICUlhQcffJA6depQqlQp6tWrx0svvZTtdb64hydMmEBsbCzly5enSpUqXHvttfzwww9Fvm5BHD16lNtuu40mTZoQERHBtddem+Nx8fHxnHvuuURGRnLOOefw6quvZvn85s2bue6666hbt26O35+T3XbbbYwePTrz3++99x4tW7YkMjKSypUr071792yvefnll3n55ZeL8iV61J49e+jZsyfnnHMOYWFhPvkZ4y+OHoWpU6FvXzjjDLfT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hx9o06YNAMePH+eXX37J1n2W20y+t956iwULFrB8+XJuvPFGHnvsMcaPH59rhvLly1P+pH03ypcvT8WKFb3yfgWDnTth/ny7yGQuP0bFBZ07w6hR8MUX0KGD22ly541CqQy2u+1kaRRzKYKDBw/y22+/8ccffwBkFkTVqlWjWrVqOI7D/fffz9ixY2natCnNmjXjlVdeYdu2bcybNw+wP+A6depEmTJlMs8bHx9P7dq1M6dSr1q1iqeffpohBVzXPj4+njVr1vDdd99Rq1atzKn2a9euzTKupCDKly+fbRxH2bJlqVSpklfHd+zfv5958+bRvn17jh49yuzZs3n77bf5/PPPM4+ZOnUqdevWpVGjRhw7dow5c+Ywf/78zEUHU1NTWbp0aZZ1dXbu3Mlbb71F586dOf300/n999+ZOHEikZGRXHnllfnmOnToELfccgtDhgyhS5cu1K5dmxYtWnD11VfTo0ePQn+d77//Pnv37iU2NpZy5cqxZcsWRo4cSevWralbt26hz3eyBx54gC5dulCrVi0OHTrE3LlzWb58OR988AEAlSpVotIpSwCXKFGCatWqcc455wAFe79yuod79uzJY489Rt++fRk/fjz79+/n/vvv5/bbbycyMjLf7J68hwEGDRrEG2+8weLFiylfvjx//vknANHR0QXKU1Rbtmzh2LFjHDx4kEOHDmWutdasWTPAFo9fffUVLVu25O+//2by5Mls2rQpS+F97NgxtmzZkvnfv//+Oxs2bKBcuXLUr1+fffv2sW7dOhYtWpT5mqioKPr378/YsWOpVatWlnXICnKf7t69mwEDBjBx4kTatGnDyy+/zFVXXUWXLl246KKLPPPm5CDj/Tl8+DB//fUXGzZsoGTJkkUukP3Z1KlQsSLceqvbSeRk550HVarYcUr+XCh5o+vtZWA3/788QDfgL2BiQdrBcpv1Nnv27BzHMp3aXTNhwgRTs2ZNU6ZMGdOqVasszeFt2rTJNpvtmWeeMY0aNTJlypQxUVFR5vzzzzcJCQkFmpa7detWExkZmaVbJDEx0dStW9eMHDmyIF9uvnwx6+2vv/4yF110kSlbtqwpU6aM6dixo/nyyy+zHDNx4kRTr149U7p0aVOhQgXTpk0b895772V+ftmyZdmm2f/++++mS5cupkqVKqZEiRKmZs2apmfPnmbbtm0FytW3b1/TpEmTLFPSp02bZipWrGh2795d4K8vw6effmpatWploqOjTenSpU2DBg3MqFGj8l3yoCBuv/12U6dOHVOyZElz+umnm44dO2ZbsuBUp3btFOT9yukeNsbei506dTKRkZGmZs2aZsSIEdm6rXPijXs4p/9PgVy7nHJSlFlvderUyfG6GbZs2WKaNWtmIiMjTVRUlImLi8t2L2Z07Z/6yOiynDVrVo7LCRw7dszce++9pkqVKqZ8+fKmU6dO2Wa95SQ9Pd107NjRXH755ZlLcRhjzPDhw029evXMoUOHCvS1F2XWW05fZ17dwIFq/37bvVPESYHiZb16GXPBBa5dvkB1jWNOdD14iuM45YHHThRIVYA/gDeBR40xOfdvnCQpKYno6GgSExML1fWWn/3793PGGWewa9euPBeSk6IZOnQoqampJCQkuB0laOkedt8111xDmzZtGDlypNtRpICeeAIefxx+/dW2Xoh/efVV29K3bx+cfrrPL+8U5CCPd70ZYw4Bw048/MbBgweZPHmyfsF4SePGjWnVqpXbMYKa7mH3tWnThptvvtntGFJAR4/Cs8/aX8QqkvxTxtDNTz+FG290N0tuPN6ilI98L+atFiUREQktL74I/frBtm1w9tlup5HcnHMOXHqp3azYxwrUohQwm+KKiIgUlDEwZQp07aoiyd916AC5TMj1CyqUREQk6Hz6KWzeDPfc43YSyU+HDrbV78RGEH5HhZKIiASdadOgSRM/n3YuALRrZz+etCKNX1GhJCIiQeXHH+Hdd21rklOgUSjipmrV4Nxz4bPP3E6SMxVKIiISVJ591i4w2bOn20mkoNq3999xSiqUREQkaCQlwezZ0L8/eHEhePGwDh1g+3Y4sfmGX1GhJCIiQeOllyA5GQYOdDuJFEbGOCV/bFVSoSQiIkEhLc12u/XoAdWru51GCqNKFWjUyD/HKXljU1wRERGfe+892LkT3nzT7SRSFB06wIl9xP2K37QoxcfHExMTQ2xsrNtRREQkAE2dChddBBde6HYSKYp27eyMxd9/dztJVtrCREREAt5330HTprY16aab3E4jRfHnn3DGGfDWW3DDDT65pLYwERGR0PDMM1CjBlx3ndtJpKiqVYP69WHVKreTZKVCSUREAtpff8GcOTBoEJQo4XYaKY42bVQoiYiIeNTMmXYF7rvucjuJFFeb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H40xX58Yd7sRuCeXwz1y/6pQCiLGmGPAN9jZFie7DPiiEKc6H9scLMW3huzfj87A18aY4y7kCQW6f3PgWM9hu3cuNcb8XICX6f4thCK+xznRPVxwDlAql8955P5V11vwmQy85jjO19ib5C6gNrYvF8dxJgA1jDF9Tvx7GPALsBkoCfTGNmdq+m8OHMcpB9Q/6akzHcdpBhw0xvx26vuLfd8HO44zGXgBO7jwDuBmH8YOGIV9f3X/Fko80BOIAw45jpPxl3aiMSYZsv98QPdvYRX6PdY9XHCO4/wHWArswi5MfRPQHrjixOe9c/8aY/QIsgcwEPs/Xgq2hantSZ97GVh+0r9HAj8CydiZGSuBK93+Gvz1ceJ/SpPD4+Wc3t8Tz7UD1p/4fvwM9Hf76/DXR2HfX92/hXpvc3pfDXDbScfo/vXxe6x7uFDv74sn/W7bBywDLsvtvT3xXLHvX62jJCIiIpILjVESERERyYUKJREREZFcqFASERERyYUKJREREZFcqFASERERyYUKJREREZFcqFASERERyYUKJREREZFcqFASERERyYUKJREREZFcqFASERERycX/AcX86mbC2eHsAAAAAElFTkSuQmCC\n", 1263 "text/plain": [ 1264 "Graphics object consisting of 3 graphics primitives" 1265 ] 1266 }, 1267 "metadata": {}, 1268 "output_type": "display_data" 1269 } 1270 ], 1271 "source": [ 1272 "points = [ (0,1), (1,2), (1.5,0), (2,4), (3,5) ]\n", 1273 "polring.<x> = QQ[] # you need to specify a polynomial ring\n", 1274 "lp = polring.lagrange_polynomial(points)\n", 1275 "show(scatter_plot(points, facecolor=\"red\")\n", 1276 " + plot(lp, 0, 3) # slightly different notation for polynomials\n", 1277 " + text(lp, (1,8), color=\"black\")\n", 1278 " )" 1279 ] 1280 }, 1281 { 1282 "cell_type": "markdown", 1283 "metadata": {}, 1284 "source": [ 1285 "One can compute the Lagrange Polynomial over any base ring, and it has the advantage that it is a very \"nice\" function (continuous and differentiable as much as you like, with easily computable derivatives and primitives).\n", 1286 "\n", 1287 "However, it does not always give you good approximation of your data:" 1288 ] 1289 }, 1290 { 1291 "cell_type": "code", 1292 "execution_count": 2, 1293 "metadata": {}, 1294 "outputs": [ 1295 { 1296 "data": { 1297 "image/png": "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\n", 1298 "text/plain": [ 1299 "Graphics object consisting of 2 graphics primitives" 1300 ] 1301 }, 1302 "metadata": {}, 1303 "output_type": "display_data" 1304 } 1305 ], 1306 "source": [ 1307 "R = [x/10 for x in range(-10,10)]\n", 1308 "L = [1/(1+25*x^2) for x in R]\n", 1309 "points = [(R[i], L[i]) for i in range(len(L))]\n", 1310 "polring.<x> = RR[]\n", 1311 "lp = polring.lagrange_polynomial(points)\n", 1312 "\n", 1313 "show(plot(lp, -0.82, 0.72) + scatter_plot(points))" 1314 ] 1315 }, 1316 { 1317 "cell_type": "markdown", 1318 "metadata": {}, 1319 "source": [ 1320 "This particular example is called [Runge's phenomenon](https://en.wikipedia.org/wiki/Runge%27s_phenomenon). For a better approximation you can use a [spline](https://en.wikipedia.org/wiki/Spline_(mathematics)), which is a *piecewise* polynomial function:" 1321 ] 1322 }, 1323 { 1324 "cell_type": "code", 1325 "execution_count": 90, 1326 "metadata": {}, 1327 "outputs": [ 1328 { 1329 "data": { 1330 "image/png": "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\n", 1331 "text/plain": [ 1332 "Graphics object consisting of 2 graphics primitives" 1333 ] 1334 }, 1335 "metadata": {}, 1336 "output_type": "display_data" 1337 } 1338 ], 1339 "source": [ 1340 "show(plot(spline(points), -1, 1) + scatter_plot(points))" 1341 ] 1342 }, 1343 { 1344 "cell_type": "markdown", 1345 "metadata": {}, 1346 "source": [ 1347 "A detailed explanation of splines is a good topic for a course of numerical analysis. For this course it is enough that you know that they exist and they can be plotted." 1348 ] 1349 } 1350 ], 1351 "metadata": { 1352 "kernelspec": { 1353 "display_name": "SageMath 9.2", 1354 "language": "sage", 1355 "name": "sagemath" 1356 }, 1357 "language_info": { 1358 "codemirror_mode": { 1359 "name": "ipython", 1360 "version": 3 1361 }, 1362 "file_extension": ".py", 1363 "mimetype": "text/x-python", 1364 "name": "python", 1365 "nbconvert_exporter": "python", 1366 "pygments_lexer": "ipython3", 1367 "version": "3.8.5" 1368 } 1369 }, 1370 "nbformat": 4, 1371 "nbformat_minor": 4 1372 }