Как стать автором
Обновить
16
0.7

https://steamclub.net

Отправить сообщение

Визуализация странных аттракторов в Plotly — это шедеврально

Время на прочтение10 мин
Количество просмотров15K
Поэзия — это очень красивый, зачастую глубокомысленный слог, которым мы не пользуемся в обыденной жизни, но так им любим наслаждаться. То же самое можно сказать и о математике. В фильме «Пи» главный герой называет математику «языком природы», а в фильме «Игры разума» главный герой говорит о ней, как об «особом виде искусства». Мы же, в обыденной жизни, можем напрочь забыть об этом.

Облик странных аттракторов необычен и притягателен даже в двумерном измерении. Plotly позволяет строить их в трех измерениях, причем он дает возможность очень легко получить именно 3D-модель, которую можно «вертеть» и сквозь которую можно «пролетать» — ощущение «прикосновения».

image

Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии31

Критический взгляд на аттрактор Лоренца

Время на прочтение6 мин
Количество просмотров50K

1. Об аттракторе Лоренца


image

Эдвард Нортон Лоренц (1917 – 2008) является основателем теории хаоса, очень популярной в науке на сегодняшний день. Он учился в колледже Дартмут штата Нью-Гемпшир США и Гарвардском университете в Кембридже. Во время Второй мировой войны служил метеорологом в авиационном корпусе армии США, потом до конца своих дней работал профессором в Массачусетском технологическом институте.

