Когда у функции есть натуральная параметризация

от admin

ГОСЫ / вопрос 14 / Лекция 3

Рассмотрим векторы гладкой линии заданной естественной параметризацией .

1). Так как то (1)

2). Вектор – единичный вектор гладкой нормали

параллелен спрямляющей плоскости

3). . В (1) заменяем и по формулам (3) и (2). Получим

Подставим выражение в (2).

4). . Дифференцируем по s: = . Заменим и их выражениями по (3) и (4):

Формулы (3),(4),(5) называются формулами Френе, которые рассматривают связь между базисными векторами сопровождающими треугольниками, кручением и кривизной линии.

Определение 3.1. Число называется кручением линии в точке М на всей линии . Кручение есть функция параметра S.

Исходя из (5) и так как — единичный вектор, то . Кручение больше 0 тогда и только тогда, когда и противоположно направлены.

Геометрический смысл кручения.

Модуль кручения в данной точке кривой есть скорость изменения направления функции b(S) по отношению к естественному параметру S. Так как вектор b=b(S) перпендикулярен соприкасающейся плоскости, то абсолютная величина кручения характеризует скорость изменения положения соприкасающейся плоскости по отношению к параметру S.

Если линия задана в естественной параметризации, то кривизна и кручение есть функция по параметру S: .Уравнения такого вида называются натуральными уравнениями кривой и характеризуют кривую с точностью до движения, так как если у двух кривых натуральные уравнение совпадают, то кривые отличны только положением в пространстве. Если у двух кривых натуральные уравнения совпадают, то на каждой из них существует естественная параметризация, такая что в точках с одинаковыми параметрами кривизна и кручение одинаковы.

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

продифференцируем это равенство. Используем (5).

ыразим смешанное произведение векторов производных:

формула кручения (6)

Определение 3.2. Линия называется плоской, если все её точки принадлежат некоторой плоскости .

Если во всех точках гладкой плоской линии кручение равно нулю.

Произвольная параметризация.

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

Рассмотрим возможную замену параметра t на s, причем функция s=h(t) является допустимой заменой параметра -1 : -1

Найдем

Вектор второй производной параллелен соприкасающейся плоскости, так как он выражен через вектор и .

Рассмотрим векторное произведение первой и второй производной.

Винтовая линия

Винтовая линия получена путем равномерного вращения М (х,у,z) около оси Оz и равномерного движения параллельно оси Оz. Является гладкой линией класса .

