27Интегрирование функций с разрывами и несобственные интегралы

До сих пор мы интересовались в первую очередь интегралами непрерывных функций. Именно для такого случая мы доказали формулу Ньютона — Лейбница: непрерывность подынтегральной функции является важным её условием. Что бывает, когда подынтегральная функция терпит разрывы? Мы не сможем дать полный ответ на этот вопрос, но обсудим некоторые важные частные случаи.

27.1Интегрирование функций с конечным числом скачков

27.1.1Скачки интегралу не помеха

Пусть функция имеет на отрезке конечное число ( штук) разрывов в точках , во всех остальных точках отрезка она непрерывна, и все разрывы являются скачками, то есть в них определены пределы справа и слева. Можно ли посчитать интеграл по от такой функции?

Если воспринимать задачу интегрирования геометрически, это не выглядит проблемой. Интеграл — это площадь, а площадь обладает свойством аддитивности — если разрезать фигуру, площадь от которой мы находим, на несколько непересекающихся кусочков, площадь всей фигуры должна равняться сумме площадей этих кусочков. Соответственно, можно разбить интеграл в сумму интегралов по промежуткам, на которых функция непрерывна (а значит интегрируема), и всё сложить. Именно так мы и сделаем! Но сперва докажем полезную лемму.

Лемма 1. Пусть функции и отличаются друг от друга лишь в конечном числе точек . Тогда их интегралы совпадают (и одновременно существуют или не существуют).

Доказательство. Изменения конечного числа значений не влияет на ограниченность, следовательно, функции и либо одновременно неограниченны, либо одновременно ограничены. В первом случае они обе неинтегрируемы и доказывать нечего. Рассмотрим второй случай, пусть обе функции ограничены некоторым числом (по модулю).

Возьмём произвольное размеченное разбиение , у которого границами отрезков разбиения являются точки и отмечены точки . Поскольку функции и различаются лишь в конечном числе точек, эти точки могут попасть лишь в конечное число отрезков разбиения. (В худшем случае точка может оказаться общим концом двух отрезков разбиения, значит, число затронутых отрезков не более чем в два раза больше числа точек различия.) Пусть затронуты отрезки с номерами , . Модуль разности между интегральными суммами для функций и равен

Модуль разности между значениями функций и не превосходит , поскольку сами значения ограничены по модулю числом . (Мы используем неравенство .) Длина отрезка разбиения не превосходит диаметра разбиения . Всего слагаемых штук, где . Значит разница между двумя интегральными суммами не превосходит и стремится к нулю при стремящемся к нулю. Значит, пределы интегральных сумм совпадают.

Теорема 1. Пусть функция имеет конечное число точек разрывов на отрезке и все разрывы являются скачками, то есть в каждой точке разрыва есть конечные односторонние пределы функции справа и слева. В остальных точках функция непрерывна. Тогда она интегрируема на отрезке .

Доказательство. Воспользовавшись свойством аддитивности (24.5), разобьем интеграл в сумму интегралов:
Рассмотрим любой из получившихся отрезков интегрирования, обозначим его концы через и . Функция непрерывна на , за исключением, быть может, концов отрезка. Но в концах существуют односторонние пределы (поскольку все точки разрывов — скачки), и следовательно для вычисления интеграла по функцию можно переопределить в и , таким образом, чтобы сделать её непрерывной на всём отрезке (как обычно, в концах требуется односторонняя непрерывность). По лемме, значение интегралов от этого не поменяется, равно как и факт интегрируемости. Но функция, непрерывная на отрезке, интегрируема на этом отрезке, и значит все интегралы в правой части равенства (27.1) существует и функция интегрируема на всём отрезке .

Пример 1. Пусть
Найдём
Возможно три варианта: , или . В первом случае наш интеграл — это площадь прямоугольника высотой и шириной , взятая со знаком «минус» (потому что значение функции отрицательно), то есть (см. анимацию на рис. 27.1). При можно переопределить функцию таким образом, чтобы в точке она принимала значение и тем самым сделать её непрерывной на всём отрезке интегрирования. Если же , наш интеграл разбивается в сумму двух интегралов: по отрезку и по отрезку . Первый равен , второй является площадью прямоугольника с шириной и высотой , то есть .
import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py

def nansign(x):
    sign = np.sign(x)
    return np.where(sign != 0, sign, np.nan)
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
camera = Camera(fig)

x = np.linspace(-3, 3, 201)

for t in np.linspace(-2, 3, 11):
    ax1.plot(x, nansign(x), label=r'$y=\mathrm{sign}(x)$', 
             color='gray')
    ax1.plot([0], [0], 'o', color='gray')
    ax1.plot([0, 0], [1, -1], 'o', color='gray',
        markerfacecolor='white')
    t_span_neg = np.linspace(-2, min(t, 0), 200)
    ax1.fill_between(t_span_neg, -np.ones_like(t_span_neg), color='red', 
                     alpha=0.5)
    if (t > 0):
        t_span_pos = np.linspace(0, t, 200)
        ax1.fill_between(t_span_pos, np.ones_like(t_span_pos), color='green', 
                         alpha=0.5)
    ax1.annotate('$t$', (t, 0), xytext=(t, 0.1))

    ob.center_spines(grid=False, minor_ticks=False, ax=ax1)
    ob.settle_axes(xmin=-3, xmax=3, ymin=-1.3, ymax=1.3, 
                   xlabel="x", ylabel="y", ax=ax1) 
    ax1.set_xticks([-2, -1, 0, 1, 2])
    ax1.set_yticks([-1, 1])


    t_span = np.linspace(-2, t)
    ax2.plot(t_span, -2+np.abs(t_span), color='C0')
    ob.center_spines(grid=False, minor_ticks=False, ax=ax2)
    ob.settle_axes(xmin=-3, xmax=3, ymin=-3.2, ymax=3.2, 
                   xlabel="t", ylabel="y", ax=ax2) 
    camera.snap()
