🔴 Сложный ⏱️ 55 минут

Непрерывность функции: когда график можно нарисовать не отрывая карандаша

📋 Содержание урока

Непрерывность функции: когда график можно нарисовать не отрывая карандаша 🖊️

В 1958 году Фрэнк Розенблатт собрал перцептрон — машину, которая училась различать картинки. Внутри был линейный сумматор и решающий элемент: если сумма больше порога — выдай $1$, иначе $0$. Всё логично, всё работает, машина даже чему-то училась. Но обучалась она по специальному правилу «ошибся — подвинь веса», а не тем способом, которым учатся сегодня все нейросети. Прошло почти тридцать лет, прежде чем в 1986 году ступеньку заменили на сигмоиду — и вот тогда заработал метод обратного распространения ошибки, а вместе с ним и вся современная нейросетевая математика.

Что изменила эта замена? Ровно одно свойство функции. Ступенька $H(x)$ разрывна в нуле: слева от нуля она равна $0$, справа — $1$, и никакого плавного перехода между ними нет. Сигмоида $\sigma(x) = \frac{1}{1+e^{-x}}$ делает ту же работу — переводит любое число в интервал от нуля до единицы, — но делает это непрерывно. И оказалось, что вся разница между «машина, которая почти не учится» и «машина, которая выучивает язык» упирается в это самое свойство.

Непрерывность — понятие, которое кажется до смешного простым: «график можно нарисовать не отрывая карандаша от бумаги». Но за этой картинкой стоит одна из самых важных конструкций математического анализа. Из непрерывности следует, что уравнение имеет корень, — и на этом стоит бинарный поиск. Из непрерывности следует, что у функции на отрезке есть максимум, — и на этом стоит вся теория оптимизации. Отсутствие непрерывности объясняет, почему метрику accuracy нельзя оптимизировать напрямую, а logloss — можно. И понимание того, где именно функция теряет непрерывность, объясняет половину странного поведения численных алгоритмов.

В прошлом уроке мы разобрались с пределом функции: научились отвечать на вопрос «к чему стремится $f(x)$, когда $x$ подбирается к точке $a$». Сегодня мы зададим следующий вопрос, и он окажется решающим: а совпадает ли то, к чему функция стремится, с тем, что в этой точке реально написано? Если совпадает — функция непрерывна. Если нет — у нас разрыв, и вся задача в том, чтобы понять, какой именно.

🎯 Ты узнаешь:

  • Строгое определение непрерывности в точке через предел и три условия, которые обязаны выполниться одновременно
  • Что такое односторонняя непрерывность и что означает «непрерывна на промежутке»
  • Полную классификацию точек разрыва: устранимый, первого рода со скачком, второго рода — и как за минуту определить тип
  • Почему все элементарные функции непрерывны на своей области определения и как из этого мгновенно получать ответы
  • Теорему Больцано-Коши о промежуточном значении и вырастающий из неё метод половинного деления — рабочий алгоритм поиска корня
  • Теорему Вейерштрасса о наибольшем и наименьшем значении и почему в ней принципиально важно слово «отрезок»
  • Почему ReLU непрерывна, но с изломом; почему перцептрон не обучался градиентом; почему accuracy не оптимизируется, а logloss оптимизируется

История: откуда это взялось?

Весь XVIII век математики жили с интуитивным понятием непрерывности и особо не переживали. Леонард Эйлер в 1748 году определял непрерывную функцию как ту, что «задана одним аналитическим выражением на всём протяжении», — то есть непрерывность была свойством формулы, а не поведения. По Эйлеру функция $y = |x|$ была разрывной (она же задаётся двумя формулами!), хотя её график рисуется одной линией без отрыва карандаша. Спор о том, что считать функцией и что считать непрерывностью, тянулся десятилетиями и особенно обострился в задаче о колеблющейся струне, где физика упрямо требовала кусочно-заданных решений.

Разрубил узел чешский священник и математик Бернард Больцано. В 1817 году он выпустил работу с длинным названием, суть которого сводилась к одному: доказать чисто аналитически, без ссылок на геометрию, что между двумя значениями разного знака непрерывная функция обязана иметь корень. Больцано первым сформулировал непрерывность через приращения: функция непрерывна, если малое изменение аргумента вызывает сколь угодно малое изменение значения. Работа вышла в Праге, почти никем не была прочитана, и на полвека выпала из оборота. Через четыре года, в 1821-м, Огюстен Луи Коши в «Курсе анализа» дал по существу то же определение — и вот его-то версия и разошлась по всей Европе, потому что Коши читал лекции в Политехнической школе и его учебник стал стандартом. Окончательную шлифовку на языке $\varepsilon$-$\delta$ сделал Карл Вейерштрасс в 1860-х: именно в его формулировке непрерывность живёт в учебниках до сих пор.

А потом случилось то, ради чего вся эта строгость и затевалась. В 1872 году Вейерштрасс предъявил функцию, непрерывную в каждой точке прямой и при этом не имеющую касательной ни в одной точке — бесконечно изломанную. Интуиция «непрерывное значит гладкое» рухнула публично и окончательно. Чарльз Эрмит писал, что «с ужасом отворачивается от этой прискорбной язвы функций без производных». Сегодня эта «язва» — рабочий инструмент: фрактальные ландшафты в графике, модели броуновского движения в финансах, и та самая ReLU, у которой в нуле честный излом, — прямые наследники вейерштрассовского открытия. Мостик в сегодня получается коротким: как только мы научились аккуратно отделять непрерывность от гладкости, стало можно строить функции, которые непрерывны там, где нужно алгоритму, и изломаны там, где это выгодно для вычислений.


Непрерывность в точке: три условия

Интуиция: предсказание и факт

Представь, что ты смотришь на график функции и приближаешься к точке $x_0$ слева и справа. Ты видишь, куда всё идёт, и мысленно достраиваешь: «значение должно быть примерно $L$». Это и есть предел — предсказание по окрестности точки. А потом ты смотришь, что реально написано в самой точке: $f(x_0)$. Это факт.

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

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

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

Определение: Функция $f$ называется непрерывной в точке $x_0$, если выполнены три условия одновременно:

  1. функция определена в точке $x_0$ и в некоторой её окрестности;
  2. существует конечный предел $\lim\limits_{x \to x_0} f(x)$;
  3. этот предел равен значению функции в точке: $\lim\limits_{x \to x_0} f(x) = f(x_0)$.

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

Есть эквивалентная запись, которая пригодится дальше. Обозначим приращение аргумента $\Delta x = x - x_0$, а приращение функции $\Delta y = f(x_0 + \Delta x) - f(x_0)$. Тогда непрерывность в точке означает

$$\lim_{\Delta x \to 0} \Delta y = 0,$$

то есть бесконечно малому изменению аргумента отвечает бесконечно малое изменение функции. Это формулировка Больцано, и именно она — прямой мостик к следующему уроку: там мы будем смотреть не просто «стремится ли $\Delta y$ к нулю», а «как быстро, в сравнении с $\Delta x$».

И третья форма записи, самая компактная и самая полезная на практике:

$$\lim_{x \to x_0} f(x) = f\left(\lim_{x \to x_0} x\right).$$

Читается так: у непрерывной функции знак предела и знак функции можно менять местами. Предел можно «занести внутрь». Это свойство мы будем эксплуатировать постоянно.

Односторонняя непрерывность

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

Определение: Функция $f$ непрерывна в точке $x_0$ слева, если $\lim\limits_{x \to x_0-0} f(x) = f(x_0)$, и непрерывна справа, если $\lim\limits_{x \to x_0+0} f(x) = f(x_0)$.

Функция непрерывна в точке тогда и только тогда, когда она непрерывна в ней и слева, и справа:

$$f(x_0-0) = f(x_0+0) = f(x_0).$$

Именно эта тройная запись — рабочий инструмент для всех кусочно-заданных функций. Схема всегда одна: посчитать левый предел, посчитать правый предел, посчитать значение, сравнить три числа.

Примеры с разбором

Пример 1 (простой). Проверим непрерывность $f(x) = 3x^2 - x + 5$ в точке $x_0 = 2$.

Шаг 1. Функция определена везде — это многочлен, никаких делений и корней. Первое условие выполнено, $f(2) = 3 \cdot 4 - 2 + 5 = 15$.

Шаг 2. Считаем предел. По теоремам о пределах из прошлого урока предел суммы равен сумме пределов, предел произведения — произведению:

$$\lim_{x \to 2}(3x^2 - x + 5) = 3 \cdot 2^2 - 2 + 5 = 15.$$

Шаг 3. Сравниваем: $15 = 15$. Все три условия выполнены.

Ответ: функция непрерывна в точке $x_0 = 2$. И тем же рассуждением — в любой другой точке.

Пример 2 (средний). Исследуем непрерывность в точке $x_0 = 1$ функции

