Какие функции принято называть элементарными и почему? И при чём тут Ватсон? Разберёмся со всем по порядку. Обещаю, будет понятно и интересно, хоть и не совсем элементарно.
Когда я был школьником, какое-то время моим хобби была охота за функциями, для того чтобы рисовать на миллиметровке их графики, собирая своеобразную коллекцию. Тогда я был вооружён мощным оружием: калькулятором МК-52. До компьютера с графическим, а не текстовым дисплеем (ZX-Spectrum + домашний телевизор), нам всем ещё надо было дорасти, и мне, и доступным мне компьютерам.

Чтобы поддержать этот интерес, папа мне подсунул справочник по математике Марка Яковлевича Выгодского, в котором можно было выуживать интересные примеры функций с необычными графиками в различных координатах: декартовых, параметрических и полярных. Название справочника мне тогда казалось несколько ироничным:

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

Точно такой же набор входит и в число элементарных функций, перечисленных в справочнике. А кто это решил, что эти функции в чём-то элементарнее других? Чаще встречаются? А почему? И отчего в этот клуб не берут другие функции? Это исторически сложившаяся терминология, или какая-то теория тут всё же, есть? Давайте разбираться.
* * *
Мы начнём с самых простых функций и постепенно будем добавлять к ним новые, глядя на то, что получается.
Самыми простыми операциями можно считать арифметические операции, определённые на поле вещественных чисел, а самой простой функцией — вещественную константу. Из этих функций и операций мы можем получить систему арифметических функций. Я буду записывать системы функций несколько нетрадиционным способом в форме пары множеств:
Первый элемент в паре задаёт множество функций системы. В случае это единственная функция, которая возвращает указанную константу для любых аргументов:
На калькуляторе она соответствует кнопкам с цифрами. Второе множество определяет набор операторов, позволяющих комбинировать функции, создавая из них новые функции. Например, сложение функций можно определить так:
Прочие арифметические операторы над функциями определяются подобным образом.
Этот набор операций и функций функционально полон и замкнут. Это значит, что с его помощью можно получить любую константу, и любая комбинация этих операций и функций тоже будет константой, если не пытаться делить на ноль. С этой системой мы знакомимся класса, так, до третьего. И графики она порождает скучные — это горизонтальные прямые.
Теперь добавим к константе в системе арифметических функций простейшую зависимость, которой у нас ещё не было — тождественное преобразование: Эта функция ничего не делает и кажется абсолютно бесполезной. Но обратите внимание, на выделенном мною блоке клавиатуры калькулятора, над клавишей с нулём синим цветом написано
НОП. По существу, это и есть тождественное преобразование, для которого создатели калькулятора выделили целую команду.
Из функций и
уже можно собрать произвольную линейную функцию:
Сумма, разность и композиция любых линейных функций оставляют их линейными, образуя полную и замкнутую систему линейных функций:
Здесь появились два новых символа — кружочек и звёздочка. Кружочек обозначает композицию функций, или подстановку: а звёздочка символизирует операцию замыкания системы. Дело в том, что хотя
и
сами являются линейными, это далеко не все мыслимые линейные функции. Однако все возможные арифметические комбинации этих базовых функций порождают всё множество линейных функций. Замыкание и обозначает множество всех комбинаций базовых функций с помощью перечисленных операций.
Таким же образом, с формальной точки зрения, любой язык порождается конечным набором слов и конечным набором правил — грамматикой языка. Хотя грамматический подход очень близок к обсуждаемой нами теме, мы сейчас туда не полезем, чтобы не отвлекаться от функций.
К линейным функциям от относятся, например, такие:
Графики линейных функций тоже не особо радуют разнообразием, но по крайней мере, они уже могут быть наклонными.
Умножение двух нетривиальных линейных функций это уже функция квадратичная. Последующие перемножения и композиции могут повышать степень получающегося многочлена неограниченно. Таким образом, добавляя к линейным функциям умножение, мы получаем полную и замкнутую систему полиномиальных функций или многочленов:
Графики полиномов — всевозможные параболы, уже могут быть достаточно интересными. Они могут аппроксимировать функции, как степенные ряды, или как полиномы Чебышёва, красиво интерполировать точки. А в параметрических координатах они могут использоваться как кривые Безье и ими уже можно нарисовать хоть зайца из «Ну погоди», хоть собственный портрет. Впрочем, правильную окружность одними полиномами не нарисовать.
Наконец, добавив к полиномиальным функциям деление, мы получим систему рациональных функций, отношений двух многочленов:
Рисовать их графики поначалу интересно из-за разрывов и асимптот, но быстро становится ясно, что ничего принципиально нового по сравнению в полиномами они не предлагают. (В комментариях подсказывают, что рациональные функции, если правильно их использовать, способны принести много пользы, и даже нарисовать окружность). Вот несколько примеров рациональных функций от :
Классе в пятом, при решении уравнений, мы встречаемся с корнями: квадратными кубическими и т.д. Как нужно расширить систему рациональных функций, чтобы можно было ими пользоваться: ввести новую операцию для возведения в степень, или новую функцию? Для того, что чтобы получить и корни и многое другое, достаточно добавить к нашему набору пару взаимно обратных функций: экспоненту и натуральный логарифм. Эта добавка взрывообразно расширяет систему рациональных функций. Она позволяет выражать любые показательные и логарифмические функции, которые можно получить, пользуясь хорошо известными тождествами:
Это значит, что квадратный корень, или , вместе с десятичным логарифмом мы уже имеем. Кроме того, в вещественных числах нам становятся доступны гиперболические функции:
Обратные гиперболические функции можно выразить через логарифмы:
Наконец, перейдя к комплексным числам, мы получаем все тригонометрические и обратные тригонометрические функции, в соответствии со знаменитой формулой Эйлера. Всё это богатство и составляет систему элементарных функций, которая определяется через четыре базовые функции, арифметику и композицию:
и включает в себя и тригонометрию, и радикалы, и модуль, и многое-многое другое. Таким образом, мы, наконец, получаем доступ ко всему, что изображено жёлтым цветом на выделенной части клавиатуры калькулятора и ко всему разнообразию графиков, доступных с помощью справочника Выгодского.
Естественным образом, все указанные нами системы образуют иерархию, которой мы, в общих чертах, следуем, изучая школьную программу математики, переходя из первого класса к одиннадцатому:
Впервые подобную классификацию (только гораздо формальнее, чем мы) произвёл Жозеф Лиувилль в первой половине XIX века. Позже, уже в XX веке, ещё более формально множество элементарных функций определили Готфри Харди и упомянутый в заголовке Джордж Невил Ватсон.
Но почему же все они остановились на этом минимальном наборе, не включив него, например, крайне полезные функции Бесселя, W-функцию Ламберта, или функцию ошибок ?
Дело в том, что мы не рассмотрели ещё одну важную операцию, превращающую одну функцию в другую: взятие производной. Все перечисленные нами системы остаются замкнутыми, если мы добавим в них оператор дифференцирования . В том числе, и система элементарных функций:
Действительно, любая производная любой элементарной функции остаётся элементарной. Интегрирование таким свойством уже не обладает: очень легко найти эле��ентарную функцию, чья первообразная элементарной уже не будет. Однако никакая функция из не требует для своего определения интегрирования, все они могут быть выражены как конечная композиция элементарных функций и операций.
Именно вопросом элементарности первообразных и занимался Лиувилль, выстраивая цепочку пополнений в системах функций (дифференциальных полях), начиная с констант, через линейные функции к рациональным. Он же доказал теорему, которая известна сейчас как теорема Лиувилля, из которой следует единственность и достаточность логарифмического и экспоненциального дополнения рациональных функций до элементарных.
Таким образом, формально и строго элементарность функции определяется через замкнутость и полноту дифференциального поля, к которому она принадлежит, а также через конечность своего представления в этом поле. Все эти свойства системы элементарных функций не нарушатся, если мы добавим к ним какие-то спецфункции: функции Бесселя, эллиптические, гипергеометрические функции или ту же функцию ошибок. Однако система элементарных функций минимальна и тем только заслуживает особого имени.
Я не случайно начал рассказ с отсылки к калькулятору. Сейчас результаты работ Лиувилля и его последователей используются при разработке систем символьной алгебры, символьного дифференцирования, интегрирования и решения дифференциальных уравнений. И вот тут-то языковая модель функции становится как нельзя кстати!
В завершение я хочу сделать ещё одно замечание. Хорошо известны со школы свойства экспоненты и логарифма:
Они превращают эту пару функций в преобразование, которое, сохраняя алгебраическую структуру, меняет сложение и вычитание на умножение и деление и наоборот. В этом состоит глубокий смысл этих функций и их роль в системе элементарных функций, множество операций которой оказывается замкнутым относительно этого автоморфизма.
* * *
Со времени моих экспериментов с микрокалькулятором прошло около сорока лет, и за это время я не только разобрался с названием справочника, но и стал достаточно искушённым в рисовании графиков элементарных функций.
Так что всем, дочитавшим, делаю подарочек, построенный исключительно элементарными методами:

using Plots;
bonne(phi,lam,t) = let
ϕ₀ = 83/180*π
ρ = cot(ϕ₀) - ϕ₀ - ϕ(t)
E = λ(t)*cos(ϕ(t))/ρ
(ρ*sin(E), -cot(ϕ₀) + ρ*cos(E))
end;
ϕ(t) = 0.9*pi/2*cos(50t)*(cos(51t))+0.12;
λ(t) = 0.9*pi*sin(50t)*(cos(51t));
plot(legend=false,size=(550,500),bg="black",lw=0.75,la=0.95);
plot!([bonne(ϕ,λ,t + π/2) for t in 0:0.001:π]);
plot!([bonne(ϕ,λ,t - π/2) for t in 0:0.001:π],lc="orangered");
png("bonne.png");Здесь используется проекция Боннэ от эпициклоиды на поверхности сферы.
