Understanding the Value of Divergent Series in Asymptotic Expansions
Written on
Chapter 1: Introduction to Asymptotic Series
Asymptotic series might sound complex, but they're actually quite fascinating! Contrary to the misconceptions surrounding their name, they provide valuable insights, particularly when leveraging Python’s SymPy library to simplify calculations. In this article, we will explore what asymptotic series are, their utility despite their divergence, and how to effectively utilize SymPy for this purpose.
To grasp the concept of asymptotic series, let’s look at a practical example. Imagine we wish to compute the integral:
from sympy.abc import *
from sympy import *
Ii = Integral(exp(-t**2), (t, x, oo))
It’s impossible to resolve this integral precisely, but we can achieve an arbitrary level of precision—even in symbolic form! The key is to reframe the integral as follows:
Ii2 = integrate_by_parts(Ii, 1/t, t*exp(-t**2))
The next step involves repeating the integration process for the integral present in Ii2. To streamline this, we define a function to extract the integral from the overall expression:
def select_integral(expr):
return list(expr.atoms(Integral))[0]
So, we proceed with:
Ii3 = select_integral(Ii2)
Next, we introduce a factor of 1=?/? and perform integration by parts again:
Ii4 = integrate_by_parts(Ii3, 1/(2*t**3), t*exp(-t**2))
We substitute this back into our previous expression:
Ii5 = Ii2.replace(Ii3, Ii4)
It's essential to note that we employed the replace function rather than subs, as the latter is not suitable for Integral objects. Use subs only for substituting values, not expressions.
Now, let's group the terms accordingly, as the exponential function is a shared factor:
Ii6 = collect(Ii5, exp(-x**2))
You might already be catching on to the pattern. Essentially, we are breaking down the original integral, and with each step, the remaining integral becomes progressively smaller for fixed ?. Let's repeat this process:
Ii7 = select_integral(Ii6)
Ii8 = integrate_by_parts(Ii7, 3/(4*t**5), t*exp(-t**2))
Ii9 = Ii6.replace(Ii7, Ii8).collect(exp(-x**2))
This process can be repeated indefinitely. To facilitate this, let’s create a helper function:
def iterate(integ):
Ii = select_integral(integ)
u = Ii.args[0] * exp(t**2) / t
vp = Ii.args[0] / u
Ii2 = integrate_by_parts(Ii, u, vp)
return integ.replace(Ii, Ii2).collect(exp(-x**2))
We can continue this iteration:
iterate(iterate(iterate(Ii9)))
Upon close examination, you’ll notice that we achieve:
# Note: The specific output can vary based on the steps taken.
While the remaining integral continues to shrink, the series within the braces does not converge! For fixed ?, it diverges due to the double factorial present in the numerators. However, we can assert that the right-hand side represents the asymptotic expansion of the integral concerning ?.
We define this relationship as:
# The specific forms would depend on the context and the function being analyzed.
This indicates that for every ?, as ???, we have established our asymptotic expansion.
Chapter 2: Exploring the Divergence of Series
This video, titled "Why the Divergent Series Went Down the Toilet," delves into the implications and misunderstandings surrounding divergent series, making it a great companion to our discussion on asymptotic expansions.
In "Is Divergent 'Good Actually'?", the video explores whether divergent series hold any value, further enriching our understanding of their role in mathematics.