?

Log in

No account? Create an account

Entries by tag: math

перпетуум-мобильное
пакман
_navi_
Полдня и полночи строил математическую модель вполне реального физического объекта. Заодно начал разбираться с Maxima (как же это я её в универе пропустил? наверно потому что своего лаптопа с линуксом не было, а на винду мало кто такое ставит, если не знает).

Получил странный результат: если системой не управлять (ну то есть никак, совсем), то она превращается в вечный двигатель, притом энергия системы постоянно увеличивается. Много думал о бренности всего сущего и красоте математики.
Tags: ,

Конструктивное
пакман
_navi_

Нашёл прекрасное:

« Развитое нами доказательство основной теоремы намечает одновременно и путь, которым следует итти для того, чтобы отыскать предел применимости доказываемого положения. »
С.А. Чаплыгин, „Новый метод приближённого интегрирования дифференциальных уравнений”, 1950 г.

Tags: ,

Wolfram Research blog
жирафа
_navi_

Wolfram Research, оказывается, одновременно с выпуском Mathematica 6, открыл блог сотрудников. Рассказывают интересные вещи, довольно много постов посвящено визуализации.


Вспомнил вдруг, как я вообще познакомился с Mathematica. Примерно в 94–95 году отец дал мне пачку из 5 (?) дискет, на которых было написано Mathematica 2.2 и действующий регистрационный ключ. Дискеты ему кажется подарили на какой-то из конференции. Я в то время много писал на Basic'е (QuickBasic 4.5), увлекался рисованием всяких интересных картинок (и генерации звуков) при помощи комбинации различных математических функций. Теоретических основ я знал мало (потому как никакого углублённого изучения математики, а уж, тем более, программирования, в школе не было), всё делал методом проб и ошибок. Mathematica тогда была для меня „космолётом”*, в то время как я ещё только изобрёл и освоил колесо. Разбираться в ней было сложно, английский я тогда ещё не знал достаточно хорошо, чтобы понимать 100% и так довольно лаконичной документации. Зато есть у меня теперь подозрение, что те пять дискет что-то изменили и в итоге повлияли на мой выбор факультета (тут, конечно, есть другая замечательная история — о моём поступлении, ну да ладно).

Во время учёбы в университете я пользовался Mathematica'ой уже довольно умело. Одним из моих достижений была система автоматического решения зачётных задач по теории управления, которая пользовалась большим успехом у петергофского потока. Мы кажется даже хотели брать что-то вроде сока в форме оплаты, но были слишком поглощены процессом решения всё-поступающих задач. Это был первый семестр третьего курса (привет, Грин). Ещё неплохое применение Mathematica у меня нашла при написании лабораторной по методам вычисления: я написал и отладил программу реализующую метод Рунге-Кутта на Mathematica (при отладке активно используя визуализацию построенного решения и правильного решения, посчитанного NDSolve'ом), а потом за считанные минуты перевёл это всё вручную на C, получив безошибочную программу.

Программа для моего диплома тоже была написана на Mathematica и, в какой-то мере, может считаться шаманством. Я только недавно стал догадываться, как конкретно и почему она работает, и какие есть ограничения. К сожалению, об этом ничего не было сказано в документации к Mathematica, политика компании видимо предполагает, что пользователь должен считать символьные вычисления и упрощения математических выражений чем-то данным свыше, без оговорок о разрешимости и вычислительной сложности некоторых действий. После написания диплома я забросил Mathematica как средство дальнейшей разработки — отлаживать нетривиальные программы в ней было совершенно невозможно (по причине отсутствия строгой системы типов и неразвитой системы отладки).

Говорят, в Mathematica 6 всё изменилось. Посмотрим.


* „Космолёт” — слово, вошедшее в мой лексикон из лексикона dr_dimaka. Означает систему, чрезвычайно перегруженную излишней или непонятной функциональностью. Расширенный аналог микроскопа, которым забивают гвозди, только микроскоп этот цифровой, с возможностью делать фотографии и даже снимать видео. Типичными примерами космолёта являются библиотека UI контролов компании Infragistics**, Microsoft Office, Emacs (шучу-шучу).

** объяснить это сложно, это действительно надо видеть. Не знаю, сколько фантазии (и наркотиков) надо было разработчикам, чтобы придумать столько совершенно бесполезных вариантов изменения внешнего вида и поведения контролов. В контроле UltraButton кажется были сотни методов/свойств. В контроле UltraDataGrid были тысячи методов. Притом от порядка запуска методов иногда зависел результат, и, самое интересное, этот DataGrid всё равно не удовлетворял нашим требованиям. С той же замечательной поры в моём лексиконе есть слова „ультрахрень” и „турбодрянь”.