Параметрические уравнения винтовой линии: Направляющая винтовой линии совпадает с направляющей кругового цилиндра (ОХУ: , значит, винтовая линия лежит на прямом круговом цилиндре с осью Оz.

Векторное уравнение винтовой линии: .

Используя формулу , имеем: . Таким образом, .

Через М проходит прямолинейная образующая МР цилиндра, имеющая направляющий вектор Так как , то винтовая линия пересекает все образующие под постоянным углом (углом между кривой и прямой называется угол между касательной к этой кривой и данной прямой).

Длина дуги винтовой линии равна .

Вектор главной нормали: Так как (по формуле Френе), то (k – кривизна винтовой линии).

Главная нормаль винтовой линии в точке М есть перпендикуляр к оси цилиндра, проведенный через точку М, т.к. где Р – проекция М на ОХУ. Вектор главной нормали направлен противоположно вектору

Кручение винтовой линии: . Знак кручения совпадает со знаком числа b.

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

Параметрическое задание функции

В которых $t$ принимает значения с отрезка [n1; n2]. Каждому значению t соответствуют значения x и y — координаты точки на плоскости Оxy.

Когда $t$ изменяет свое значение на промежутке от $n1$ до $n2$, точка описывает некоторую кривую. Уравнения $x=\phi (t)$ и $y=\psi (t)$ получили название параметрических для кривой, а $t$ — параметра.

Предположим, что функция $x=\phi (t)$ имеет обратную функцию $t=\ (x)$. Тогда справедливо равенство:

Параметрический способ задания функций широко применяется в механике. Так, если в плоскости некоторая материальная точка находится в движении (время $t$), и законы движения проекций этой точки на оси координат известны:

Уравнения являются параметрическими уравнениями траекторий движущейся точки. Исключая временной параметр, получим уравнение траектории в форме $y = f(x)$.

Определить траекторию и место падения груза, сброшенного с самолета, движущегося горизонтально со скорость $v_0$ на высоте $y_0$.

Допустим, что груз сбрасывается с момент пересечения самолетом оси Oy. Тогда очевидно, что горизонтальное перемещение груза равномерно и имеет постоянную скорость:

А вертикальное перемещение:

Следовательно, расстояние от груза до земли в произвольный момент падения:

Уравнения горизонтального и вертикального перемещения тела являются параметрическими. Для того, чтобы исключить временной параметр $t$, найдем его значение из первого уравнения.

Полученное выражение подставим во второе параметрическое уравнение чтобы найти уравнение траектории:

Гипотеза Эскобара

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

Комплексные числа были открыты без участия Эскобара, но это не значит, что мы должны отказываться от его наследия. Все знают, что 2+2=4, 2×2=4, 2^2=4. Только, при возведении в степень существует разница в порядке аргументов. Что если применить гипотезу Эскобара на нашем убеждении, что у порядка при возведении в степень может быть только два варианта? Ну а вдруг — больше?

Степень

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

Смущало только два момента: что у нуля степень уходит в минус бесконечность, а у единицы степень равна нулю. Поэтому ноль так долго не хотели открывать, а единицу так вообще за число не считали. Но ведь отрицательные числа и отрицательные степени положительных чисел меньше единицы вполне согласованы, в чём дело?

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

Это не единственная потеря в математике. Умножение числа на себя это всё равно что возводить число во вторую степень. Вернуть обратно число можно, вычислив корень, как степень одна вторая. Но отрицательные числа в квадрате будут положительными, и если возвращать обратно, то нужно кое-что постараться вспомнить о числе, то что потерялось, знак.

В целом, это не проблема — всего два варианта. Но, что если кроме положительных и отрицательных чисел есть и такие числа, которые в квадрате дают отрицательные? Знак-то, может, и теряется, но — тот который был, а не тот который стал.

Точки на плоскости намекают: поворот может быть степенью, увеличить степень в два раза может быть просто удвоенным поворотом. А значит, такие числа не только существуют, вторая составляющая это полноценный дубль первой составляющей, и у них прекрасная связь.

И конечно же, при вычислении корня таких комплексных чисел ровно два, знак теряется точно так же.

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

Например, если минус один возвести в степень , а затем попробовать вычислить корень степени , то из-за потери одного оборота основным значением будет не минус один. И останется вопрос, а точно ли во время этих вычислений потерялся один оборот? Если количество потерялось, тогда каким точно оно было — не знаешь. И тогда ответом может быть любое число с модулем один. Особенно, если количество потерянных оборотов может быть напрямую бесконечным.

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

Матрицы

image

Конечно, некоторые матрицы могут терять значения, почти как при умножении на ноль. Но зато, у тех, которые значения не теряют, есть и обратные матрицы, способные вернуть прежнее значение умножением на результат.

Среди матриц есть аналог обычного числа. Это квадратная матрица, у которой это число расставлено по диагонали. И если такую матрицу умножить на вектор, то будет тот же вектор, умноженный на это число.

У единицы есть свой аналог, , а у мнимой единицы аналогом может быть не только мнимая единица на диагонали. В матрице размером два на два можно поставить единицу и минус единицу по второй диагонали, , и в квадрате такая матрица будет давать минус один. В каком порядке расставлять на диагонали один и минус один не важно, главное выбрать, какой порядок относится к используемой мнимой единице, а какой к её знаковой противоположности.

Интересно было бы посмотреть, а что возведение в квадрат теряет. Разберём это в общем виде.

Для матрицы результат возведения в квадрат это .

И если мы хотим этим действием получить обычное число , то нужно решить систему уравнений

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

Во втором равенстве, , условия верности могут быть на выбор: либо , либо .

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

Например, матрица в квадрате даёт .

Ого! — теряется уже не знак. Теряются две величины, и .

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

Вывернем квадрат наизнанку и посмотрим, что значит корень.

Плюс/минус слева говорит, что существует корень из единицы, не равный ни единице, ни минус единице. С учётом знака, их даже два. А с правой частью что?

У нас тут нарисовался корень из нуля, сам не равный нулю. А ещё, от такого значения нельзя подсчитать корень. Нет такого значения матрицы, чтобы возвести в квадрат и получить его.

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

Расширение матрицы

Мы допускаем, что элементы матриц могут быть комплексным. Это расширяет представление и влияет не только на то, что мнимая единица может быть обозначена кроме ещё и , но и на то что величины и — тоже могут быть комплексными.

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

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

А для всех трёх пар противоположные порядки произведения приводят к одинаковым результатам с противоположным знаком. То есть, в сумме дают ноль.

Если все элементы матриц поделить на , то выяснится, что для минус единицы будет такая же сфера значений:

Справа посередине как раз матричное представление мнимой единицы через действительные значения элементов. А вместе с остальными двумя матрицами справа и простой единицей образует базу кватернионов. Это — числа подобные комплексным, но в которых используются уже две мнимые единицы, которые при различном порядке произведения образуют плюс или минус третью мнимую единицу, которая от них ничем, кроме порядка в тройке, не отличается.

Отсутствие отличия между мнимыми единицами говорит о том что при умножении одинаковых матриц вектор возможных значений схлапывается, теряя направление в базисе, да и сам базис. Соответственно, корень должен возвращать не только длину вектора, но и направление, то есть, привязывать его к базису. Получается, в каком-то смысле, возвращать базис.

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

Таблица умножения для матриц, строка на колонку:

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

Вот это поворот.

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

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

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

«Лучше всего, конечно, пять звёздочек»

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

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

Как восстанавливаются значения, если они не потеряны? У матрицы второго порядка есть такая закономерность:

Если одну из матриц поделить на , то справа будет единичная матрица и матрицы станут обратными друг другу — одна будет обращать действие другой.

Величина — это взятый с минусом определитель матриц из левой части равенства. Определитель может быть вычислен для квадратных матриц любого порядка. Это как обобщённый объём обобщённого параллелепипеда из составляющих матрицу векторов. Если определитель матрицы равен нулю, значит матрица схлопнула пространство преобразуемых векторов — хотя бы по одной координате, и тогда единственное скалярное значение, которое две матрицы могут дать при умножении — это ноль.

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

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

Расчёт определителя основан на том, что если в матрице на всю колонку будет только одна единица, то результат будет равен, с точностью до знака, определителю матрицы без этой строчки и колонки. И если единицу «размазать» по колонке, то части определителя складываются линейно. Для объяснения вычисления вполне достаточно.

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

Это будет задача со звёздочкой.

Если выписать требования явно, то получится следующее:

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

Оставшиеся две пары пар как будто даже и не связаны. Хорошо, что решение только одно, правда?

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

Основание

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

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

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

Если основание оставить, но в степени перед аргументом поставить постоянный коэффициент, то производная увеличится во столько же раз.

Если коэффициент мнимая единица, то изменение функции становится вращением на комплексной плоскости и через изменение аргумента равное длине единичной окружности функция повторяет своё значение.

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

Наглядно видно процесс потери и восстановления. Восстановления не всегда того что потеряно.

Особенности логарифма

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

Производная логарифма игнорирует любой постоянный коэффициент у аргумента:

При разборах показательной и степенной функций переменная была то в показателе, то в основании, но всё равно натуральный логарифм проявился. Можно попробовать разобраться почему. Заменим на :

После замены переменных:

Можно и поменять местами, только натуральный логарифм не исчезнет.

Здесь может быть любым, можно приравнять , или единице:

Отсюда можно вывести ещё одно выражение для логарифма:

Интересная неопределённость нижнего предела, знак зависит от самого .

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

Такая формула для степени получается при совмещении двух формул для логарифма.

Две параметризации

У результата появляется третья составляющая, а её знак зависит от порядка произведения.

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

В таком параметре есть два направления, плюс и минус. Всего два? По теореме Эскобара стоит добавить ещё направлений. Новое направление это будет средним между известными двумя: направлением первого вектора и направлением обращённого по знаку второго вектора. Тогда векторную часть результата произведения можно будет перенаправить двойным параметром по любому направлению на плоскости, на выбор. Обращение одного из векторов перед расчётом дополнительного направления здесь понадобилось для того чтобы при обмене векторов менялся и знак результата.

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

Различие порядка операции возведения в степень похоже на различие порядка при умножении кватернионов. «Гипотезой Эскобара» — я называю предположение о том, что возведение в степень можно параметризовать, примерно так же как умножение кватернионов выше.

У возведения в степень при одинаковом основании и показателе должна существовать обратная операция, подобно корню — обратной к операции умножения величины на саму себя. . Эту функцию можно обозначить напрямую, , а можно выразить через функцию Ламберта.

Читать:
Угадай что за животное

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

Интересно, как работают такие фокусы при использовании комплексных значений?

Если эту морковку развернуть, то ботва совпадёт с предыдущим графиком.

Если основание и показатель различаются, то зная их соотношение всё равно можно восстановить значения по результату, практически тем же самым способом.

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

Видно, что в точке значение выражения становится действительным,

В точке (-1) сам аргумент заворачивает на новый круг, как при движении по часовой, так и против часовой. Но у при движении по часовой и против часовой графики различаются, пересекаются накрест. Разные витки различаются.

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

Аргумент функции повторяет свои значения циклически, а исследуемая функция повторяющихся циклов не проявляет.

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

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

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

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

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

Если операнды возведения в степень одинаковы, тогда ясно как их получить:

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

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

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

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

Значения функции при таких оборотах:

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

График при вращении , реальная и мнимая составляющая:

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

Что особенного в значении аргумента ?

Вот и проявилось возведение в квадрат, которое обращается до корня.

Можно сравнить графики.

На три функции две кривые. Про первую вполне понятно, что это. .

А вторая, , означает что может вычисляться и при , достаточно чтобы параметр у функции не соответствовал значению.

При аргументе все десять величин совпадают:

Вот и вся особенность.

При параметрах 0 и (-1) функция ламберта при этом аргументе равна (-1). При других параметрах она принимает уже другое значение:

При этом продолжает выполняться соотношение

Совсем обороты не добавляется сразу при двух параметрах, это расхождение похоже на петлю ().

Ещё можно заметить, что при использовании параметра 1 знаменитое тождество Эйлера принимает вид:

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

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

Если обороты теряются:

Первый вывод прост: информацию об оборотах лучше не терять.

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

Что напоминает о возможности восстановить величину, находящуюся и в основании и в показателе степени, до нуля.

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

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

Коммутативность и ассоциативность

Причём, если мы рассматриваем кватернионы и перемножаем три различные мнимые единицы, то результат будет одинаковый.

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

— Множитель можно добавить прямо в середину между предыдущими множителями. И для этого будет даже два различных варианта.

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

Идея о вставке возникает оттого что мнимая единица воспринимается не просто как число, которое имеет различный результат при умножении с различной стороны, а как размерность. Как будто произведение это сообщение о количестве , и предмете этого количества , которое уже не просто «штука». Если произведение идёт в другом порядке, то нужно произвести обмен порядка, соответственно изменив и . Производится кватернионное сопряжение — изменяется знак только у мнимой части. Октанион — это сумма кватерниона без размерности и кватерниона с размерностью, с этой размерностью обычная единица становится мнимой, и в квадрате даёт (-1).

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

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

Как видно, при таком добавлении меняется либо порядок произведения, либо знак.

Такая размерность похожа на базис, только не отделяется до операции, чтобы вернуться после, а участвует в расчётах.

Дзета-функция

То они сходятся по-разному. Первая это дробь , а вторая это Дзета-функция Римана. Область сходимости у них на комплексной плоскости это соответственно: вне единичной окружности и правее вертикальной линии через единицу. На границе сходимости результат зависит от количества слагаемых, кружит вокруг одного значения. За исключением , при этом аргументе обе суммы просто расходятся. И аналитическое продолжение тоже есть при всех других значениях, кроме этого.

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

А было бы интересно: основание и показатель степени медленно меняются местами, медленно меняет свой знак.

«А потом дискотека»

При приближении к единице, гамма приближается к постоянной Эйлера-Маскерони. Но при сумма становится , начиная со второго слагаемого состоит только из отрицательных чисел.

Если взять и построить график суммы, то получится:

Видно, что сума сначала уменьшается, затем возрастает и, видимо, может и больше нуля когда-нибудь стать.

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

Здесь выражение приведено к такому, в котором множитель перед степенью с натуральным основанием и показатель этой степени совпадают. И тогда можно использовать функцию ламберта.

Выражение через , разумеется, такое же:

Одно из значений функции Ламберта даст , другие дадут другое значение.

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

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

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

Например, на шаге сумма уже положительна.

В статье «Удивительная и загадочная ��» показано, что существует способ уменьшить влияние той части суммирования, которая при существовании мнимой части выглядит как неравномерная цикличность. Может быть, уменьшение цикличности на вычисления без циклов тоже работает?

Полученное выражение сходится к тому же значению.

Но сходится быстрее. Оно даже не уходит ниже нуля.

Видимо, кроме цикличности есть и другие эффекты.

При исследовании сходимости неожиданным образом проявляются числа Бернулли.

ЧАСТИЧНАЯ ПАРАМЕТРИЗАЦИЯ ФУНКЦИЙ

Часто бывает нужно определить функцию, алгоритм работы которой совпадает с алгоритмом уже имеющейся функции, но при этом уменьшить количество ее аргументов, зафиксировав значение одного или нескольких аргументов функции. Например, если мы хотим удвоить значения всех числовых элементов некоторого списка, то можем использовать для этого функцию шар приблизительно следующим образом: map double [1,5,12,-21

где double — функция удвоения числа. Однако функция удвоения — это просто функция умножения с фиксированным значением одного из параметров — значением 2. Этот факт можно выразить, заменив идентификатор double на явно выписанное лямбда-выражение:

шар (х -> 2 * х) [1,5,12,-2]

В данном случае, однако, можно записать этот функциональный параметр еще проще: тар (2 *) [1,5,12,-2]

образовав так называемое сечение — частично параметризованный вызов операции умножения. Функции в языке Haskell обладают той приятной особенностью, что всегда можно написать частично параметризованный вызов функции, указав вместо всех необходимых аргументов лишь первые несколько (разумеется, если функция, вообще говоря, имеет более одного аргумента). Например, саму функцию удвоения всех элементов списка можно описать как с помощью уравнения doubleList list = map (2 *) list

так и просто выполнив частичную параметризацию функции тар: doubleList = map (2 *)

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

myFunc xyz=x*y+z myFunc = xyz->x*y + z myFunc = x -> y -> z -> x * у + z myFunc x = yz->x*y + z

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

тар (х -> х / 2) [2, 5, 6, 9]

Здесь число 2 — это второй аргумент функции деления, поэтому мы не можем записать сечение в том виде, как мы это делали раньше:

— это будет уже не деление пополам, а, наоборот, результаты деления числа 2 на значения элементов списка. Но мы можем в сечении задавать и второй аргумент бинарной операции: тар (/ 2) [2, 5, 6, 9] и это уже будет ровно то, что нам нужно.

Конечно, мы всегда можем поменять местами два первых аргумента функции с помощью операции flip, так что тот же результат мы можем получить и с помощью вызова map (flip (/) 2) [2, 5, 6, 9]

но, конечно, запись (/ 2) короче и нагляднее, чем (flip (/) 2).

Для сечений с заданным вторым аргументом есть одно важное исключение. Дело в том, что знак операции (-) применяется в языке в двух разных смыслах — как унарная операция арифметического отрицания и как бинарная операция вычитания. Поэтому выражение (- е) противоречиво: его можно понимать и как арифметическое отрицание значения выражения е, и как сечение бинарной операции (-) с фиксированным вторым аргументом. В языке Haskell принята первая трактовка, так что запись (-1) означает не сечение бинарной операции вычитания, а просто число «минус единица». Для того чтобы записать сечение бинарной операции минус, придется использовать «универсальную» запись (flip (-) 1) или функцию subtract, которая определена следующим образом: subtract = flip (-)

» map (subtract 2) [2, 5, 6, 9]

Свойство функций, которое позволяет при вызовах использовать меньшее число аргументов, чем определено в типе этой функции, получая при этом новую функцию с меньшим числом аргументов, может быть использовано также и при задании уравнений для функций. Определим, например, функцию, которая суммирует длины элементов списка строк. Это можно сделать следующим образом: sumLengths : : [String] -> Int sumLengths list = sum $ map length list

Функцию sumLengths можно использовать, например, для подсчета количества непустых символов в предложении:

» sumLengths $ words «Haskell is a functional language»

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

sumLengths list = (sum . map length) list

Теперь видно, что аргумент list в уравнении можно просто убрать, и уравнение приобретает вид

sumLengths = sum . map length

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

elem : : Eq а => а -> [а] -> Bool

elem е list = or $ map (==e) list

Используя свойство карринга, то же уравнение можно записать короче: elem е = or . map (==е)

Правда, если функция определяется несколькими уравнениями, то все уравнения должны содержать одно и то же число аргументов, так что если бы мы захотели в определении функции elem отдельно описать случай поиска в пустом списке, то могли бы определить функцию с помощью двух уравнений elem е [] = False

elem е list = or $ map (==e) list

но не могли бы во втором уравнении использовать «сокращенную» запись с одним аргументом, поскольку в первом уравнении мы уже использовали форму записи с двумя аргументами.

Наоборот, часто удобно определять функцию, задавая для нее «лишний» аргумент. Например, определяя функцию, которая по двум заданным функциям строит их суперпозицию, мы выписали следующее уравнение: comp f g = х -> f (g х)

однако вместо этого мы могли бы написать более простое эквивалентное ему уравнение

comp f g х = f (g x)

Соответственно, тип функции comp мог бы быть определен двумя эквивалентными способами

comp : : (b -> а) -> (с -> Ь) -> (с -> а) или

comp : : (b -> а) -> (с -> Ь) -> с -> а

Другими словами, при определении тина функции знак ->, отделяющий типы аргументов друг от друга и от типа результата, можно считать «право-ассоциативной» операцией, подразумевающей расстановку скобок справа налево. Этим объясняется и тот непривычный для программистов, привыкшим к программированию на императивных языках, факт, почему один и тот же символ используется как для разделения типов аргументов, так и для отделения типов аргументов от типа результата функции. В действительности, как мы уже говорили, любая функция имеет только один аргумент, однако результатом может быть функция, которая будет также иметь один аргумент, и т.д.

Оператор (->) является бинарной операцией над типами, с помощью которого из двух имеющихся типов создается новый функциональный тип. С операциями над типами мы уже немного знакомы: когда мы определяем новый параметризованный тип данных с помощью конструкции data, то фактически определяем операцию, с помощью которой из типов-параметров создается новый тип данных. Например, если мы описали тин data Tree а = Empty | Tree a (Tree a) (Tree a) то фактически определили функцию над типами Tree с параметром а, которая, получив тип элементов дерева, выдает тип самого дерева.

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

Аналогично можно запросить тип функции над значениями:

Точно так же можно запросить сорт типа или конструктора типа. Для этого используется команда : kind или в сокращенном виде : к:

>> :к Integer Integer : : *

Здесь символ f * ‘ означает произвольный конечный тип. Видно, что Integer — это конечный тип, [] — конструктор типа, имеющий один параметр, Either — конструктор типа с двумя параметрами. Частичное применение конструкторов типа разрешается точно так же, как и частичное применение функций:

Prelude> :k Either String Either String :: * -> *

Аналогичным образом, запрашивая сорт созданных нами конструкторов типов, мы получим ответ в таком же виде:

Для кортежей также можно запросить сорт конструктора кортежей:

>> :k (,,) Int String (,,) Int String :: * -> *

Во втором и третьем случаях запрашивается сорт типа для частичного применения конструктора типов кортежей (, , ).

Оператор над типами (->) — это тоже конструктор типа с двумя аргументами, поэтому ничего удивительного, что при запросе сорта для оператора (->) мы получим следующие ответы:

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

(2*) : : Num а => а -> а

но сделать аналогичный по форме запрос сорта

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

» :к (->) Integer (->) Integer :: * -> *

Свойство функции п аргументов, благодаря которому можно вызывать ее с произвольным числом аргументов, меньшим или равным п, называется каррингом в честь математика Хаскелла Карри (Haskell В. Curry), предложившего такую концепцию. Функции, обладающие свойством кар- ринга, называют карринговыми. Иногда, в противоположность каррин- говым функциям, удобно считать, что функция должна получать не два аргумента, а один аргумент, представляющий пару значений. Например, описывая функцию для нахождения наибольшего общего делителя двух натуральных чисел, мы считали, что функция будет иметь два аргумента типа Integer. Соответствующие описания типа и уравнения выглядели следующим образом:

gcd : : Integer -> Integer -> Integer gcd m n | m Integer gcd (m, n) | m с) -> (а -> Ь -> с)

curry fab = f (a, b)

uncurry : : (а -> b -> с) -> ( (а, Ь) -> с)

uncurry f (a, b) = f а b

Сама простота этих определений показывает всю силу и выразительность языка Haskell при работе с функциями. Может показаться, что в листинге 6.1 уравнения для функций curry и uncurry перепутаны, что аргументы для функции curry записаны «в карринговой форме», а аргументы функции uncurry — наоборот, «в некарринговой форме». Но никакой ошибки нет. В этом можно убедиться, если понять, что функциональный аргумент в уравнении для функции curry — это «некар- ринговая» функция, так что в правой части уравнения она совершенно корректно применяется к кортежу из двух аргументов, как и положено некарринговой функции. В левой же части уравнения представлена форма обращения к результату работы функции curry. Для лучшего понимания можно также переписать уравнение для функции curry в эквивалентном виде с использованием лямбда-выражения:

curry f = а b -> f (а, Ь)

Здесь очевидно, что результатом применения функции curry является функция двух аргументов в карринговой форме, которая применяет некар- ринговую функцию f к кортежу, составленному из двух своих аргументов. Анализ функции uncurry можно провести аналогично.

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

startlncr : : Ord а => [а] -> Int

По заданному непустому списку list можно легко получить список пар соседних элементов: pairs = zip list $ tail list. Теперь для каждой пары можно определить, верно ли, что первый элемент пары строго меньше второго: шар ( [а] -> Int

Похожие статьи