$$f(x) = \begin{cases} x^2 + 1, & x < 1, \\ 4, & x = 1, \\ 3x - 1, & x > 1.\end{cases}$$

Шаг 1. Значение в точке задано явно: $f(1) = 4$. Первое условие выполнено.

Шаг 2. Левый предел. При $x < 1$ работает первая ветка:

$$f(1-0) = \lim_{x \to 1-0}(x^2+1) = 1 + 1 = 2.$$

Шаг 3. Правый предел. При $x > 1$ работает третья ветка:

$$f(1+0) = \lim_{x \to 1+0}(3x-1) = 3 - 1 = 2.$$

Шаг 4. Односторонние пределы совпали, значит двусторонний предел существует и равен $2$. Второе условие выполнено.

Шаг 5. Сравниваем с значением: $\lim\limits_{x \to 1} f(x) = 2$, а $f(1) = 4$. Не совпадает — третье условие нарушено.

Ответ: функция разрывна в точке $x_0=1$. Разрыв «рукотворный»: достаточно переопределить $f(1) = 2$, и непрерывность восстановится. Это устранимый разрыв, к классификации мы сейчас перейдём.

Пример 3 (сложный). При каких $a$ и $b$ функция непрерывна на всей числовой прямой?

$$f(x) = \begin{cases} \dfrac{\sin x}{x}, & x < 0, \\ a, & x = 0, \\ b x + \cos x, & x > 0.\end{cases}$$

Шаг 1. Вне точки $x_0 = 0$ всё в порядке: при $x<0$ это частное непрерывных функций с ненулевым знаменателем, при $x>0$ — сумма непрерывных. Единственное подозрительное место — ноль.

Шаг 2. Левый предел. Первый замечательный предел из прошлого урока:

$$f(0-0) = \lim_{x \to 0-0}\frac{\sin x}{x} = 1.$$

Шаг 3. Правый предел:

$$f(0+0) = \lim_{x \to 0+0}(bx + \cos x) = b \cdot 0 + \cos 0 = 1.$$

Он равен $1$ при любом $b$ — слагаемое $bx$ обнуляется независимо от коэффициента.

Шаг 4. Условие непрерывности: $f(0-0) = f(0+0) = f(0)$, то есть $1 = 1 = a$.

Ответ: $a = 1$, $b$ — любое число. Здесь важна ловушка: параметр в условии стоит, но на непрерывность не влияет. Не всякая буква в кусочной функции обязана определяться из склейки.

Почему это важно

Определение через три условия — это готовый алгоритм проверки, и он окупается сразу. В любой прикладной задаче, где функция задана кусочно (тариф с порогами, штраф с разными режимами, функция потерь с переключением, расписание learning rate с рестартами), вопрос «непрерывна ли склейка» решается за три строчки: левый предел, правый предел, значение.

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


Точки разрыва и их классификация

Интуиция: три способа сломаться

Если функция не непрерывна в точке $x_0$, а рядом с этой точкой определена, то $x_0$ называют точкой разрыва. Разрывы бывают разного качества, и качество определяется одним вопросом: что происходит с односторонними пределами?

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

Это ровно три типа разрыва.

Определение: Пусть $x_0$ — точка разрыва функции $f$.

  • Если оба односторонних предела $f(x_0-0)$ и $f(x_0+0)$ существуют и конечны, то $x_0$ — точка разрыва первого рода. Внутри этого случая:
    • если $f(x_0-0) = f(x_0+0)$ (то есть двусторонний предел есть, но не равен $f(x_0)$ или функция в точке не определена), разрыв называется устранимым;
    • если $f(x_0-0) \neq f(x_0+0)$, разрыв называется скачком, а число $\delta = f(x_0+0) - f(x_0-0)$ — скачком функции в точке.
  • Если хотя бы один из односторонних пределов не существует или бесконечен, то $x_0$ — точка разрыва второго рода.

Терминологическая деталь, из-за которой часто спорят: в части учебников устранимый разрыв выделяют в отдельный, третий тип, а «первым родом» называют только скачок. Содержательно разницы нет — важно, что ты умеешь посчитать оба односторонних предела и сказать, конечны они и равны ли. Формулируй ответ развёрнуто: «оба односторонних предела конечны и равны $2$, значение в точке $4$ — устранимый разрыв», и никакая терминологическая школа тебя не поймает.

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

Примеры с разбором

Пример 1 (простой): устранимый разрыв. Исследуем $f(x) = \dfrac{x^2-9}{x-3}$ в точке $x_0 = 3$.

Шаг 1. В точке $x_0=3$ знаменатель обращается в ноль, числитель тоже: $f(3) = \frac{0}{0}$ — не определено. Первое условие нарушено, значит разрыв точно есть.

Шаг 2. Ищем предел. Раскладываем числитель: $x^2 - 9 = (x-3)(x+3)$. При $x \neq 3$ множитель $x-3$ сокращается:

$$\lim_{x \to 3}\frac{(x-3)(x+3)}{x-3} = \lim_{x \to 3}(x+3) = 6.$$

Шаг 3. Односторонние пределы оба равны $6$ (мы даже не разделяли их — сокращение работает с обеих сторон). Конечны и равны.

Вывод: $x_0=3$ — точка устранимого разрыва. Доопределим $f(3) = 6$ — и получим функцию $g(x) = x+3$, непрерывную всюду.

Ответ: устранимый разрыв, устраняется значением $f(3)=6$.

Пример 2 (средний): скачок. Исследуем $f(x) = \dfrac{|x-2|}{x-2}$ в точке $x_0 = 2$.

Шаг 1. В точке $x_0=2$ знаменатель ноль — функция не определена.

Шаг 2. Раскрываем модуль. При $x > 2$ имеем $|x-2| = x-2$, значит $f(x) = 1$. При $x < 2$ имеем $|x-2| = -(x-2)$, значит $f(x) = -1$.

Шаг 3. Односторонние пределы:

$$f(2-0) = \lim_{x \to 2-0}(-1) = -1, \qquad f(2+0) = \lim_{x \to 2+0} 1 = 1.$$

Шаг 4. Оба конечны, но различны. Это скачок. Величина скачка:

$$\delta = f(2+0) - f(2-0) = 1 - (-1) = 2.$$

Ответ: разрыв первого рода (скачок) величиной $2$. Никаким доопределением в точке его не убрать: какое бы число мы ни поставили в $f(2)$, оно не совпадёт одновременно с $-1$ и с $1$.

Пример 3 (сложный): разрыв второго рода двух видов. Исследуем все точки разрыва функции

$$f(x) = \frac{x^2-4}{x^2 - x - 2}.$$

Шаг 1. Ищем нули знаменателя: $x^2 - x - 2 = 0$. По теореме Виета корни $x=2$ и $x=-1$, значит $x^2-x-2 = (x-2)(x+1)$. Подозрительные точки: $x=2$ и $x=-1$.

Шаг 2. Раскладываем числитель: $x^2-4 = (x-2)(x+2)$. Итого при $x \neq 2$ и $x \neq -1$:

$$f(x) = \frac{(x-2)(x+2)}{(x-2)(x+1)} = \frac{x+2}{x+1}.$$

Шаг 3. Точка $x=2$. После сокращения предел считается подстановкой:

$$\lim_{x \to 2} f(x) = \frac{2+2}{2+1} = \frac{4}{3}.$$

Оба односторонних предела конечны и равны — устранимый разрыв, лечится значением $f(2) = \frac43$.

Шаг 4. Точка $x=-1$. Здесь сокращение не помогло, знаменатель $x+1$ обнуляется, а числитель $x+2 \to 1 \neq 0$. Считаем односторонние пределы. При $x \to -1-0$ (например, $x = -1{,}01$) знаменатель $x+1$ отрицателен и мал, числитель положителен:

$$f(-1-0) = -\infty.$$

При $x \to -1+0$ (например, $x=-0{,}99$) знаменатель положителен и мал:

$$f(-1+0) = +\infty.$$

Вывод: оба односторонних предела бесконечны — это разрыв второго рода, и прямая $x=-1$ является вертикальной асимптотой.

Ответ: $x=2$ — устранимый разрыв; $x=-1$ — разрыв второго рода (бесконечный), вертикальная асимптота.

Пример 4 (сложный): разрыв второго рода без бесконечности. Исследуем $f(x) = \sin\dfrac{1}{x}$ в точке $x_0=0$ (доопределив $f(0)=0$).

Шаг 1. Функция определена везде, кроме нуля, и мы приписали ей $f(0)=0$.

Шаг 2. Есть ли предел при $x \to 0$? Возьмём две последовательности, сходящиеся к нулю. Первая: $x_n = \frac{1}{\pi n}$. Тогда $\frac{1}{x_n} = \pi n$ и $\sin(\pi n) = 0$ для всех $n$, то есть $f(x_n) = 0 \to 0$.