бьёмся головой об стены, пробивая путь
пакман
_navi_
Очень приятно, оказывается, решать какую-то сложную задачу, придумывая все возможные честные и нечестные подходы к решению, и упереться в доказательство того, что задача в такой постановке решения не имеет (или, ещё лучше, эквивалентна NP-полной). А приятно, собственно, то что в процессе мозг „разгоняется”, создаётся какая-то своя терминология (за неимением ничего лучшего), а после, увидев чужое доказательство „невозможности”, оказывается, что и ходил-то в общем-то рядом, и даже терминологию и промежуточные цели выбрал правильные.

Ещё приятнее обнаружить, что кто-то тот же самый оказался ещё умнее и придумал как переформулировать задачу, чтобы с ней всё же можно было справиться.
Tags: , ,

математическое
пакман
_navi_
картинкоCollapse )
Tags:

Длинный день
пакман
_navi_

Пятница была у меня длинным днём, не столько по продолжительности, сколько по насыщенности событиями. Четверг конечно был длиннее, в 7:15 мы выехали на работу и вернулись только в 20:30, но прошёл он как-то легче и незаметнее.  Пятницу мы провели в другом Сановском кампусе в Менло Парк (указатель A немного не точный, кампус прямо над ним), который Сан строил сам (в отличие от купленного и перестроенного в Санта Кларе). По сравнению с кампусом в Санта Кларе, во внутреннем дворе этого ощущается некоторая теснота.

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

А вечером у меня было собеседование с Грегом Боллеллой, "отцом" Real-Time Java. На последней конференции JavaOne он предоставил разработчикам большую развлекуху: он со своей группой построил трек для машинок, которые управляются программно (управление — напряжение на электродвигателе), и каждый желающий мог написать программу и посмотреть, как она ведёт себя на треке на JavaOne. Сложность управления состоит в следующем: на трассе расположены датчики, которые срабатывают в том случае, если машинка находится прямо над датчиком, но соединены эти датчики так, что есть информация только о том, находится ли машинка над каким-то датчиком, но нет информации над каким. Цель управления: провести машинку по треку за минимальное время. Но если скорость перед поворотом будет слишком большой, то машинка вылетит с трассы, поэтому надо разумно ускоряться и тормозить. Так как нет информации, над каким из датчиков находится машинка, надо постоянно отслеживать информацию о замыканиях датчиков: так как известно изначальное положение машинки (перед первым датчиком), можно в дальнейшем отслеживать положение, в том случае если мы не пропускаем датчики из-за "тормозов Java": время замыкания датчика довольно короткое, меньше 5 миллисекунд, и зависит от скорости. Так как в случае задержки в выполнении (опросе датчика) программа теряет информацию о точном местоположении и управление начинает базироваться на неправильной информации о положении машинки, машинка очень быстро вылетает с трека, тем самым это hard real-time задача.

Для решения подобного типа задач и была разработана Real-Time Specification for Java (RTSJ). В ней добавлены два новых типа потоков: RealtimeThread и NoHeapRealtimeThread. Первый может использовать heap, но для него используется специальный Garbage collector с предсказуемым временем исполнения, этот тип потоков подходит для soft real-time задач. Второй тип, как нетрудно догадаться из названия, не может использовать heap (доступна только immortal и scoped память), зато он очень хорошо подходит для hard real-time задач. В случае slot-car race, для опроса датчиков нужно было использовать NoHeapRealtimeThread, который при правильной настройке разрешения таймера (кажется на JavaOne использовалось разрешение 1ms) не пропустит замыкание датчика. На самом деле в построении управления конкретно для этой задачи есть ещё довольно много хитростей: например, имеет смысл замерять время замыкания датчика (сколько циклов замкнут), чтобы определить текущую скорость, и потом, вместо простого ожидания следующего сигнала датчика для определения позиции пробовать интерполировать текущее положение исходя из скорости, длины отрезка и его "кривизны"; так как на двигатель можно подавать и отрицательное напряжение, можно тогда начинать притормаживать перед поворотами заранее, а не непосредственно после датчика, а после поворота увеличивать скорость. Конечно, такое очень сложно сделать, если нет возможности экспериментировать непосредственно с треком.

