Pull to refresh
40
0
Send message

Автоматическое дифференцирование «на пальцах»

Reading time6 min
Views34K
В компании Intel разрабатывают не только ПО для «внешних» потребителей — пишутся и программы, которые используются только внутри Intel. Среди них довольно много средств для численного моделирования различных физических процессов, протекающих при изготовлении процессоров — ведь именно последние и являются основной продукцией Интела. В этих программах, конечно, широко используются различные методы вычислительной математики и физики.
Вот некоторое время назад мне понадобилось программно решать одно уравнение методом Ньютона. Казалось бы, все просто, но для этого надо уметь вычислять производную левой части уравнения. Эта левая часть у меня была довольно сложная — даже просто вычисление ее значений в программе было разбросано по нескольким функциям, — и перспектива вычислять производную на бумажке меня не радовала. Перспектива воспользоваться каким-нибудь пакетом символьных вычислений меня радовала не больше — перенабирать все формулы, содержащие к тому же несколько частных случаев, далеко не очень приятно. Вариант вычислять производную численно как разность значений функции в двух соседних точках, деленную на соответствующее приращение независимой переменной, чреват потерей точности и вообще необходимостью подбирать подходящее приращение этой переменной.
Подумав некоторое время, я применил следующий подход. Потом я узнал, что он называется «автоматические дифференцирование», для него существует довольно обширная литература на английском, и ряд библиотек — но на русском я нашел только некоторые научные статьи про применение этого метода, и пост на Хабрахабре, в котором все рассказывается через смесь дуальных и комплексных чисел, и понять который с ходу, на мой взгляд, тяжело. С другой стороны, для понимания и практического применения автоматического дифференцирования не нужны никакие дуальные числа, и этот подход я тут и изложу.
Читать дальше →
Total votes 51: ↑50 and ↓1+49
Comments61

Как подключить сторонний браузер в приложении на C#

Reading time3 min
Views99K
image

В определенный момент мне стало некомфортно использовать стандартный контрол WebBrowser, предлагаемый Visual Studio.
Причин было несколько:
1. Использовался IE-движок, что само по себе уже сильный аргумент.
2. Кривая работа с JS.
3. Отсутствие масштабирования.
4. Если запустить на машине, где стоит IE6, то все его «достоинства» переносятся на приложение.

В итоге был начат поиск альтернативных решений.
Было рассмотрено 2 SDK. xulrunner(Mozilla) и Awesomium(Chrome)

Подключение обоих происходит примерно одинаково, но на всякий случай опишу оба.
Читать дальше →
Total votes 77: ↑67 and ↓10+57
Comments52

Фильтр Калмана

Reading time10 min
Views431K


В интернете, в том числе и на хабре, можно найти много информации про фильтр Калмана. Но тяжело найти легкоперевариваемый вывод самих формул. Без вывода вся эта наука воспринимается как некое шаманство, формулы выглядят как безликий набор символов, а главное, многие простые утверждения, лежащие на поверхности теории, оказываются за пределами понимания. Целью этой статьи будет рассказать об этом фильтре на как можно более доступном языке.
Фильтр Калмана — это мощнейший инструмент фильтрации данных. Основной его принцип состоит в том, что при фильтрации используется информация о физике самого явления. Скажем, если вы фильтруете данные со спидометра машины, то инерционность машины дает вам право воспринимать слишком быстрые скачки скорости как ошибку измерения. Фильтр Калмана интересен тем, что в каком-то смысле, это самый лучший фильтр. Подробнее обсудим ниже, что конкретно означают слова «самый лучший». В конце статьи я покажу, что во многих случаях формулы можно до такой степени упростить, что от них почти ничего и не останется.
Читать дальше →
Total votes 178: ↑173 and ↓5+168
Comments84

Игры для программистов

Reading time3 min
Views134K
Должен признаться, что я плохой программист. Я не люблю настраивать Maven и писать конфигурации для Spring Framework. Я не знаю в деталях, как работает JVM (да и в общих чертах представляю это себе довольно смутно). Я плохо понимаю паттерны проектирования, а любая новая технология вводит меня в уныние. И тем не менее, я люблю программировать.

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

Минуточку внимания.

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

Так о чём же статья?
Total votes 120: ↑102 and ↓18+84
Comments89

DipTrace и ГОСТ. Библиотека УГО

Reading time6 min
Views168K
Что-то на Хабре совсем нет постов о таком замечательном инструменте как DipTrace. Думаю необходимо исправлять эту ситуацию.