Шаг 3. Вторая: $t_n = \dfrac{1}{\frac{\pi}{2} + 2\pi n}$. Тогда $\sin\frac{1}{t_n} = \sin\left(\frac{\pi}{2} + 2\pi n\right) = 1$, то есть $f(t_n) = 1 \to 1$.

Шаг 4. Обе последовательности стремятся к нулю, а значения функции по ним стремятся к разным числам. Значит предела при $x \to 0$ не существует — ни двустороннего, ни одностороннего (то же рассуждение работает отдельно справа и слева).

Вывод: это разрыв второго рода, хотя функция ограничена: $|f(x)| \le 1$ всюду. Бесконечность для второго рода не обязательна, достаточно отсутствия предела.

Ответ: $x_0 = 0$ — точка разрыва второго рода; функция бесконечно осциллирует между $-1$ и $1$.

Почему это важно

Классификация — это не бюрократия, а диагноз, из которого следует лечение.

  • Устранимый разрыв — это, как правило, артефакт формы записи, а не свойство процесса. В коде он выглядит как деление на ноль в единственной точке: sin(x)/x при x=0 даст nan, хотя правильный ответ — единица. Лечится явной проверкой на границе или переходом к эквивалентной формуле. Так же лечится знаменитая численная беда: log(1+x) при крошечном x теряет точность, поэтому в библиотеках есть отдельная функция log1p.
  • Скачок — это обычно настоящее свойство модели, и с ним надо считаться. Пороги, тарифы, решающие правила классификатора — все они дают скачки, и именно скачки делают функцию неоптимизируемой градиентными методами.
  • Разрыв второго рода — сигнал тревоги. Бесконечный разрыв означает вертикальную асимптоту и переполнение в вычислениях: exp(1000) даст inf, и дальше всё сломается. Осциллирующий разрыв означает, что численный метод будет вести себя непредсказуемо: сколько ни уменьшай шаг, ответ не стабилизируется.

Непрерывность на промежутке

Интуиция: от точки к линии

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

Определение: Функция $f$ непрерывна на интервале $(a;b)$, если она непрерывна в каждой точке этого интервала.

Функция $f$ непрерывна на отрезке $[a;b]$, если она непрерывна в каждой внутренней точке интервала $(a;b)$, непрерывна справа в точке $a$ и непрерывна слева в точке $b$.

Оговорка про края не формальность: в точке $a$ функция просто не определена слева, требовать там двустороннего предела бессмысленно. Поэтому на концах отрезка достаточно односторонней непрерывности.

И тут же важнейшее различие, которое дальше будет решать всё: отрезок $[a;b]$ и интервал $(a;b)$ — это принципиально разные вещи. Отрезок замкнут (содержит свои концы) и ограничен. Все сильные теоремы этого урока — Вейерштрасса и Больцано-Коши — формулируются именно для отрезка, и стоит убрать хотя бы один конец, как они разваливаются. Мы это увидим на контрпримерах.

Пример из практики. Функция $f(x) = \frac1x$ непрерывна на $(0;+\infty)$ и на $(-\infty;0)$ — в каждой точке своей области определения. Но фраза «$f$ непрерывна на $\mathbb{R}$» неверна, и не потому, что в нуле разрыв, а потому, что в нуле функция вообще не определена: точку $x=0$ обычно называют точкой разрыва второго рода, имея в виду поведение около неё. Формулируй так: «$\frac1x$ непрерывна на всей своей области определения, а $x=0$ — точка разрыва второго рода».


Какие функции непрерывны: три теоремы, закрывающие 95% задач

Проверять три условия для каждой функции руками — путь долгий. На практике работают три утверждения, которые вместе покрывают почти всё, что встретится.

Теорема 1: арифметика непрерывных

Теорема (арифметические операции). Если функции $f$ и $g$ непрерывны в точке $x_0$, то в этой точке непрерывны и функции

$$f(x) \pm g(x), \qquad f(x)\cdot g(x), \qquad \frac{f(x)}{g(x)} \ \ \text{(при } g(x_0) \neq 0).$$

Доказательство целиком лежит в теоремах о пределах из прошлого урока. Например, для суммы: предел суммы равен сумме пределов, значит

$$\lim_{x \to x_0}\big(f(x)+g(x)\big) = \lim_{x \to x_0}f(x) + \lim_{x \to x_0}g(x) = f(x_0)+g(x_0),$$

а это и есть определение непрерывности суммы в точке $x_0$. Ограничение $g(x_0)\neq 0$ у частного — не каприз: при $g(x_0)=0$ функция $\frac fg$ в точке просто не определена.

Теорема 2: композиция непрерывных

Теорема (о композиции). Если функция $g$ непрерывна в точке $x_0$, а функция $f$ непрерывна в точке $u_0 = g(x_0)$, то сложная функция $f(g(x))$ непрерывна в точке $x_0$, и

$$\lim_{x \to x_0} f\big(g(x)\big) = f\left(\lim_{x \to x_0} g(x)\right).$$

Читай эту формулу как разрешение заносить предел под знак непрерывной функции. Хочешь посчитать $\lim\limits_{x\to 3}\sqrt{x^2+7}$? Корень непрерывен в точке $16$, значит предел заносится внутрь: $\sqrt{\lim(x^2+7)} = \sqrt{16} = 4$. Никаких $\varepsilon$-$\delta$.

Внимание к порядку: непрерывность внешней функции проверяется не в точке $x_0$, а в точке $g(x_0)$. Это самое частое место, где путаются. Например, $f(u)=\frac1u$ и $g(x)=x^2-4$: композиция $\frac{1}{x^2-4}$ разрывна там, где $g(x)=0$, то есть при $x=\pm 2$, — хотя обе исходные функции в этих точках прекрасно себя чувствуют по отдельности.

Теорема 3: элементарные функции

Теорема. Всякая элементарная функция непрерывна в каждой точке своей области определения.

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

Практический вывод такой мощности, что его стоит выделить: чтобы найти точки разрыва элементарной функции, достаточно найти точки, где она не определена. Больше нигде разрывов быть не может. Алгоритм сводится к трём проверкам:

  1. знаменатель равен нулю;
  2. под корнем чётной степени отрицательное число (граница области определения);
  3. под логарифмом ноль или отрицательное число, либо аргумент тангенса вида $\frac{\pi}{2}+\pi k$.

Всё. Дальше остаётся только классифицировать найденные точки по односторонним пределам.

Примеры с разбором

Пример 1 (простой). Найдём точки разрыва $f(x) = \dfrac{2x+1}{x^2-5x+6}$.

Шаг 1. Функция элементарная, значит разрывы только там, где она не определена, то есть где знаменатель ноль.

Шаг 2. $x^2-5x+6=0$, по теореме Виета $x_1=2$, $x_2=3$.

Шаг 3. Числитель в этих точках: $2\cdot2+1=5 \neq 0$ и $2\cdot3+1=7\neq0$. Сокращения не будет, значит пределы бесконечны.

Ответ: две точки разрыва второго рода: $x=2$ и $x=3$; обе — вертикальные асимптоты.

Пример 2 (средний). Где непрерывна функция $f(x) = \ln(x^2-9) + \sqrt{5-x}$?

Шаг 1. Логарифм требует $x^2-9>0$, то есть $x<-3$ или $x>3$.

Шаг 2. Корень требует $5-x \ge 0$, то есть $x \le 5$.

Шаг 3. Пересекаем: $(-\infty;-3) \cup (3;5]$.

Шаг 4. На этом множестве функция элементарная и определена, значит непрерывна. В точке $x=5$ — непрерывность слева (справа функции нет).

Ответ: $f$ непрерывна на $(-\infty;-3) \cup (3;5]$, в точке $x=5$ — односторонне (слева).

Пример 3 (сложный). Проверим непрерывность сигмоиды $\sigma(x) = \dfrac{1}{1+e^{-x}}$ и softmax-подобной конструкции.

Шаг 1. Сигмоида — частное непрерывных: константа $1$ сверху, $1+e^{-x}$ снизу.

Шаг 2. Знаменатель: показательная функция $e^{-x}$ строго положительна при любом $x$, значит $1+e^{-x} > 1 > 0$ всегда. Условие $g(x_0)\neq0$ выполнено во всех точках.

Шаг 3. По теореме об арифметике сигмоида непрерывна на всей числовой прямой $\mathbb{R}$ — без единой точки разрыва.

Шаг 4. Теперь softmax для двух классов: $p_1(z) = \dfrac{e^{z_1}}{e^{z_1}+e^{z_2}}$. Знаменатель — сумма двух строго положительных чисел, ноль недостижим. Значит softmax тоже непрерывен всюду.

Ответ: и сигмоида, и softmax непрерывны на всей области определения — и именно поэтому они годятся в качестве «мягких» замен ступеньки. Заметь, что численная проблема с softmax (exp(1000) даёт inf) — это не разрыв функции, а ограничение формата чисел; лечится вычитанием максимума из всех $z_i$, которое значение softmax не меняет.

Почему это важно

