Сергей Самойленко @samsergey
Руководитель, научный сотрудник, преподаватель
Information
- Rating
- Does not participate
- Location
- Петропавловск-Камчатский, Камчатский край, Россия
- Date of birth
- Registered
- Activity
Руководитель, научный сотрудник, преподаватель
Вы совершенно правы, если целью является сам график. Но сам по себе он не очень интересен. Для анализа его свойств (производной, например или меры, которую она образует), равномерная сетка не годится и фрактальные алгоритмы, либо визуализация части дерева пар подходит лучше. Но это уже детали.
График этой функции лучше строить не вычисляя её по точкам, а используя алгоритм построения фрактальных множеств. В частности, метод де Рама. Он требует меньше вычислений.
А чем "такое" помешает в продакшн? Быстрое, надежное решение, с основательной математической базой. Посмотрите оригинальные статьи, представляющие повсеместно используемые самобалансирующиеся деревья, например. Там суровая метематика, которая не мешает их использовать в уютном Питончике. Кстати, библиотека мемоизации
memoization
в Хаскеле использует подобный описанному в статье подход при построении взвешенных деревьев.При построении кругов Форда важен не размер, а порядок кругов и то, как они касаются друг друга. Указанное на рисунке число соответствует не размерам, а положению круга: координате точки, в которой он касается горизонтальной прямой.
Можно в
Diagrams
с генерацией SVG, можно вGloss
, если только посмотреть, и результат не нужно сохранять. Можно вJuicyPixels
, если хочется растр. Во всех случаях это будет простая чистая итерация, а все IO окажутся локализованы вmain
.Да, чего там рисовать! Кривая алкоголика ? Даже в высоком разрешении скучна и невыразительна. То ли дело её производная!..
А нарисовать несложно, например, итерациями преобразований де Рама.
Для своей работы эти взаимодействия вообще ничего не требуют. Это нам удается их непротиворечиво и согласно большей части наблюдений моделировать теми или иными абстракциями. Электромагнитное взаимодействие лучше всего (проще, компактнее и полнее) описывается как четырехмерный объект вложенный в шестимерное линейное пространство. Но нет смысла спрашивать, где оно находится или есть ли оно вообще, это абстракция, позволяющая построить полную работающую теорию ЭМП. Поведение и зоопарк элементарных частиц описываются с помощью теории групп, периодический закон Д.И. Менделеева -- системой ортогональных многочленов, описывающих сферические гармоники. Искривление пространства-времени ничуть не хуже иных для своих целей.
Сложности возникают при чрезмерном упрощении, как в обсуждаемой статье. Когда предлагаемая абстракция, работающая на некотором классе задач, заведомо не сможет решить иные, решаемые более аккуратно построенными абстракциями.
А эталоном "прямоты" может служить геодезическая линия и её локальные дифференциально-геометрические свойства.
Икривление пространства вовсе не должно быть "в чем-то". Знакомство с многообразями и топологией дают соответствующую интуицию. Сила это мера взаимодействия, а не его природа или причина, так что она пространство не искривляет. А на последний вопрос есть очень аккуратный и красивый ответ: закон тяготения Нютона и закон Кулона подозрительно похожи из-за трехмерности пространства и уравнения Стокса, универсального для любого потенциального поля центрального типа. Этот же закон вы обнаружите и в акустике и в оптике и везде, где есть подобное векторное поле.
Так они и не работают, лишние и искажённые...
Преобразования Лоренца, используемое в физике, не фантазия и не прихоть злонамеренных идеалистов, а результат анализа групповой структуры наблюдаемых физических законов, в частности, симметрии принципа относительности, ковариантности уравнений Максвелла относительно этих преобразований и связи через теорему Нёттер с законом сохранения движения центра масс и многих других. С математической точки зрения любое преобразование Лоренца (это не одно, а целое семейство преобразований) должно быть линейным, сохранять индефинитное скалярное произведение, и образовывать группу, иначе при его использовании в физике "поплывут" наблюдаемые симметрии и законы сохранения. Это значит, что любое альтернативное представление или новый вариант этих преобразований должен быть не только более понятным или удобным для решения простых задач, а в первую очередь являться преобразованием Лоренца.
Подозреваю, что именно эти соображения кажутся автору тем "многим", что "лишнее специально запутано", но без этого формула остаётся лишь формулой без смысла и контекста.
Увы, предлагаемый в записке вариант не является преобразованием Лоренца, поскольку включает в себя жесткую связь t' = t, которая тут же приводит к нарушению одного из самых понятных свойств этого преобразования -- симметрии принципа относительности: переход из системы A в систему B, движущюся относительно A со скоростью v, обратен переходу из системы B в систему A, движущуюся со скоростью -v. Математически это означает, что L(v) L(-v) = I, где L -- преобразование Лоренца, а I -- тождественное преобразование. Можно поупражняться в несложной алгебе, чтобы убедиться в этом. После этого о том, что оно не сохраняет какие-то там индефинитные метрики или разрущает симметрию в уравнениях Максвелла можно не говорить.
Я бы не стал писать этот комментарий и ставить минус, если бы не воинственность статьи и, в частности, пассаж о необходимости копаться в "сути" и бороться с "болезнью (теорией относительности)". Бороться надо с ощущением, что сложное -- глупо, а простое -- верно, потому что понятно. Правда, оно того стоит -- пройти сквозь теорию групп и тензорное исчисление, чтобы увидеть как пребразования Лоренца приобретают простое симметричное представление через быстроту, а два десятка уравнений Максвелла сжимаются до двух уравнений в четырёхмерной ковариантной форме и симметричную форму законов преобразований компонент электрического и магнитного полей, измеряемых относительно различных инерциальных систем отсчёта. Справедливость последних можно проверить в школьной лаборатории!
Верное преобразование Лоренца нужно не для определения времени жизни мюона, а для того, например, чтобы получить из уравнений Максвелла наблюдаемую силу Лоренца при движении относительно заряда. И чтобы уравнения при этом не поломались. Бог с ними, с мюонами, а вот электромотор или генератор, это не просто ощущения, а вполне себе технология. И преобразования Лоренца позволяют легко и точно получить любой результат в теории электромагнитного поля.
Любопытно, что поведение свободной границы фазового перехода (тающего льда) в иных условиях может быть не просто негладким, а фрактальным -- состоящим сплошь из неустойчиво развивающихся сингулярностей и не имеющим выделенного характерного размера. Я имею в виду поверхность тающего сугроба под действием солнечного излучения. В этом случае существенную роль играет многократное переотражение света от вытаивающих ледяных граней. Поверхность снега при этом развивается подобно тому, как в компьютерной игре Арканоид летающий шарик выбивает кирпичики. В этой игре переотражения шарика от кирпичиков приводит к тому, что гладкая граница становится неустойчивой.
Прекрасно и неожиданно даже для прикладного математика со стажем! За наглядные анимации -- отдельное спасибо!
Мне кажется, для математики здесь не хватает стандартного алгебраического или векторного инструментария, но постановка задачи не лишена математического смысла.
По существу, автор поставил задачу разбиения элемента очень примитивной алгебраической структуры (множество направлений, замкнутое относительно неассоциативной, некоммутативной бинарной операции "сложения", дополненное нейтральным элементом для, этой операции, не являющимся направлением ( например,
), и позволяющее решить уравнение вида
. Такие структуры относятся к квазигруппам или, точнее, к лупам). Приведенная таблица может быть преобразована в диаграмму Юнга для разбиений. В принципе, можно попробовать построить изоморфизм с корнями из единицы (комплексными точками на окружности) и развить эту тему.
Чисто математически всë это не лишено смысла. А как занимательная алгебра -- даже интересно. Но на счёт практики -- не знаю...
А что, Haskell? Если продолжать аналогию с осями, то Haskell даëт понимание того, что оси могут быть какими угодно, хоть криволинейными, но это просто базис в линейном пространстве :)
Начинать с этого обучение точно не стоит, но это не что-то принципиально инопланетное. Оси и оси...
Это не совсем так. Можно написать полностью функциональный код, превратив итеративный процесс в цикл. При этом он сохранит чистоту, прозрачность по ссылкам и даже денотационную и аксиоматическую семантику. Собственно, это и делают трансляторы PureScript, Elm, и даже GHC. Рекурсия необходима, если в языке нет иных способов организации цикла, или если задача не является примитивно-рекурсивной. Во всех остальных случаях функциональность и рекурсия помогают друг другу, но не являются необходимыми.
Вы меня смутили тем, что в Python нет оптимизиции хвостовой рекурсии. Оказалось, что, действительно, нет, но с помощью декораторов можно написать рекурсивную функцию, а она будет переписана в цикл. Непонятно только зачем писать рекурсию там, где есть циклы… а если задача принципиально рекурсивна (использует рекурсивные типы), то хвостовая рекурсия не сделает жизнь проще.
Мне кажется, вам стоит рассказывать именно о непростых примерах, даже не обязательно полезных, но существенно более сложных чем факториал и числа Фибоначчи. Если в вашем арсенале они есть, делитесь!
Автор просил конструктивной критики, и я постараюсь быть конструктивным. Будучи апологетом и популяризатором функционального подхода, я вижу, что статьи в которых ФП подаëтся, как "ещё один способ решить задачу" вызывают у читателей раздражение. Для того, чтобы убедить в эффективности функционального мышления и нужны примеры, в которых сложное остаётся сложным, но становится управляемым, доказуемым, гибким, расширяемым, универсальным, теоретически согласованным и так далее. Простые примеры, которые становятся сложнее от использования функциональной парадигмы не работают. Ту же композицию функций (базовое свойство, делающее функции моноидом, позволяющее делать то, что называется fusion, имеющее мощную теоретическую основу) лучше демонстрировать не на примере арифметических вычислений, а на примере бизнес-логики хитрой игры, транслятора DSL или принимающего решения искусственного интеллекта, где выделение функционального ядра, действительно позволяет увидеть что использование чистых функций даëт какие-то преимущества перед иными способами организации кода. На простых примерах использование композиции в не предназначенном для этого языке (без макросов и метапрограммирования, без легковесного каррирования, статической типизации, data-driven подхода и тому подобных инструментов) превращается во вкусовщину и аскезу и вызывает у новичков, а тем более, у профи, недоумение. Функциональное программирование в Python — это функции высших порядков, замыкания, оптимизация хвостовой рекурсии и комбинаторы обработки коллекций. Всë это позволяет написать и лямбда исчисление, и функторы и комонады и линзы… Но они не нужны в Python, они не облегчат жизнь программиста и не окупят потраченное на изучение этих концепций время, при том, что это классные штуки, открывающие массу возможностей, но в своей экосистеме.
Отличная работа! Возможно, вам будет интересно посмотреть на немного иную реализацию змейки, которую я писал для RosettaCode (https://rosettacode.org/wiki/Snake#Haskell). Она не консольная, на Gloss и автоматический поиск не гарантирует прохождения, но показывает некоторые приёмы создания DSL и использования линз.
А где, собственно, про доказательства? Эту бы обличительную энергию, да в нужное русло: в обзор современных методов и инструментов формальной верификации, использования зависимых типов, статического анализа…