В 1963 году в журнале «Journal of the Atmospheric Sciences» вышла его статья «Deterministic Nonperiodic Flow» (русский перевод: Лоренц Э. Детерминированное непериодическое течение // Странные аттракторы. — М.: Мир, 1981, с. 88-117), заложившая не только основы теории хаоса, но и изменившая представления о моделировании погодных явлений. В этой работе из системы уравнений Навье-Стокса впервые была получена нелинейная автономная система обыкновенных дифференциальных уравнений третьего порядка (динамическая система), описывающая движение воздушных потоков в плоском слое жидкости постоянной толщины при разложении скорости течения и температуры в двойные ряды Фурье с последующем усечением до первых-вторых гармоник:
Читать дальше →
Всего голосов 45: ↑41 и ↓4+37
Комментарии33

Bondic — светоотверждаемый пластик для мелкого ремонта

Время на прочтение4 мин
Количество просмотров27K
Недавно мне на тестирование попал интересный «Экспонат» — светоотверждаемый пластик — Bondic.


Вообще, материалы, затвердевающие под действием ультрафиолетового излучения известны давно и широко применяются. Наверное, самый распространенный пример – т.н. «световые пломбы», которые стоматологи закрепляют с помощью УФ-излучения. Еще пример – наращивание ногтей из специального геля и т.д.

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

Итак, заполучив коробку с устройством, и первым делом склеив пару листочков, я понял, что для проведения нормальных тестов понадобится кто-то с более корректным креплением верхних конечностей. Поэтому дальше передаю слово своему брату, имеющему большой опыт в области ручной и даже ювелирной работы.
Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии12

Визуализация хаоса: как представляют аттракторы динамических систем

Время на прочтение4 мин
Количество просмотров24K

(с)

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

Еще известен афоризм, приписываемый физику Ричарду Фейнману: «Если вы ученый, квантовый физик, и не можете в двух словах объяснить пятилетнему ребенку, чем вы занимаетесь, — вы шарлатан».

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

Сложные непериодические режимы поведения динамических систем можно описать непериодическими траекториями — так называемыми странными аттракторами, имеющими фрактальную структуру. Сегодня покажем, как визуализируют поведение странных и некоторых других аттракторов.
Всего голосов 39: ↑39 и ↓0+39
Комментарии5

Самый недооцененный язык в мире

Время на прочтение5 мин
Количество просмотров8.6K
JavaScript logo
JavaScript, также известный как Mocha, или LiveScript, или JScript или ECMAScript один из самых популярных языков программирования. Фактически каждый персональный компьютер имеет его интерпретатор и активно им пользуется. JavaScript всецело обязан своей популярностью тому, что он стал основным скриптовым языком для веба.

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

Читать дальше →
Всего голосов 101: ↑95 и ↓6+89
Комментарии144

Просто о Хиндли-Милнере

Время на прочтение5 мин
Количество просмотров20K

Введение


Robert MilnerЕсли вы когда-нибудь интересовались не слишком популярными языками, то должно быть слышали о «Хиндли-Милнере». Этот алгоритм вывода типов используются в F# и Haskell и OCaml, как и в их предшественнике ML. Некоторые исследователи даже пытаются использовать ХМ для оптимизации динамических языков вроде Ruby, JavaScript и Clojure.

И не смотря на его распространенность, до сих пор не было простого и понятного объяснения, что же это такое. Как же эта магия работает? Всегда ли выводимые типы будут верными? Или чем Хиндли-Милнер лучше, скажем, Java? И пока те, кто действительно знает что такое ХМ будут восстанавливаться от очередного умственного перенапряжения, мы попробуем разобраться в этом сами.
Читать дальше →
Всего голосов 65: ↑62 и ↓3+59
Комментарии12

Монады с точки зрения теории категорий

Время на прочтение9 мин
Количество просмотров35K

Введение

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

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

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

Содержание

  1. Категория
  2. Функтор
  3. Естественное преобразование
  4. Монада
  5. Монады исключения и состояния
  6. Монады в программировании
  7. Ссылки
Читать дальше →
Всего голосов 126: ↑105 и ↓21+84
Комментарии151

Оценка количества простых циклов на графе

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров8.2K

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

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

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии15

Машина Тьюринга, как модель автоматных программ

Время на прочтение18 мин
Количество просмотров24K

Машина Тьюринга, как модель автоматных программ


1. Введение


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

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

За основу обсуждения проблем автоматного программирования возьмем недавнюю лекцию Шалыто А.А. [1] и его «программные» статьи к определению парадигмы автоматного программирования [2, 3].
Читать дальше →
Всего голосов 4: ↑3 и ↓1+4
Комментарии10

«Уходя гасите всех» или «Шаверму из Шамблера, пожалуйста»

Время на прочтение4 мин
Количество просмотров11K

Все мы знаем замечательную игру Quake, начавшую эру 3d шутеров с полностью трёхмерным миром. Многие из нас, конечно, больше знакомы с внутренностями — превосходным игровым кодом этой игры, чем с ней самой. За это большое спасибо Джону Кармаку, открывшему исходный код движка idTech 2. Благодаря лицензии GPL, прекрасному качеству архитектуры и кода движка, появилось множество открытых игр, таких как UrbanTerror, OpenArena, The Dark Mod и других. Скорее всего, многие из нас что-то где-то подпиливали в этих или других играх, основанных на открытых движках idTech №. Мне лично в какой-то момент довелось немножко коснуться ныне забытого Warsow (qfusion, базируется на idTech 2).

Но Quake — это не только код на C, это ещё и уровни. Как это ни удивительно, но последние лет 10 они выходят с завидной регулярностью. Да ещё какие уровни!

Читать далее
Всего голосов 25: ↑25 и ↓0+25
Комментарии19

Nanopass или как я писал компилятор этой осенью

Время на прочтение8 мин
Количество просмотров5.5K

image


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

Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии29

Обзор градиентных методов в задачах математической оптимизации

Время на прочтение11 мин
Количество просмотров104K

Предисловие


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



Читать дальше →
Всего голосов 76: ↑76 и ↓0+76
Комментарии26

Введение в процедурную анимацию: инверсная кинематика

Время на прочтение16 мин
Количество просмотров33K

Часть 4. Введение в градиентный спуск


Эта часть представляет собой теоретическое введение в инверсную кинематику и содержит программное решение, основанное на градиентном спуске (gradient descent). Эта статья не будет всеобъемлющим руководством по этой теме, это всего лишь общее введение. В следующей части мы покажем настоящую реализацию этого алгоритма на C# в Unity.

Серия состоит из следующих частей (части 1-3 представлены в предыдущем посте):

Читать дальше →
Всего голосов 54: ↑54 и ↓0+54
Комментарии5

Применяем градиентный спуск на реальной Земле

Время на прочтение4 мин
Количество просмотров12K
Обычная аналогия для объяснения градиентного спуска такая: человек застрял в горах во время сильного тумана и должен спуститься вниз. Самый логичный способ — осмотреть поверхность вокруг и медленно проложить путь, следуя вниз по склону.

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

Но вот важный вопрос: насколько хорошо градиентный спуск выполняется на реальной Земле?
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии9

Опыт работы с советским газоразрядным дисплеем ГИП-10000 (ИМГ-1-02)

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров28K

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

В статье пойдёт речь про ГИП-10000. Это газоразрядная матрица постоянного тока с внешней адресацией разрешением 100х100 точек. Применялась она в таких изделиях как Электроника МС6205 и ИМГ-1. Я расскажу про то, как запустил на ней Bad Apple!! и Doom.

Читать далее
Всего голосов 240: ↑240 и ↓0+240
Комментарии69

Пишем Lisp-интерпретатор на Java

Время на прочтение7 мин
Количество просмотров13K


Некоторое время назад мне захотелось написать свой небольшой интерпретируемый скриптовый язык, просто ради фана, не ставя перед собой каких-либо серьезных задач. Я тогда активно читал известную волшебную книгу SICP (Структура и интерпретация компьютерных программ), и мне захотелось реализовать описываемые в ней абстракции — функции как объекты первого класса, замыкания, макросы и т.п. Параллельно я интересовался языком Haskell, и решил совместить приятное с приятным, и написать интерпретатор языка на нем. В моем языке должна была быть строгая семантика с вызовом по значению и мутабельные переменные. Получившийся язык Lisp-семейства я в своем локальном окружении связал с именем Liscript, полная реализация которого уместилась в примерно 250 строк, включая парсер, ядро и консольный/файловый ввод-вывод. Этого более чем хватало, чтобы ради интереса решать любые задачки, какими обычно мучают студентов, которых угораздило изучать Lisp по учебной программе.

По прошествии времени мне захотелось сделать к интерпретатору кроссплатформенный GUI-интерфейс с перспективой портирования на Android, поэтому я реализовал второй вариант интерпретатора на Java, внешний вид которого вы можете видеть на картинке выше. Да, он поддерживает графический вывод и вообще interoperability с Java, и этот Тетрис написан на Liscript, видна часть его кода. Кому интересны подробности — прошу под кат.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии13

Почему я остаюсь с Лиспом (и вам тоже стоит)

Время на прочтение15 мин
Количество просмотров15K

Зрелый язык может использоваться немногими. Но он остаётся частью моей кодовой базы.

Как давнего пользователя (и активного сторонника) Scheme/Common Lisp/Racket, меня иногда спрашивают, почему я предпочитаю их. К счастью, я всегда возглавлял собственные инженерные организации, поэтому мне никогда не приходилось оправдывать это перед руководством. Но есть еще более важная аудитория - мои собственные коллеги-инженеры, которые никогда не имели удовольствия использовать эти языки. Хотя им не требуются оправдания, они все же спрашивают из интеллектуального любопытства, а иногда и из-за удивления, почему я не схожу с ума по поводу следующей крутой функции, которая будет в этом месяце добавлена в Python или Scala, или что бы там ни было в их вкусе.

Читать далее
Всего голосов 32: ↑24 и ↓8+24
Комментарии136

Велосипед, бегущие огни и ассемблер – что их объединяет?

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров4.9K

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

И что же вышло?
Всего голосов 22: ↑22 и ↓0+22
Комментарии10

Простейшая нейросеть: еще раз и подробнее

Время на прочтение10 мин
Количество просмотров59K

Машинное обучение это незаменимый инструмент для решения задач, которые легко решаются людьми, но не классическими программами. Ребенок легко поймет, что перед ним буква А, а не Д, однако программы без помощи машинного обучения справляются с этим весьма средне. И едва ли вообще справляются при минимальных помехах. Нейросети же уже сейчас решают многие задачи (включая эту) намного лучше людей. Их способность обучаться на примерах и выдавать верный результат поистине очаровывает, однако за ней лежит простая математика. Рассмотрим это на примере простого перцептрона.
Данная статья представляет собой пересказ-конспект первой части книги Тарика Рашида "Создай свою нейросеть" для тех, кто начал изучать тему, не понял отдельные детали или с трудом охватывает общую картину.

Читать далее
Всего голосов 84: ↑83 и ↓1+95
Комментарии27

Математика верстальщику не нужна, или Временные функции и траектории для покадровых 2D анимаций на сайтах

Время на прочтение15 мин
Количество просмотров15K


«Математика верстальщику не нужна!», — говорили они. «Арифметики за 2 класс школы хватит!», – говорили они. «Верстальщик – не программист, так что нечего себе голову забивать точными науками!», — чего только не услышишь на просторах интернета на тему нужности тех или иных знаний при разработке сайтов. И на самом деле в большинстве случаев человеку, который делает интерфейсы, и правда хватает умения складывать числа. Что-то более сложное встречается редко и обычно уже есть готовый алгоритм где-то в недрах NPM. Но сайты – понятие растяжимое, и иногда все же нужно включить голову, и разобраться в каком-то вопросе. И один из таких вопросов – это траектории в 2D анимациях.


Наблюдая за людьми, которые осваивают JS, и, в частности, покадровые анимации в вебе, я заметил, что у многих возникают сложности, когда нужно сделать движение какого-то объекта на странице по определенной траектории. И, если эта траектория не нарисована заранее заботливым дизайнером в виде path в SVG-картинке, а формулируется какими-то общими словами и ссылками на референсы из сети, или, что еще хуже, должна генерироваться на лету, то задача приводит их в полный ступор. По всей видимости все упирается в тотальное непонимание того, как получить кривую той или иной формы в рамках JS. Об этом мы сегодня и поговорим в формате своеобразной лекции о временных функциях для анимаций в самых разных их проявлениях.


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

Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии11

Информация

В рейтинге
1 781-й
Зарегистрирован
Активность

Специализация

Project Director, Software Architect
От 700 000 $
Project management
Building a team
Startup management
Development management