Эти три теоремы превращают вопрос «где функция непрерывна» из исследования в поиск области определения — задачу, которую ты решаешь автоматически с восьмого класса. И они же объясняют, почему в глубоком обучении вообще можно говорить о непрерывности целой нейросети: сеть — это композиция линейных слоёв (непрерывны) и функций активации (непрерывны), повторённая сто раз. Композиция непрерывных непрерывна, значит и вся сеть как функция от входа и от весов непрерывна. Стоит вставить в середину хоть один разрывный блок — и это свойство теряется на всей глубине.


ReLU, ступенька и почему перцептрон не учился градиентом

Теперь применим весь аппарат к тому, с чего начинался урок.

ReLU: непрерывна, но с изломом

Самая популярная функция активации в нейросетях выглядит так:

$$\mathrm{ReLU}(x) = \max(0,\,x) = \begin{cases} 0, & x \le 0,\\ x, & x>0.\end{cases}$$

Проверим непрерывность в единственной подозрительной точке $x_0=0$:

  • значение: $f(0)=0$;
  • левый предел: $\lim\limits_{x\to0-0} 0 = 0$;
  • правый предел: $\lim\limits_{x\to0+0} x = 0$.

Все три числа равны нулю — ReLU непрерывна в нуле, а значит и на всей прямой. При этом график имеет очевидный излом: слева он идёт горизонтально, справа — под углом $45°$. Никакой единой касательной в нуле подобрать нельзя.

Вот здесь и лежит ключевая мысль урока: непрерывность и гладкость — разные свойства. Непрерывность запрещает разрывы, но ничего не говорит про изломы. Функция $y=|x|$, ReLU, Huber loss, функция потерь L1, кусочно-линейная интерполяция — все они непрерывны и все изломаны. То, что отделяет «просто непрерывное» от «гладкого», называется дифференцируемостью, и это ровно тема следующего урока.

Практически излом ReLU почти безвреден: он в одной точке, и вероятность попасть в неё ровно при вычислениях с плавающей точкой исчезающе мала. Библиотеки просто договариваются считать «наклон» в нуле равным нулю (или единице — это соглашение, а не математика). А вот разрыв был бы вреден по-настоящему.

Ступенька: почему её пришлось выбросить

Решающий элемент перцептрона — функция Хевисайда:

$$H(x) = \begin{cases} 0, & x<0,\\ 1, & x \ge 0.\end{cases}$$

В нуле: $H(0-0)=0$, $H(0+0)=1$, $H(0)=1$. Односторонние пределы конечны, но различны — разрыв первого рода со скачком величиной $1$. Функция непрерывна справа и разрывна слева.

Теперь посмотри на всю картину. Вне нуля ступенька постоянна: она равна либо нулю, либо единице, и малое изменение весов её значение не меняет вообще. А в нуле она делает мгновенный прыжок. Получается функция, у которой нет ни одного места, где «чуть-чуть подвинуть параметры» давало бы «чуть-чуть изменить выход»: либо ничего не происходит, либо происходит всё сразу.

Метод обучения, который смотрит, куда двинуть веса, чтобы ошибка чуть уменьшилась, в такой ситуации не получает никакой информации. Сигнал «в какую сторону идти» тождественно нулевой почти везде и неопределённый в точке скачка. Именно поэтому Розенблатту пришлось придумывать отдельное правило обучения, работающее не с наклоном, а с фактом ошибки, — и именно поэтому многослойный перцептрон со ступеньками обучить было нечем. Замена $H(x)$ на непрерывную сигмоиду $\sigma(x)$ убрала разрыв: теперь малое изменение весов даёт малое, но ненулевое и информативное изменение выхода, и его можно протащить через все слои назад. Это и есть обратное распространение ошибки, 1986 год.

Проверим, что сигмоида действительно «сглаженная ступенька». При больших положительных $x$ величина $e^{-x}$ стремится к нулю, и $\sigma(x)\to1$. При больших отрицательных $e^{-x}$ огромно, и $\sigma(x)\to0$. В нуле $\sigma(0)=\frac{1}{1+1}=0{,}5$ — ровно посередине скачка. То есть сигмоида проходит через те же уровни, но переход занимает не нулевую ширину, а несколько единиц по $x$. За это и заплатили: точность порога обменяли на непрерывность.

Почему accuracy не оптимизируют, а logloss оптимизируют

Тот же сюжет, но на уровне метрик, и он объясняет вещь, которая новичков в ML честно ставит в тупик: почему модель обучают на одну функцию, а качество меряют другой.

Accuracy — доля правильных ответов. Пусть у модели есть скоринг $s(x)$ и порог $t$: объект относим к классу $1$, если $s(x)\ge t$. Тогда accuracy как функция порога $t$ — это кусочно-постоянная функция. Пока порог движется между двумя соседними значениями скоров, ни одно предсказание не меняется, и accuracy стоит на месте. Как только порог переходит через скор какого-то объекта, предсказание этого объекта переключается — и accuracy скачком меняется на $\frac1n$ (или $-\frac1n$).

Итог: функция $\mathrm{acc}(t)$ имеет ровно столько точек разрыва первого рода, сколько различных значений скоров в выборке, а между ними — идеально плоская. Оптимизировать её движением маленькими шагами невозможно в принципе: в любой точке локальная информация говорит «сдвиг ничего не меняет», а вся полезная информация сосредоточена в точках, где функция вообще разрывна. Ровно та же беда, что со ступенькой в перцептроне, — потому что accuracy и есть сумма ступенек.

Logloss (логистическая функция потерь) для одного объекта с меткой $y \in \{0,1\}$ и предсказанной вероятностью $p$:

$$L(p,y) = -\big(y\ln p + (1-y)\ln(1-p)\big).$$

Это композиция логарифма (непрерывен на $(0;+\infty)$) с сигмоидой (непрерывна и принимает значения строго в $(0;1)$). По теореме о композиции logloss непрерывен по параметрам модели всюду, где сигмоида не выродилась в ровно $0$ или ровно $1$. А значит малое изменение весов даёт малое и предсказуемое изменение потерь — есть за что зацепиться и куда двигаться.

Отсюда и стандартная схема работы: обучаем на непрерывном суррогате, отчитываемся по разрывной метрике. Logloss, hinge loss, MSE — это суррогаты, специально подобранные так, чтобы быть непрерывными сверху-оценками того, что нам реально нужно. А accuracy, F1, precision считаются потом, на готовых предсказаниях, и подбираются перебором порога, а не градиентом.

Практическое следствие, которое стоит запомнить: если модель обучилась, а accuracy не растёт, бессмысленно «оптимизировать accuracy напрямую» — этой ручки не существует. Крутить надо либо суррогат (веса классов, форму лосса), либо порог отдельным перебором после обучения.


Теорема Больцано-Коши и метод половинного деления

Интуиция: нельзя перейти реку, не намокнув

Представь, что ты идёшь по непрерывной траектории с левого берега на правый. Утверждение «в какой-то момент ты был в воде» кажется настолько очевидным, что доказывать его странно. Именно этой очевидности Больцано и не доверял: он хотел вывести её из определения непрерывности, а не из картинки. И правильно делал — потому что для разрывной траектории утверждение просто ложно (телепортировался и не намок).

Теорема Больцано-Коши (о промежуточном значении). Пусть функция $f$ непрерывна на отрезке $[a;b]$ и на концах принимает значения разных знаков: $f(a)\cdot f(b) < 0$. Тогда существует точка $c \in (a;b)$, в которой $f(c)=0$.

Обобщённая формулировка. Если $f$ непрерывна на $[a;b]$, то она принимает все промежуточные значения между $f(a)$ и $f(b)$: для любого $C$, лежащего между $f(a)$ и $f(b)$, найдётся $c\in[a;b]$ с $f(c)=C$.

Обобщённая версия сводится к первой одним движением: рассмотри вспомогательную функцию $g(x)=f(x)-C$. Она непрерывна как разность непрерывных, и на концах у неё разные знаки. Значит у $g$ есть корень, а это и есть точка, где $f$ равна $C$.

Обрати внимание на два ограничения, каждое из которых существенно:

  • Непрерывность обязательна. Функция $f(x)=\frac1x$ на «отрезке» $[-1;1]$ принимает значения $-1$ и $1$, но нуля не принимает никогда. Не противоречие: в нуле она разрывна (и не определена).
  • Теорема утверждает существование, но не единственность. Корней может быть один, три, бесконечно много. Чтобы гарантировать единственность, нужна дополнительно монотонность.

Метод половинного деления: теорема как алгоритм

Доказательство теоремы Больцано-Коши конструктивно, и из него прямо выпадает рабочий алгоритм — метод половинного деления (он же метод бисекции, он же дихотомия).