DipTrace — это мощная система проектирования принципиальных схем и печатных плат (EDA — система).
Внимание! Под катом трафик!
Читать дальше →
Total votes 53: ↑50 and ↓3+47
Comments89

Обзор инструментов для сжатия изображений

Reading time15 min
Views368K


Для ускорения сайта, некоторые рекомендуют проанализировать каждую страницу: оптимизировать запросы HTTP и любые перенаправления, сжать скрипты и стили и т. д. Все это без сомнения необходимо, но в первую очередь важно рассмотреть основы. В частности, вы уверены, что любая графика, которую вы используете на создаваемых сайтах, полностью оптимизирована для Интернета?
Читать дальше →
Total votes 73: ↑66 and ↓7+59
Comments47

Поиск часто встречающихся элементов в массиве

Reading time5 min
Views120K
Задача: в массиве длиной N найти элемент, который повторяется больше N/2 раз.

Казалось бы, чего тут думать? Возьмём Dictionary<значение элемента, число появлений>, за один проход по массиву сосчитаем появления каждого элемента, потом выберем из словаря искомый элемент. Решение за O(N), куда может быть ещё быстрее?

Есть один нюанс: для словаря нам потребуется O(N) дополнительной памяти — в несколько раз больше размера исходного массива, и это при реализации словаря хоть хэш-таблицей, хоть деревом. Что будем делать, если наша цель — обработка сигнала неким устройством с маленькой памятью? Массив — замеры уровня сигнала, из которых один — «настоящий» передаваемый уровень, а остальные — шум и помехи. Неужели придётся для определения «настоящего» уровня возиться с хэш-таблицами и деревьями?

К счастью, нет: достаточно O(1) дополнительной памяти, и по-прежнему одного прохода по массиву.
Читать дальше →
Total votes 105: ↑98 and ↓7+91
Comments38

Сражение при Asakai: как EVE Online справляется с гигантскими битвами

Reading time3 min
Views103K
Битва у Asakai стала второй по количеству столкнувшихся кораблей в истории EVE Online (об этом прекрасно написал комрад madmaxcorp, там же вы можете посмотреть без преувеличения галактической красоты видео очевидца). История сражения интересна сама по себе (человеческая ошибка), но нас традиционно больше интересует что же было с серверами игры во время этой сумасшедшей битвы, как CCP (создатель EVE Online) удается справляться с такими нагрузками?

«Наша команда поддержки (игровые мастера, GMs) следит за гигантскими битвами, подобными этим», — говорит один из разработчиков. «У нас есть веб-страница со статусом кластера, на которой появляются большие красные цифры в случае перегрузки нод в сражениях. Так что довольно легко видеть что происходит». Более интересно то, что стоит за этими цифрами.

Читать дальше →
Total votes 137: ↑129 and ↓8+121
Comments166

Альтернатива Dropbox от BitTorrent

Reading time2 min
Views75K

BitTorrent Inc. анонсировало новое приложение позволяющее пользователям синхронизировать папки посредством bittorent протокола с шифрованием. Программа бесплатна, не имеет ограничений на объемы хранилища и может использоваться как резервное хранилище или общая папка. BitTorrent Sync будет особенно полезна для тех групп пользователей, которым необходимо обмениваться через интернет большими файлами.
Читать дальше →
Total votes 102: ↑93 and ↓9+84
Comments150

Просмотр изображений OpenCV во время отладки C++ кода в Visual Studio

Reading time10 min
Views19K


Если вы пишете код для обработки изображений на С++, вы наверняка используете замечательную библиотеку OpenCV. Уверен, вам не раз хотелось посмотреть на изображения в процессе отладки вашего кода. Для этого можно использовать такие удобные функции как imshow или imwrite. Однако это требует модификации исходного кода, а любая современная IDE во время отладки позволяет смотреть значения переменных на лету. Вот было бы здорово так же смотреть изображения?

Если в качестве IDE вы пользуетесь Visual Studio, то знаете, что с .NET в этом плане всё проще. Однако речь идёт про OpenCV, а это только native C++, только хардкор. В этой статье я расскажу, как всё-таки заставить Visual Studio показывать изображения прямо в процессе отладки и дам ссылку на готовое решение. А также коротко расскажу о способах кастомизации Visual Studio.
Читать дальше →
Total votes 52: ↑49 and ↓3+46
Comments6

Дерево Фенвика

Reading time3 min
Views54K
Здравствуй, Хабрахабр. Сейчас я хочу рассказать о такой структуре данных как дерево Фенвика. Впервые описанной Питером Фенвиком в 1994 году. Данная структура похожа на дерево отрезков, но проще в реализации.