animation = camera.animate()
Рис. 27.1: Интеграл от как функция верхнего предела. Сверху: подынтегральная функция и площадь; снизу: значение интеграла.
Итак,
Это выражение можно записать короче: .

Заметим, что во всех точках , производная совпадает с подынтегральной функцией (проверьте!):

Это неудивительно: первая часть формулы Ньютона — Лейбница выполняется для всех точек, в которых подынтегральная функция непрерывна, а разрыв у нас только в нуле. В нуле же функция не является дифференцируемой, но является непрерывной. Оказывается, так будет всегда.

27.1.2Интеграл с переменным верхним пределом непрерывен

Утверждение 1. Пусть функция интегрируема на отрезке . Тогда функция
непрерывна на отрезке .

Доказательство. Действительно, для любых точек
Иными словами, разность значений в точках и равна интегралу от по отрезку . Поскольку функция под интегралом интегрируема, она ограничена, и значит интеграл по маленькому отрезку от неё будет маленьким. Следовательно, значения функции в близких точках близки.

Аккуратное доказательство выглядит так. Поскольку функция ограничена, найдётся такое , что для всех

Интегрируя эти неравенства по отрезку (будем считать, что , противоположный случай разбирается аналогично), имеем:
Считая интегралы в левой и правой части, получаем:
В пределе при , левая и правая части стремятся к нулю, значит и интеграл посередине стремится к нулю. Но этот интеграл равен разности , следовательно эта разность стремится к нулю, и значит
то есть непрерывна в точке .

Теперь мы можем заключить, что интеграл от кусочно-непрерывной функции с конечным числом скачков, если рассматривать его как функцию от верхнего предела, является непрерывной функцией, дифференцируемой во всех точках, кроме точек разрывов ; в точках разрывов у интеграла точки излома и производная не существует (если только эти разрывы не являются устранимыми, устранимые разрывы интеграл «не замечает» в силу леммы).

27.2Несобственные интегралы

До сих пор мы рассматривали интегралы, которые отвечали площадям ограниченнух фигур — то есть таких фигур, которые можно поместить в достаточно большой прямоугольник. Действительно, в горизонтальном направлении мы были ограничены отрезком интегрирования, а в вертикальном — ограниченностью подынтегральной функции — мы всегда говорили, что раз функция не является ограниченной, она и не интегрируемая, и даже однажды это доказали.

Однако, можно представить себе фигуру, которая не будет помещаться ни в какой прямоугольник, но тем не менее будет иметь конечную площадь. Как бы нам её найти?

27.2.1Несобственные интегралы с бесконечными пределами интегрирования

Начнём с примера.

Пример 2. Пусть мы хотим найти такой интеграл:
Область интегрирования теперь — не отрезок, а бесконечный луч, см. рис. 27.2.
import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py

fig, ax1 = plt.subplots()

x = np.linspace(-1.2, 3, 201)
ax1.plot(x, 1 / x ** 2)

x_clip = np.linspace(1, 3, 201)
ax1.fill_between(x_clip, 1 / x_clip ** 2, alpha=0.5)

ob.center_spines(grid=False, minor_ticks=False, ax=ax1)
ob.settle_axes(xmin=-1.2, xmax=3, ymin=-0.7, ymax=3, 
               xlabel="x", ylabel="y", ax=ax1) 

ax1.set_xticks([1, 2])
ax1.set_yticks([])
Рис. 27.2: Интеграл по лучу
Использовать обычное определение нельзя — луч нельзя разбить в конечное число отрезков. Теоретически, можно было бы расширить понятие разбиения, разрешив разбиения на бесконечное число отрезков, но тогда в интегральных суммах было бы бесконечное число слагаемых, и надо было думать, как эти суммы определять…

В общем, мы сделаем иначе. Положим по определению, что интеграл (27.2) равен такому пределу:

То есть мы считаем интеграл до какой-то конечной границы , для разных получаем разные значения интеграла, и дальше устремляем к бесконечности, см. анимацию на рис. 27.3.

Это выглядит логичным: если мы будем всё сильнее увеличивать верхний предел интегрирования , мы будем захватывать всё большую и большую часть нашей неограниченной фигуры, так что в пределе ничего не останется не захваченным, и значит площадь захваченного куска должна стремиться к площади всей фигуры.

import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py

fig, ax1 = plt.subplots()
camera = Camera(fig)
x = np.linspace(-1.2, 3, 201)

for t in np.linspace(1, 3, 11):
    ax1.plot(x, 1 / x ** 2, color='C0')

    x_clip = np.linspace(1, 3, 201)
    ax1.fill_between(x_clip, 1 / x_clip ** 2, alpha=0.5, color='C0')

    x_clip_t = np.linspace(1, t, 201)
    ax1.fill_between(x_clip_t, 1 / x_clip_t ** 2, alpha=0.5,
        color='C1')

    ob.center_spines(grid=False, minor_ticks=False, ax=ax1)
    ob.settle_axes(xmin=-1.2, xmax=3, ymin=-0.7, ymax=3, 
                   xlabel="x", ylabel=None, ax=ax1) 
    ax1.annotate('$y$', (0.03, 3 - 0.15))

    ax1.annotate('$t$', (t, 0), xytext=(t + 0.03, -0.25))
    ax1.set_xticks([1, 2])
    ax1.set_yticks([])
    camera.snap()
animation = camera.animate()