Пусть $f$ непрерывна на $[a;b]$ и $f(a)\cdot f(b)<0$. Алгоритм:

  1. Возьми середину $m = \dfrac{a+b}{2}$ и посчитай $f(m)$.
  2. Если $f(m)=0$ — корень найден, конец.
  3. Если $f(a)\cdot f(m)<0$ — корень лежит в левой половине, положи $b := m$.
  4. Иначе корень в правой половине, положи $a := m$.
  5. Повторяй, пока длина отрезка не станет меньше требуемой точности $\varepsilon$.

После $n$ шагов длина отрезка равна $\dfrac{b-a}{2^n}$ — это геометрическая прогрессия со знаменателем $\frac12$ из урока 128. Отсюда мгновенно получается число итераций для заданной точности:

$$\frac{b-a}{2^n} \le \varepsilon \quad\Longleftrightarrow\quad n \ge \log_2\frac{b-a}{\varepsilon}.$$

Для отрезка длины $1$ и точности $10^{-3}$ нужно $n \ge \log_2 1000 \approx 9{,}97$, то есть $10$ итераций. Для точности $10^{-6}$ — уже $20$. Метод медленный, зато абсолютно надёжный: он не может разойтись, ему не нужны производные, ему достаточно одного — чтобы функция была непрерывна и меняла знак.

Примеры с разбором

Пример 1 (простой). Докажем, что уравнение $x^3+x-1=0$ имеет корень на отрезке $[0;1]$.

Шаг 1. Функция $f(x)=x^3+x-1$ — многочлен, значит непрерывна на всей прямой, в частности на $[0;1]$.

Шаг 2. Значения на концах: $f(0)=0+0-1=-1$, $f(1)=1+1-1=1$.

Шаг 3. $f(0)\cdot f(1) = -1 < 0$, знаки разные. По теореме Больцано-Коши корень существует.

Ответ: корень есть, он лежит в интервале $(0;1)$.

Пример 2 (средний). Сделаем три шага бисекции для того же уравнения.

Шаг 1. Отрезок $[0;1]$, середина $m_1=0{,}5$. Считаем: $f(0{,}5)=0{,}125+0{,}5-1=-0{,}375 < 0$. Знак совпал с $f(0)$, значит корень справа: новый отрезок $[0{,}5;\,1]$.

Шаг 2. Середина $m_2=0{,}75$. Считаем: $0{,}75^3 = 0{,}421875$, тогда $f(0{,}75)=0{,}421875+0{,}75-1=0{,}171875>0$. Знак совпал с правым концом, корень слева: отрезок $[0{,}5;\,0{,}75]$.

Шаг 3. Середина $m_3=0{,}625$. Считаем: $0{,}625^3=0{,}244140625$, тогда $f(0{,}625)=0{,}244140625+0{,}625-1=-0{,}130859375<0$. Корень справа: отрезок $[0{,}625;\,0{,}75]$.

Ответ: после трёх шагов корень локализован в $[0{,}625;\,0{,}75]$, длина $0{,}125$; в качестве приближения берут середину $0{,}6875$ с гарантированной погрешностью не более $0{,}0625$. (Точное значение $\approx 0{,}6823$ — попали.)

Пример 3 (сложный, прикладной). Классификатор выдаёт скор $s\in(0;1)$. Доля объектов, попадающих в положительный класс при пороге $t$, равна $R(t)$. Нужно подобрать порог так, чтобы модель помечала ровно $20\%$ трафика.

Шаг 1. Если распределение скоров непрерывно (нет двух объектов с одинаковым скором и нет «сгустков»), то $R(t)$ — непрерывная убывающая функция.

Шаг 2. На концах: $R(0)=1$ (при нулевом пороге положительными помечаются все) и $R(1)=0$ (при пороге единица — никто).

Шаг 3. Число $0{,}2$ лежит между $0$ и $1$. По обобщённой теореме Больцано-Коши существует $t^*\in(0;1)$ с $R(t^*)=0{,}2$.

Шаг 4. Ищем его бисекцией: берём $t=0{,}5$, считаем долю; если она больше $0{,}2$ — порог надо повышать, идём в $[0{,}5;1]$; если меньше — в $[0;0{,}5]$. За $20$ итераций получаем точность $10^{-6}$ по порогу.

Ответ: такой порог существует и находится бисекцией. Важная оговорка: на конечной выборке функция $R(t)$ кусочно-постоянна и разрывна (она меняется скачками по $\frac1n$), поэтому точного значения $0{,}2$ может не существовать вовсе — придётся брать ближайшее достижимое. Это ровно та же история, что с accuracy: непрерывная теория, ступенчатая практика.

Почему это важно

Теорема Больцано-Коши — это математическое обоснование целого класса алгоритмов. Бинарный поиск по ответу в программировании, подбор порога классификатора, поиск значения параметра, при котором ограничение выполняется с равенством, калибровка вероятностей, вычисление квантилей, поиск точки безубыточности в экономике — всё это одна и та же схема: «функция непрерывна, на концах разные знаки — значит внутри есть решение, ищем делением пополам».

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


Теорема Вейерштрасса: почему у оптимизации вообще есть ответ

Интуиция: у ограждённого участка есть высшая точка

Ты идёшь по холмистой местности вдоль отрезка дороги от километрового столба $a$ до столба $b$. Есть ли на этом участке самая высокая точка? Кажется, да — конечный участок, высота меняется плавно, где-то она максимальна. Но интуиция снова обманывает: если дорога не включает конечный столб, максимума может не быть — высота растёт до самого края, а край в участок не входит.

Первая теорема Вейерштрасса. Функция, непрерывная на отрезке $[a;b]$, ограничена на нём: существует такое $M$, что $|f(x)|\le M$ для всех $x\in[a;b]$.

Вторая теорема Вейерштрасса (об экстремумах). Функция, непрерывная на отрезке $[a;b]$, достигает на нём своего наибольшего и наименьшего значений: существуют точки $x_{\max}, x_{\min} \in [a;b]$ такие, что

$$f(x_{\min}) \le f(x) \le f(x_{\max}) \qquad \text{для всех } x \in [a;b].$$

Ключевое слово — достигает. Ограниченность означает, что есть точная верхняя грань; достижимость означает, что эта грань не просто существует как число, а реально принимается функцией в конкретной точке отрезка. Разница между «супремум равен $1$» и «максимум равен $1$» — это разница между «сколько угодно близко» и «ровно здесь».

Оба условия теоремы обязательны, и вот три контрпримера, которые стоит помнить наизусть:

  • Убрали замкнутость. $f(x)=\frac1x$ на полуинтервале $(0;1]$. Функция непрерывна в каждой точке, промежуток ограничен — но $f$ не ограничена: при $x\to0+0$ она уходит в $+\infty$. Причина: точка $0$ не входит в промежуток, и «загнать» функцию некуда.
  • Убрали ограниченность. $f(x)=x$ на $[0;+\infty)$. Непрерывна, промежуток замкнут — но наибольшего значения нет.
  • Убрали непрерывность. $f(x)=x$ при $x\in[0;1)$ и $f(1)=0$. Отрезок замкнут и ограничен, функция ограничена сверху числом $1$ — но значения $1$ не принимает никогда: супремум есть, максимума нет. Виноват разрыв в точке $x=1$.

Примеры с разбором

Пример 1 (простой). Функция $f(x)=x^2-4x+7$ на отрезке $[0;3]$ — гарантирован ли максимум?

Шаг 1. Многочлен непрерывен всюду, отрезок замкнут и ограничен. Условия второй теоремы Вейерштрасса выполнены — наибольшее и наименьшее значения существуют.

Шаг 2. Найдём их без всякого анализа, выделив полный квадрат: $x^2-4x+7=(x-2)^2+3$.

Шаг 3. Величина $(x-2)^2$ на отрезке $[0;3]$ минимальна при $x=2$ (равна $0$) и максимальна на том конце, что дальше от двойки: $|0-2|=2$ против $|3-2|=1$, значит при $x=0$, где $(x-2)^2=4$.

Ответ: наименьшее значение $3$ в точке $x=2$, наибольшее $7$ в точке $x=0$. Оба достигаются — как теорема и обещала.

Пример 2 (средний). Достигает ли функция $f(x)=\dfrac{1}{x-2}$ наибольшего значения на отрезке $[0;3]$?

Шаг 1. Проверяем условия теоремы. Отрезок замкнут и ограничен — да. Функция непрерывна на нём — нет: в точке $x=2$ она не определена, там разрыв второго рода.

Шаг 2. Теорема неприменима, и вывода «максимума нет» из этого ещё не следует — надо смотреть саму функцию.

Шаг 3. При $x\to2+0$ знаменатель положителен и мал, $f(x)\to+\infty$. Функция не ограничена сверху.

Ответ: наибольшего значения нет. Причина строго в разрыве: убери его — и теорема Вейерштрасса дала бы гарантию.

Пример 3 (сложный, прикладной). Ты подбираешь коэффициент регуляризации $\lambda$ на сетке из отрезка $[0;10]$, а качество модели описывается непрерывной функцией $Q(\lambda)$. Существует ли оптимальное $\lambda$?

