Это же элементарно, Ватсон?
Какие функции принято называть элементарными и почему? И при чём тут Ватсон? Разберёмся со всем по порядку. Обещаю, будет понятно и интересно, хоть и не совсем элементарно.
Когда я был школьником, то моим хобби была охота за функциями, для того чтобы рисовать на миллиметровке их графики, собирая своеобразную коллекцию. Тогда я был вооружён мощным оружием: калькулятором МК-52. До компьютера с графическим, а не текстовым дисплеем (ZX-Spectrum + домашний телевизор), нам всем ещё надо было дорасти, и мне, и доступным мне компьютерам.
Красавец со стековым программированием, непонятными для школьника значками и смешным морганием дисплея.
Чтобы поддержать этот интерес, папа мне подсунул справочник по математике Марка Яковлевича Выгодского, в котором можно было выуживать и интересные примеры функций с необычными графиками в различных координатах: декартовых, параметрических и полярных. Название справочника мне тогда казалось несколько ироничным:
Содержание явно не выглядело элементарным. Но вот что было интересно: всë, что я находил в справочнике, можно было составить из функций, доступных на калькуляторе. Присмотревшись к клавиатуре, мы найдём там, кроме «бухгалтерской» арифметики — сложения, вычитания, умножения и деления, ряд функций, вот они, жёлтенькие:
Точно такой же набор входит и в число элементарных функций, перечисленных в справочнике. А кто это решил, что эти функции в чём-то элементарнее других? Чаще встречаются? А почему? И отчего в этот клуб не берут другие функции? Это исторически сложившаяся терминология, или какая-то теория тут всё же, есть? Давайте разбираться.
* * *
Мы начнём с самых простых функций и постепенно будем добавлять к ним новые, глядя на то, что получается.
Самыми простыми операциями можно считать арифметические операции, определённые на поле вещественных чисел, а самой простой функцией — вещественную константу. Из этих функций и операций мы можем получить систему арифметических функций. Я буду записывать системы функций несколько нетрадиционным способом в форме пары множеств:
Первый элемент в паре задаёт множество функций системы. В случае это единственная функция, которая возвращает указанную константу для любых аргументов: На калькуляторе она соответствует кнопкам с цифрами. Второе множество определяет набор операторов, позволяющих комбинировать функции, создавая из них новые функции. Например, сложение функций можно определить так: Прочие арифметические операторы над функциями определяются подобным образом.
Этот набор операций и функций функционально полон и замкнут. Это значит, что с его помощью можно получить любую константу, и любая комбинация этих операций и функций, тоже будет константой, если не пытаться делить на ноль. С этой системой мы знакомимся класса, так, до третьего. И графики она порождает скучные — это горизонтальные прямые.
Теперь добавим к константе в системе арифметических функций простейшую зависимость, которой у нас ещё не было — тождественное преобразование: Эта функция ничего не делает и кажется абсолютно бесполезной. Но обратите внимание, на выделенном мною блоке клавиатуры калькулятора, над клавишей с нулём синим цветом написано НОП
. По существу, это и есть тождественное преобразование для которого создатели калькулятора выделили целую команду.
Из функций и уже можно собрать произвольную линейную функцию:
Сумма, разность и композиция любых линейных функций оставляют их линейными, образуя полную и замкнутую систему линейных функций:
Здесь появились два новых символа — кружочек и звёздочка. Кружочек обозначает композицию функций, или подстановку: , а звёздочка символизирует операцию замыкания системы. Дело в том, что хотя и сами являются линейными, это далеко не все мыслимые линейные функции. Однако все возможные арифметические комбинации этих базовых функций порождают всё множество линейных функций. Замыкание и обозначает множество всех комбинаций базовых функций с помощью перечисленных операций.
Таким же образом, с формальной точки зрения, любой язык порождается конечным набором слов и конечным набором правил — грамматикой языка. Хотя грамматический подход очень близок к обсуждаемой нами теме, мы сейчас туда не полезем, чтобы не отвлекаться от функций.
К линейным функциям от x относятся, например, такие:
Графики линейных функций тоже не особо радуют разнообразием, но по крайней мере, они уже могут быть наклонными.
Умножение двух нетривиальных линейных функций это уже функция квадратичная. Последующие перемножения и композиции могут повышать степень получающегося многочлена неограниченно. Таким образом, добавляя к линейным функциям умножение, мы получаем полную и замкнутую систему полиномиальных функций или многочленов:
Графики полиномов — всевозможные параболы, уже могут быть достаточно интересными. Они могут аппроксимировать функции, как степенные ряды, или как полиномы Чебышёва, красиво интерполировать точки. А в параметрических координатах они могут использоваться как кривые Безье и ими уже можно нарисовать хоть зайца из «Ну погоди», хоть собственный портрет. Впрочем, правильную окружность одними полиномами не нарисовать.
Наконец, добавив к полиномиальным функциям деление, мы получим систему рациональных функций, отношений двух многочленов:
Рисовать их графики поначалу интересно из-за разрывов и асимптот, но быстро становится ясно, что ничего принципиально нового по сравнению в полиномами они не предлагают. Вот несколько примеров рациональных функций от :
Классе в пятом, при решении уравнений, мы встречаемся с корнями: квадратными кубическими и т.д. Как нужно расширить систему рациональных функций, чтобы можно было ими пользоваться: ввести новую операцию для возведения в степень, или новую функцию? Для того, что чтобы получить и корни и многое другое, достаточно добавить к нашему набору пару взаимно обратных функций: экспоненту и натуральный логарифм. Эта добавка взрывообразно расширяет систему рациональных функций. Она позволяет выражать любые показательные и логарифмические функции, которые можно получить, пользуясь хорошо известными тождествами:
Это значит, что квадратный корень, или , вместе с десятичным логарифмом мы уже имеем. Кроме того, в вещественных числах нам становятся доступны гиперболические функции:
Обратные гиперболические функции можно выразить через логарифмы:
Наконец, перейдя к комплексным числам, мы получаем все тригонометрические и обратные тригонометрические функции, в соответствии со знаменитой формулой Эйлера. Всё это богатство и составляет систему элементарных функций, которая определяется через четыре базовые функции, арифметику и композицию:
и включает в себя и тригонометрию, и радикалы, и модуль, и многое-многое другое. Таким образом, мы, наконец, получаем доступ ко всему, что изображено жёлтым цветом на выделенной части клавиатуры калькулятора и ко всему разнообразию графиков, доступных с помощью справочника Выгодского.
Естественным образом, все указанные нами системы образуют иерархию, которой мы, в общих чертах, следуем, изучая школьную программу математики, переходя из первого класса к одиннадцатому:
Впервые подобную классификацию (только гораздо формальнее, чем мы) произвёл Жозеф Лиувилль в первой половине 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");
Здесь используется проекция Боннэ от эпициклоиды на поверхности сферы.