Так вот, возвращаясь к собеседованию. В Сане действует программа по менторству инженеров более опытными инженерами. Проводится она раз в год для new hires (менее 2 лет в компании) и, кажется, раз в полгода для established staff. Чтобы в неё попасть, надо подготовить рекомендации менеджеров, и, по крайней мере одного директора, заполнить опросник, в котором ты отражаешь что ты хочешь от программы. Так как "количество мест" ограничено, надо получить хорошие рекомендации и очень хорошо сформулировать цели которые ты хочешь достичь в результате участия в этой программе. Тут мне повезло дважды: мой менеджер является директором отделения и вдобавок, так как я работаю напрямую с разработчиком в Техасе и много с ним общаюсь, он помог мне переформулировать мне некоторые мои корявые фразы на английском в опроснике. Ну и третий раз мне повезло, когда меня в эту программу приняли. Следующим шагом в этой программе является составление списка из 15 (!) менторов, которых бы ты хотел для работы с тобой, и причин по которым ты каждого из этих менторов выбрал. Работать будет, конечно, только один, а такой большой список нужен чтобы избежать коллизий с другими участниками и на случай, если ментор не захочет по каким-то причинам работать с тобой в течение целого года. Составление этого списка и формулирование причин оказалось действительно сложной задачей: надо произвести полноценный research, кто есть кто, среди предлагаемых нескольких сот менторов, выбрать 15 и сформулировать почему ты их выбрал. Можно, кстати было выбрать Гослинга или, даже, Уита Диффи (привет, _yashma_ :-) ).

Собеседование с Грегом (который был первым в моём списке) прошло удачно, так что в течение года начиная с сентября он будет у меня ментором. Что это будет из себя представлять я когда-нибудь напишу. Кроме slot-car трэка Грег показал мне ещё несколько демонстрационных агрегатов в Сановском Executive Briefing Center (это то место, куда водят внешних заказчиков, чтобы импресснуть их инновациями в Сане). Один из них — инвертированный маятник (классическая задача в теории управления, мы её кажется на втором курсе с Веремеем даже рассматривали): металлическая трубка-маятник, точка подвеса которой (снизу) находится на площадке которая может двигаться горизонтально в плоскости вращения трубки. Программа, написанная на Real-time Java стабилизирует маятник в верхнем (неустойчивом) положении при помощи управления движением площадки. Трубку можно щёлкнуть пальцем, выводя из верхнего положения, и площадка тут же метнётся в сторону движения маятника, чтобы стабилизировать его. Правда, так как скорость движения площадки и доступное для движения место ограничены, область устойчивости тоже ограничена. Параллельно с процессом управления, на той же виртуальной Java машине запущено проигрывание видеоролика, которое даже не тормозит. В приложении ещё есть специальная кнопка, при нажатии на которую программа начинает генерировать кучу мусора в heap'е и запускает после garbage collector. При этом видео начинает ощутимо тормозить, а вот процесс управления работает как ни бывало с тем же разрешением в 5ms. Вобщем, довольно доходчиво можно на таком примере объяснять, что такое real-time приложения. Есть ощущение, что давно уже пора на нашем факультете про всё это рассказывать в обязательной программе. А то как-то далеки мы от жизни, несмотря на то что математика у нас "прикладная" и процессы у нас "управления".


опечатка
пакман
_navi_
Ха-ха, замечательная опечатка в названии патента: System and method for performing gloating point operations involving extended exponents
Tags: , , ,

"Блог" настоящего человека
пакман
_navi_
Случайно, в одном из этапов погони за собственной эффективностью, вспомнил что в интернете есть архив технических записей, путевых заметок, наблюдений Дейкстры (см. Edsger Wybe Dijkstra). Чем-то это похоже на блог в том состоянии, которое мы имеем сейчас: Дейкстра рассылал копии своих заметок друзьям и коллегам, тем самым, видимо, получая фидбэк к своим состояниям. Очень продуманные, полезные заметки.

Одним словом содержимое этого архива можно описать так: «Восхитительно!».
Я, даже будучи в очень сонном состоянии, просто зачитываюсь его заметками про сложность традиционной нотации в математике (да, об этом я думал ещё в школе: слишком много лишних символов и нерегулярных конструкций; знал бы я чему меня научат в университете!), о том что детей (сознание которых ещё довольно структурированно) больше учат бороться с формами записи, а не понимать структуру материала. И, что очень приятно, тексты Дейкстры очень хорошо структурированы, и не содержат “воды”.

Всем друзьям-математикам — обязательно к прочтению!
Начать стоит наверно с EWD950a. «On notation» и EWD1300. «The notational conventions I adopted, and why».

про нестандартные применения планшета
пакман
_navi_
25,83 КБ
Попросили не так давно решить диффур. За неимением сканера, вместо листа бумаги решил писать на планшете (решение надо было как-то передать). С некоторой сноровкой это, оказывается, вполне удобно.
Tags: , ,

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

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

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