Шаг 1. Отрезок $[0;10]$ замкнут и ограничен. Если $Q$ непрерывна на нём — по теореме Вейерштрасса наибольшее значение достигается в некоторой точке $\lambda^*\in[0;10]$. Оптимум существует, и он внутри рассматриваемого диапазона (возможно, на его краю).

Шаг 2. А если бы диапазон был $\lambda\in(0;+\infty)$? Тогда обе гарантии пропадают: промежуток не замкнут слева и не ограничен справа. Качество могло бы монотонно улучшаться при $\lambda\to0+0$, не достигая наилучшего значения ни в одной допустимой точке.

Шаг 3. Практический вывод из этого прямой: сетку поиска гиперпараметров задают замкнутым и ограниченным диапазоном именно для того, чтобы оптимум гарантированно существовал и находился. Строка lambda in [1e-4, 1e2] — это не только про здравый смысл, это про условия теоремы Вейерштрасса.

Ответ: на отрезке оптимум существует всегда (при непрерывном $Q$); на открытом или неограниченном множестве — не обязан.

Почему это важно

Вейерштрасс отвечает на вопрос, который в оптимизации обычно проскакивают молча: а есть ли вообще что искать? Прежде чем запускать алгоритм минимизации, полезно понимать, гарантировано ли существование минимума. Если функция потерь непрерывна, а область поиска — замкнутое ограниченное множество, ответ «да, минимум существует и достигается». Если область открыта или бесконечна, гарантии нет, и алгоритм может честно убегать в бесконечность — именно так выглядит расходящееся обучение, когда веса растут без предела.

Вторая практическая сторона — про ограниченность. Первая теорема Вейерштрасса говорит, что непрерывная функция на отрезке не может «взорваться». Значит, если у тебя в вычислениях появился inf или nan, дело либо в том, что функция где-то разрывна (деление на ноль, логарифм нуля), либо в том, что область не ограничена. Третьего не дано, и это сужает поиск бага до двух гипотез.


Практика: 30 заданий

Базовые (задания 1-10)

Задание 1: Проверь по определению непрерывность функции $f(x)=3x+1$ в точке $x_0=2$.


Задание 2: Исследуй непрерывность $f(x)=x^2-5x+6$ в точке $x_0=3$.


Задание 3: Найди тип разрыва функции $f(x)=\dfrac{x^2-16}{x-4}$ в точке $x_0=4$ и, если возможно, устрани его.


Задание 4: Найди точки разрыва функции $f(x)=\dfrac{1}{x-5}$ и определи их тип.


Задание 5: Исследуй непрерывность $f(x)=\dfrac{|x|}{x}$ в точке $x_0=0$ и найди величину скачка.


Задание 6: Исследуй на непрерывность в точке $x_0=2$ функцию

$$f(x)=\begin{cases} x+1, & x<2,\\ 5, & x=2,\\ 2x-1, & x>2.\end{cases}$$

Задание 7: При каком значении $a$ функция непрерывна на всей числовой прямой?

$$f(x)=\begin{cases} x^2+1, & x\le1,\\ ax+2, & x>1.\end{cases}$$

Задание 8: Исследуй непрерывность функции целой части $f(x)=[x]$ в точке $x_0=3$.


Задание 9: Найди область непрерывности функции $f(x)=\sqrt{x-1}$ и опиши поведение на границе.


Задание 10: Ступенчатая функция активации (функция Хевисайда) $H(x)=0$ при $x<0$ и $H(x)=1$ при $x\ge0$. Найди тип разрыва в нуле и объясни, почему такая активация плоха для обучения градиентными методами.


Средние (задания 11-20)

Задание 11: Найди все точки разрыва функции $f(x)=\dfrac{x^2-9}{x^2+x-6}$ и определи их тип.


Задание 12: При каких $a$ и $b$ функция непрерывна на всей числовой прямой?

$$f(x)=\begin{cases} x^2, & x\le1,\\ ax+b, & 1

Задание 13: Активация Leaky ReLU задана как $f(x)=\alpha x$ при $x<0$ и $f(x)=x$ при $x\ge0$. При каких $\alpha$ она непрерывна?


Задание 14: Исследуй на непрерывность в нуле функцию $f(x)=x\sin\dfrac1x$ при $x\neq0$, $f(0)=0$.


Задание 15: Исследуй на непрерывность в нуле функцию $f(x)=2^{1/x}$ при $x\neq0$, $f(0)=0$.


Задание 16: Функция задана как $f(x)=\dfrac{\sqrt{x+4}-2}{x}$ при $x\neq0$ и $f(0)=a$. При каком $a$ она непрерывна в нуле?


Задание 17: Функция потерь Хубера с параметром $\delta>0$ задана как

$$L(r)=\begin{cases} \dfrac{r^2}{2}, & |r|\le\delta,\\[6pt] \delta\left(|r|-\dfrac{\delta}{2}\right), & |r|>\delta.\end{cases}$$

Проверь её непрерывность в точках переключения $r=\delta$ и $r=-\delta$.


Задание 18: Докажи, что уравнение $2^x=3-x$ имеет корень на отрезке $[0;2]$, и найди его методом половинного деления.


Задание 19: Функция $f(x)=\dfrac1x$ непрерывна в каждой точке промежутка $(0;1]$, но не ограничена на нём. Не противоречит ли это теореме Вейерштрасса?


Задание 20: Сколько итераций метода половинного деления нужно на отрезке $[1;2]$, чтобы локализовать корень с точностью $10^{-4}$?


Продвинутые (задания 21-30)

Задание 21: Исследуй непрерывность композиции $h(x)=f(g(x))$, где $f(u)=\dfrac1u$, $g(x)=x^2-4$. Найди все точки разрыва и их тип.


Задание 22: Функция Дирихле определена так: $D(x)=1$, если $x$ рационально, и $D(x)=0$, если $x$ иррационально. Докажи, что она разрывна в каждой точке числовой прямой.


Задание 23: Рассмотри функцию $f(x)=x\cdot D(x)$, где $D$ — функция Дирихле из предыдущего задания. Найди все точки, в которых $f$ непрерывна.


Задание 24: Функция $f$ непрерывна на отрезке $[0;1]$ и принимает значения из того же отрезка: $f(x)\in[0;1]$ для всех $x\in[0;1]$. Докажи, что у неё есть неподвижная точка: существует $c$ с $f(c)=c$.


Задание 25: Классификатор выдал на четырёх объектах скоры $0{,}2$; $0{,}4$; $0{,}6$; $0{,}8$ с истинными метками $0$; $1$; $0$; $1$ соответственно. Объект относим к классу $1$, если скор $\ge t$. Построй accuracy как функцию порога $t$, найди её точки разрыва и все оптимальные пороги.


Задание 26: Докажи, что уравнение $x\cdot2^x=1$ имеет ровно один корень на отрезке $[0;1]$, и сделай два шага бисекции.


Задание 27: Найди область непрерывности функции $f(x)=\ln(x^2-4x+3)$ и опиши поведение около границ этой области.


Задание 28: При каких $a$ и $b$ непрерывна в нуле функция

$$f(x)=\begin{cases} \dfrac{\sin 3x}{x}, & x<0,\\ a, & x=0,\\ \dfrac{e^{bx}-1}{x}, & x>0\ \ (b\neq0)?\end{cases}$$

Задание 29: Сигмоида $\sigma(x)=\dfrac{1}{1+e^{-x}}$ используется как непрерывная замена ступеньки. Посчитай $\sigma(-2)$, $\sigma(0)$, $\sigma(2)$, докажи, что для любого $p\in(0;1)$ найдётся $x$ с $\sigma(x)=p$, и найди $x$, при котором $\sigma(x)=0{,}9$.


Задание 30: Функция $f$ непрерывна на отрезке $[a;b]$ и принимает только целые значения. Докажи, что $f$ постоянна на этом отрезке.


Частые ошибки

Ошибка 1: считать, что «не определена в точке» автоматически значит «неустранимый разрыв»

Неправильно: увидеть $\frac{x^2-9}{x-3}$, обнаружить $\frac00$ в точке $x=3$ и написать «разрыв, функция сломана, конец истории».

Правильно: посчитать односторонние пределы. Оба равны $6$ — разрыв устранимый, функция доопределяется значением $f(3)=6$ и становится непрерывной.

💡 Почему важно: это разница между «данные испорчены» и «формула записана неудачно». В коде устранимый разрыв — это 0/0 в одной точке, которое лечится одной строчкой проверки; неустранимый — это реальный скачок в поведении системы. Путать их значит либо чинить то, что не сломано, либо не чинить то, что сломано.


Ошибка 2: проверять только предел и забывать про значение в точке

Неправильно: в примере с $f(x)=x+1$ при $x<2$, $f(2)=5$, $f(x)=2x-1$ при $x>2$ посчитать левый и правый пределы, увидеть, что оба равны $3$, и объявить функцию непрерывной.