Что это?


Дерево Фенвика — это структура данных, дерево на массиве, которая обладает следующими свойствами:
• позволяет вычислять значение некоторой обратимой операции F на любом отрезке [L; R] за логарифмическое время;
• позволяет изменять значение любого элемента за O(log N);
• требует памяти O(N);
Читать дальше →
Total votes 81: ↑73 and ↓8+65
Comments39

Обзор e-Learning трекеров или Век живи — век учись!

Reading time3 min
Views29K
Все чаще можно услышать про универсальных трекеров-монстров типа ThePirateBay.org, torrents.ru или упоминания трекеров музыкальной либо игровой тематики. Но помимо них давно существуют торрент-трекеры обучающей направленности, о которых мало что известно рядовому пользователю. В основном, это закрытые сообщества образованных людей с регистрацией по приглашениям, которые обмениваются обучающими материалами, будь-то электронные книги, обучающее видео, CBT (computer based trainings), аудио-книги, презентации с конференций или софт для обучения. Преобладающая часть материалов связана с ИТ-технологиями и поэтому будет особенно полезна ИТ-специалистам, от студента, изучающего Linux, PHP или C# и до гуру, который готовится к сдаче CCIE. Также присутствует материал, посвященный изучению иностранных языков, психологии, саморазвитию, соблазнению, развитию бизнес-навыков. Если ты подумываешь сдать на CCNA, MCSE, RHCE, CISSP, Network+, PMP, IELTS/TOEFL и так далее — то здесь можно найти все необходимое и даже больше. Под катом находится обзор англоязычных ресурсов обучающей направленности.
Поехали!
Total votes 74: ↑73 and ↓1+72
Comments224

Фотографируем через WIA на .NET

Reading time8 min
Views20K
imageЗадача поста — освежить информацию о работе с WIA в .NET, лежащую на просторах сети, т.к. большинство примеров безбожно устарели (они не работают), поделиться опытом с интересующимися и спросить совета у бывалых. Я думаю, совместно обсудить некоторые моменты, будет полезно для коллег, занимающихся подобными задачами. Постараюсь разжевать все моменты.

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

Сейчас в программе несколько тысяч человек и стоит задача всех их сфотографировать красиво, потому что они приносят фотографии просто ужасного качества и с разным процентом заполнения лица. Дело за малым: повесить экран, выставить свет, стул, штатив, камера, USB… и наша программа.
Под катом простой пример и рассуждения
Total votes 26: ↑25 and ↓1+24
Comments21

Литдетектив: «дождливые» идиомы в английском

Reading time4 min
Views60K
Из всех английских идиом именно «дождливые» кажутся русскому человеку полной бессмыслицей: тяжело понять на первый взгляд, отчего «у них» во время ливня с неба падают животные разной степени экзотичности и опасные для жизни предметы. It’s raining cats and dogs, it rains pitchforks and stair-rods – происхождение этих фраз туманно, как сам Альбион. И у каждой, как у достойного английского анекдота, своя изюминка.

Начнём с самого тяжёлого случая – с «cats and dogs». Британские учёные этимологи до сих пор не уверены, что это такое – удачный словесный пируэт XVIII века, описание глобального природного катаклизма или же попытка отразить в шуточно-лаконичной форме завывания бунтующей стихии.

Читать дальше →
Total votes 112: ↑96 and ↓16+80
Comments56

Введение в модулярную арифметику

Reading time6 min
Views76K
В обычной жизни мы обычно пользуемся позиционной системой счисления. В позиционной системе счисления значение каждого числового знака (цифры) в записи числа зависит от его позиции (разряда) [1]. Однако существуют и так называемые «непозиционные системы счисления», к одной из которых относится «система остаточных классов» (СОК) (или в оригинале Residue Number System (RNS)), являющаяся основой модулярной арифметики. Модулярная арифметика базируется на «Китайской теореме об остатках» [2], которая для нашего случая звучит следующим образом:
Для любой системы взаимно простых чисел p1, … pn, любое число X из диапазона [0; M), где M = p1*p2*…*pn взаимооднозначно представимо в виде вектора (a1, a2, …, an), где ai = X%pi (здесь и далее «%» — операция взятия остатка от целочисленного деления X на pi).
p1, … pn – модули системы
a1, a2, …, an – остатки (вычеты) числа по заданной системе модулей

Читать дальше →
Total votes 85: ↑80 and ↓5+75
Comments39
12 ...
9

Information

Rating
Does not participate
Registered
Activity