Правильно: третье условие — $\lim\limits_{x\to x_0}f(x)=f(x_0)$. Здесь предел равен $3$, а значение равно $5$. Функция разрывна.

💡 Почему важно: такой «рукотворный» разрыв — самый частый в реальном коде. Особый случай в функции (if x == 0: return 0), который не согласован с общей формулой, — классический источник багов, воспроизводящихся ровно на одном входе и потому неуловимых.


Ошибка 3: путать разрыв второго рода с бесконечным разрывом

Неправильно: считать, что разрыв второго рода — это обязательно уход в бесконечность и вертикальная асимптота.

Правильно: разрыв второго рода — это когда хотя бы один односторонний предел не существует или бесконечен. Функция $\sin\frac1x$ ограничена числом $1$, никуда не убегает — и всё равно имеет в нуле разрыв второго рода, потому что предела просто нет.

💡 Почему важно: эти два случая по-разному ведут себя численно. Бесконечный разрыв даёт inf и виден сразу. Осциллирующий разрыв даёт конечные, но нестабильные значения: уменьшаешь шаг — ответ меняется, и алгоритм «сходится» к чему угодно. Второй случай ловить гораздо труднее.


Ошибка 4: применять теоремы Вейерштрасса и Больцано-Коши на интервале вместо отрезка

Неправильно: «функция непрерывна на $(0;1)$, значит по Вейерштрассу у неё есть наибольшее значение».

Правильно: обе теоремы требуют отрезка $[a;b]$ — замкнутого и ограниченного. На $(0;1)$ функция $\frac1x$ непрерывна и не ограничена; функция $f(x)=x$ ограничена, но наибольшего значения не достигает.

💡 Почему важно: в оптимизации это буквально вопрос «существует ли решение». Замкнутость границ поиска — не формальность, а условие, при котором алгоритму есть что найти. Открытая или бесконечная область — законный повод для расходимости.


Ошибка 5: считать, что непрерывность влечёт гладкость

Неправильно: «график рисуется без отрыва карандаша, значит он плавный и в каждой точке есть касательная».

Правильно: $y=|x|$, ReLU, Huber loss на границе, кусочно-линейная интерполяция — все непрерывны и все имеют изломы. А функция Вейерштрасса непрерывна и изломана в каждой точке сразу.

💡 Почему важно: это ровно та разница, которая станет темой следующего урока. Непрерывность запрещает прыжки, дифференцируемость запрещает изломы, и второе строго сильнее первого. В ML это не абстракция: ReLU непрерывна, и её излом в нуле — причина, по которой библиотеки договариваются о «наклоне в нуле» отдельным соглашением.


Ошибка 6: писать «функция $\frac1x$ разрывна на $\mathbb{R}$» вместо аккуратной формулировки

Неправильно: «$\frac1x$ непрерывна везде, кроме нуля, значит она разрывна на $\mathbb{R}$».

Правильно: «$\frac1x$ непрерывна на всей своей области определения $(-\infty;0)\cup(0;+\infty)$; точка $x=0$ в область определения не входит и является точкой разрыва второго рода».

💡 Почему важно: непрерывность определяется только в точках, где функция существует. Формулировка «непрерывна на области определения» верна для любой элементарной функции — и именно она даёт мгновенный ответ в задачах на поиск области непрерывности. А заодно спасает от ошибки в задачах вида «непрерывна ли $\sqrt{x}$ на $[0;+\infty)$»: да, непрерывна, причём в нуле — справа.


Главное запомнить

📝 Ключевые понятия

Непрерывность в точке: три условия одновременно — функция определена в $x_0$, существует конечный $\lim\limits_{x\to x_0}f(x)$, и этот предел равен $f(x_0)$. Компактно: $\lim\limits_{x\to x_0}f(x)=f(x_0)$.

Критерий через односторонние пределы: $f$ непрерывна в $x_0$ тогда и только тогда, когда $f(x_0-0)=f(x_0+0)=f(x_0)$. Это рабочая схема для любой кусочно-заданной функции: три числа, сравнить.

Форма Больцано: непрерывность равносильна тому, что $\Delta y\to0$ при $\Delta x\to0$ — бесконечно малому изменению аргумента отвечает бесконечно малое изменение функции.

Классификация разрывов: оба односторонних предела конечны — первый род (равны — устранимый, различны — скачок величиной $\delta=f(x_0+0)-f(x_0-0)$); хотя бы один не существует или бесконечен — второй род.

Устранимый разрыв лечится одной точкой: доопредели $f(x_0)$ значением предела. Скачок и разрыв второго рода так не лечатся.

Арифметика и композиция: сумма, разность, произведение непрерывных непрерывны; частное — там, где знаменатель не ноль; композиция непрерывных непрерывна, причём $\lim f(g(x))=f(\lim g(x))$ — предел можно занести под непрерывную функцию.

Элементарные функции непрерывны на своей области определения. Практический вывод: чтобы найти разрывы, достаточно найти точки, где функция не определена — нули знаменателя, границы корней и логарифмов.

Теорема Больцано-Коши: непрерывная на $[a;b]$ функция с $f(a)\cdot f(b)<0$ имеет корень внутри; в обобщённой форме — принимает все промежуточные значения между $f(a)$ и $f(b)$.

Метод половинного деления: после $n$ шагов длина отрезка равна $\frac{b-a}{2^n}$, нужное число итераций $n\ge\log_2\frac{b-a}{\varepsilon}$. Медленно, но абсолютно надёжно.

Теоремы Вейерштрасса: функция, непрерывная на отрезке, ограничена на нём и достигает наибольшего и наименьшего значений. Уберёшь замкнутость или ограниченность — гарантии исчезают.

Непрерывность ≠ гладкость: ReLU, $|x|$, Huber loss непрерывны и имеют изломы. Ступенька Хевисайда и accuracy — разрывны, и именно поэтому не оптимизируются градиентными методами; сигмоида и logloss непрерывны, и потому оптимизируются.


Связь с другими темами курса

Что было раньше: урок 131 про предел функции — прямой фундамент этой темы: без предела определение непрерывности не формулируется вообще. Оттуда же мы взяли односторонние пределы, теорему о зажатой функции и два замечательных предела, которыми пользовались в заданиях 14, 16 и 28. Урок 129 про предел последовательности дал технику «двух последовательностей», которой мы доказывали отсутствие предела у $\sin\frac1x$ и у функции Дирихле. Урок 128 про геометрическую прогрессию неожиданно пригодился в оценке скорости бисекции: длины отрезков образуют прогрессию со знаменателем $\frac12$. Уроки 111-119 про показательную и логарифмическую функции — источник примеров: сигмоида, softmax, logloss собраны именно из них.

Что дальше: урок 133 вводит производную — и первое, что там будет доказано, это что дифференцируемость строго сильнее непрерывности. Всякая функция, имеющая производную в точке, в ней непрерывна; обратное неверно, и контрпример у тебя уже есть — ReLU в нуле. Дальше непрерывность станет постоянно действующим фоновым условием: в уроках 139-144 про исследование функций она нужна, чтобы гарантировать существование экстремумов (это прямо теорема Вейерштрасса), а в уроках 145-150 про первообразную и интеграл непрерывность подынтегральной функции — стандартное условие всех формул. В университетской части курса тема развернётся строго: уроки 183-185 дадут $\varepsilon$-$\delta$ определение, детальную классификацию разрывов и равномерную непрерывность.

Где это применяется в жизни и в ML/данных:

🤖 В машинном обучении: выбор функций активации (непрерывные сигмоида, tanh, ReLU, GELU против разрывной ступеньки); суррогатные функции потерь — logloss, hinge, MSE — которые непрерывны и потому оптимизируемы, в отличие от accuracy и F1; подбор порога классификатора бинарным поиском как прямое следствие теоремы о промежуточном значении; гарантия существования оптимума на замкнутом ограниченном диапазоне гиперпараметров.

💻 В программировании: бинарный поиск по ответу — это метод половинного деления; численное решение уравнений через scipy.optimize.brentq, где непрерывность и смена знака на концах — обязательные входные условия; обработка особых точек в формулах (log1p, expm1, стабилизация softmax вычитанием максимума).

📊 В анализе данных: непрерывность функции распределения как условие корректного вычисления квантилей; интерполяция временных рядов, где скачок означает пропуск или ошибку сбора; детекция аномалий как поиск точек, где непрерывная модель нарушается.

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

💰 В экономике: налоговые и тарифные сетки, где разрыв означает, что рост дохода может уменьшить итоговый заработок; поиск точки безубыточности как задача Больцано-Коши; непрерывность функции спроса как условие существования равновесной цены.


Интересные факты

💡 Больцано доказал теорему за четыре года до Коши — и это заметили только через полвека. Работа 1817 года «Чисто аналитическое доказательство теоремы, что между двумя значениями, дающими результаты противоположного знака, лежит по крайней мере один действительный корень уравнения» вышла в Праге крошечным тиражом. Больцано был священником, преподавал философию религии, был отстранён от должности за политические взгляды и умер почти неизвестным математикам. Его рукописи разбирали до 1930-х годов и находили там понятия, переоткрытые другими людьми через 50-70 лет.

💡 Функция Вейерштрасса 1872 года вызвала у современников настоящее возмущение. Она непрерывна в каждой точке прямой и не имеет касательной ни в одной. Анри Пуанкаре назвал такие примеры «чудовищами», Шарль Эрмит писал Стилтьесу, что «с ужасом и отвращением отворачивается от прискорбной язвы функций, не имеющих производных». Сегодня график этой функции — стандартная картинка в учебниках по фракталам, а её размерность Хаусдорфа вычисляли до 2018 года.

💡 Слово «непрерывность» в математике и «непрерывность» в бизнесе разошлись, но родство видно. Business continuity — способность процесса не прерываться при сбоях. Математически это буквально то же требование: малое возмущение входа не должно вызывать скачкообразного изменения выхода. Термин «устойчивость» в теории управления — прямой родственник математической непрерывности, только с количественными оценками.

💡 Замена ступеньки на сигмоиду стоила искусственному интеллекту около двадцати лет. Перцептрон Розенблатта появился в 1958-м, критика Минского и Пейперта в 1969-м фактически заморозила направление, а обратное распространение ошибки в форме, пригодной для многослойных сетей, было популяризовано Румельхартом, Хинтоном и Уильямсом в 1986-м. Ключевой технической предпосылкой была именно непрерывная дифференцируемая активация вместо разрывной ступеньки.

💡 Теорема о неподвижной точке из задания 24 в многомерном варианте доказывает существование экономического равновесия. Джон Нэш в 1950 году использовал теорему Какутани (обобщение Брауэра) для доказательства существования равновесия в некооперативных играх — и получил за это Нобелевскую премию по экономике в 1994-м. Одномерный случай, который ты только что разобрал через Больцано-Коши, — это тот же самый сюжет, свёрнутый до отрезка $[0;1]$.


Лайфхаки и полезные трюки

1. Для элементарной функции ищи не разрывы, а область определения

Не проверяй непрерывность в каждой точке — это лишняя работа. Элементарная функция непрерывна везде, где определена, значит все разрывы сидят в трёх местах: нули знаменателя, отрицательное под чётным корнем, неположительное под логарифмом (плюс $\frac{\pi}{2}+\pi k$ у тангенса).

Пример: для $f(x)=\frac{\ln x}{x^2-1}$ подозрительные точки находятся мгновенно: $x\le0$ (логарифм) и $x=\pm1$ (знаменатель). С учётом области определения остаётся единственная точка разрыва $x=1$ — и только её нужно классифицировать.


2. Разложи на множители до того, как считать пределы

Устранимый разрыв всегда виден как общий множитель числителя и знаменателя. Разложи обе части — и станет ясно без вычислений: сократился множитель значит устранимый разрыв, не сократился значит второй род.

Пример: в $\frac{x^2-9}{x^2+x-6}=\frac{(x-3)(x+3)}{(x-2)(x+3)}$ множитель $(x+3)$ сокращается — точка $x=-3$ устранимая; множитель $(x-2)$ остаётся — точка $x=2$ второго рода. Ответ получен из одного разложения.


3. Значение в точке смотри на то, где стоит нестрогое неравенство

В кусочно-заданной функции значение $f(x_0)$ берётся из той ветки, в условии которой стоит $\le$ или $\ge$ (или из отдельной строки «$x=x_0$»). Ветка со строгим неравенством даёт только предел, но не значение.

Пример: у $f(x)=x^2+1$ при $x\le1$ и $ax+2$ при $x>1$ значение $f(1)=2$ определяется первой веткой, поэтому непрерывность слева выполняется автоматически, и уравнение выписывается только для правого предела.


4. Проверяй склейку подстановкой в обе ветки — это занимает пять секунд

Нашёл параметры из системы — подставь точку склейки в обе формулы и убедись, что числа совпали. Ошибки знака и арифметики ловятся мгновенно.

Пример: получил $a=3$, $b=-2$ для склейки в точке $x=1$ между $x^2$ и $ax+b$. Подставляем: $1^2=1$ и $3\cdot1-2=1$ ✅. Совпало — можно сдавать.


5. Для второго рода различай «бесконечность» и «нет предела»

Если после разложения знаменатель стремится к нулю, а числитель — нет, это бесконечный разрыв и вертикальная асимптота. Если внутри функции есть колебание вида $\sin\frac1x$, $\cos\frac1x$ или $\tan\frac1x$, предела нет вовсе, хотя функция может быть ограничена. И там, и там — второй род, но поведение и лечение разные.

Пример: $\frac{1}{x-5}$ уходит в бесконечность и видна на графике как асимптота; $\sin\frac1x$ остаётся в коридоре $[-1;1]$, но «размазывается» по нему, и график около нуля закрашивается сплошной полосой.


6. Оценка сверху ограниченным множителем спасает в задачах с колебаниями

Если функция имеет вид «стремящееся к нулю × ограниченное», предел равен нулю независимо от того, как ведёт себя второй сомножитель. Формально это теорема о зажатой функции, практически — готовый рецепт.

Пример: $x^2\cos\frac{1}{x^3}$ при $x\to0$: модуль косинуса не больше единицы, значит $|f(x)|\le x^2\to0$, и функция доопределяется нулём до непрерывной. Без этого приёма задача выглядит неподъёмной.


7. Число шагов бисекции считай через $\log_2$, а не подбором

Формула $n\ge\log_2\frac{b-a}{\varepsilon}$ решает вопрос сразу. Полезная мнемоника: $\log_2 10\approx3{,}32$, то есть каждые примерно три с половиной итерации дают один верный десятичный знак. Десять знаков — тридцать три шага, и это не зависит от того, какая там функция.

Пример: отрезок длины $8$, нужна точность $0{,}001$: $\frac{8}{2^n}\le0{,}001 \Rightarrow 2^n\ge8000 \Rightarrow n=13$ (поскольку $2^{12}=4096$, а $2^{13}=8192$).


8. Перед запуском бинарного поиска проверь знаки на концах

Метод половинного деления гарантирует результат только при $f(a)\cdot f(b)<0$. Если знаки одинаковые, корня на отрезке может не быть вовсе — или их может быть два, и бисекция не найдёт ни одного. Одна проверка перед циклом экономит час отладки.

Пример: для $f(x)=x^2-4$ на отрезке $[-3;3]$ имеем $f(-3)=5>0$ и $f(3)=5>0$. Знаки одинаковы, бисекция не применима — хотя корней внутри целых два. Разбей отрезок на $[-3;0]$ и $[0;3]$ и запусти метод дважды.


Что дальше: непрерывность — это ещё не гладкость

Мы разобрались, когда функция не прыгает. Но у непрерывности есть предел возможностей, и ReLU показала его наглядно: функция непрерывна, а излом в нуле никуда не делся. Непрерывность отвечает на вопрос «меняется ли значение скачком», и не отвечает на вопрос «с какой скоростью оно меняется».

Именно этот второй вопрос и есть содержание следующего урока. Мы вернёмся к приращениям $\Delta x$ и $\Delta y$, но смотреть будем не на то, стремится ли $\Delta y$ к нулю (это и есть непрерывность), а на то, как быстро — то есть на поведение отношения $\frac{\Delta y}{\Delta x}$. Так рождается производная.

И сразу забегая вперёд: дифференцируемость строго сильнее непрерывности. Если у функции в точке есть производная, она в этой точке непрерывна — обратное неверно, и все наши изломанные примеры ($|x|$, ReLU, Huber на границе) это подтверждают. Получится строгая иерархия: разрывные функции ⊂ непрерывные ⊂ дифференцируемые. Сегодня ты научился отличать первый уровень от второго; в уроке 133 добавится третий, а вместе с ним — весь аппарат, на котором стоит и исследование функций, и градиентный спуск.


💡 Совет: заведи привычку задавать любой новой функции ровно два вопроса подряд — «где она не определена?» и «что происходит с односторонними пределами в этих точках?». Два вопроса, две минуты, и ты знаешь про функцию больше, чем большинство людей, которые её используют. Это работает одинаково хорошо и на экзаменационной дроби с параметром, и на функции потерь из чужого репозитория, и на тарифной сетке в договоре, где разрыв означает, что кто-то заработает больше, заработав меньше.

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

Впереди урок 133 — производная. Там мы перестанем спрашивать «меняется ли функция скачком» и начнём спрашивать «как быстро она меняется». Это тот самый инструмент, ради которого весь предыдущий блок про пределы и затевался, и с него начинается настоящий математический анализ. Переходи, самое интересное только начинается 🚀

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!