понедельник, 27 декабря 2010 г.

Архитектура CPU

Нашел парочку объемистых текстов по архитектуре процессоров: на iXBT и на CyberGuru. Букв очень много, все расписано очень подробно.

понедельник, 20 декабря 2010 г.

И снова о GNU Plot

В дополнение к "Not so frequently asked questions about GNU Plot" (он же Kawana's page) нашел интересный файлик с кучей разных фишек. Вот это запомнилось оттуда:
plot 'junk.dat' [0.5:10][300:480],
т.е. можно указывать промежутки по х и у сразу после имени файла с данными. Вообще, настроек в GNUPlot столько, что впору считать его отдельной ОС со своим bash-ем).

Даже IBM разместила на своем сайте руководство Visualize your data with GNUPlot!

Гугл-сайт какого-то АнтиАламаса: вот.

понедельник, 13 декабря 2010 г.

GNUPlot - скрипты и несколько графиков в файле

ГНУ_Плот оказался не так и убог, как я раньше про него думал. Видимо, в ближайшее время буду его использовать.

1. Скрипты. Последовательность команд, которые должен выполнить GNUPlot записываем в файл (например) graph.p, а затем вызываем его командой load "graph.p".
2. Удобно записывать несколько сеточных функций, дискретизованных на одной сетке:
в dat-файле записываем в первой колонке сетку, потом колонки со значениями ординат -
# X Y1 Y2 Y3
0 2.3 -0.5 1.6
1 2.5 -0.3 1.9
......
потом рисуем это с помощью директивы using - см Not so Frequaently Asked Questions on GNUPlot.

Можно записать несколько таких блоков в один файл, разделенных двумя пустыми строками (см. там же).

вторник, 30 ноября 2010 г.

Плюсы и минусы в Excel

Если попробовать в ячейку Excel - вской таблицы вставить знак '+' или '-', программа подумает, что это начало формулы и будет требовать математическое выражение. Чтоб просто вставить этот самый плюс или минус, надо просто поставить перед ним одинарную кавычку ' - это знак комментария в Excel. Сама кавычка отображаться не будет.

среда, 3 ноября 2010 г.

Ремонт обуви своими кривыми руками

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

PS Не в жабе дело, просто хочется самому сделать...

вторник, 2 ноября 2010 г.

МКЭ и генерация сеток.

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

А вот тут кто-то попытался объять необьятное - изложить все аспекты проблемы генерации сеток.

понедельник, 1 ноября 2010 г.

Microsoft Equation Hotkeys

Что, фанаты TeX-а уже готовятся запустить в меня помидорами? Ну что, поделаешь, приходится иногда формулы в Ворде набирать) Нашел список горячих клавишей для MS Equation, он оказался неожиданно большим. Думаю, скорость набора должна вырасти в разы.
Итак - Microsoft Equation Hotkeys.

воскресенье, 31 октября 2010 г.

Искусство отбрасывания

Это очень важно для математика - уметь выбрасывать члены из сложного уравнения и убедительно объяснять, почему это можно было сделать.

Вот, на днях показали фокус. Пусть есть две функции a(t) и b(t) и известно, что
a(t)+b(t)=1 при любом t. При этом b(t) может меняться от 0 до 0.01, а a(t) от 0.99 до 1.

Так вот. Функцию a(t) можно считать константой (!!), так как она меняется на 1 процент всего, а b(t) - нельзя, она меняется на 100 процентов. А вот если у нас есть производная a'(t), то тут нельзя просто ноль написать (хоть и можно считать a(t) константой), нужно заменить на -b'(t).

среда, 27 октября 2010 г.

Математическая экономика

Зачем нужна линейная алгебра экономистам? Например, чтоб изучать модель Леонтьева. Вот статья про нее в заброшенном (к сожалению) дневнике Интересная наука математика.

Есть еще сайт sdb.su (онлайновая библиотека) с курсами логистики и теории оптимального управления экономическими системами. Может, и там чего путное найдется.

До кучи - сайт с инфой по математике младших курсов.
Есть что-то по тензорам.

четверг, 14 октября 2010 г.

Сайтик про матрицы

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

среда, 13 октября 2010 г.

TeX: верхние индексы и жирные формулы

Если нам надо в ТеХе написать про столько-то метров квадратных, нам нужна буква "м" с верхним индексом 2 (м^2). Крышка (^) в тексте не сработает, а делать inline формулу (обрамленную долларами) ради такой малости - глупо. Поэтому пишем так:
м \textsuperscript{2}


А теперь о жирных формулах. Иногда нужно выделить жирным какую-то переменную (векторные величины обычно пишут именно так). \textbf в mathmode не работает. Выход есть:
$A\boldsymbol{x}=b$

понедельник, 4 октября 2010 г.

CFD links

* Чья-то диссертация в хорошо структурированном html-виде. Посвящена методу конечных объемов для уравнений гидродинамики. Что есть: дискретизация на сетке, интерполяция, обзор итерационных методов решения СЛАУ, турбулентные уравнения и многое другое. Мужик потрудился на славу, малиновые штаны и ку два раза однозначно.

* В том же духе оформлен мануал по программе ISNaS. Примерно то же самое: метод конечных объемов, дискретизация pressure, transport, continuity и momentum уравнений, турбулентность, решатели СЛАУ.

* www.cfd-online.com Wiki по вычислительной гидродинамике. Охватывает всю гидродинамику с заходом в смежные области, но много недописанных статей (как и в Википедии, собственно).

* Фильмы о турбулентности из MIT. Сделаны аж в 60х годах прошлого века неким Эшером Шапиро. Трогательные упоминания о том, что фильмы цветные, большинство со звуком, хотя есть и немые.

пятница, 1 октября 2010 г.

Научные статьи в Интернете

Полянин и Журов (написавшие несколько справочников по методам решения ОДУ и УРЧП) очень подробно рассказали о том, где бедному интеллигенту бесплатно накачать электронных публикаций для чтения перед сном - http://eqworld.ipmnet.ru/ru/info/sci-edu/PolyaninZhurov2007.htm. Полезных ссылок - очень много. Правда, CiteSeer, почему-то не упомянули.

воскресенье, 19 сентября 2010 г.

Банковский скоринг

В пятницу был на семинаре по бизнес-аналитике, который устраивает кафедра ММП. Там рассказывают, какие математические задачи решают в разных компаниях и банках.

На этом семинаре н.с. из ВЦ докладывался о построении скоринговых карт. Эта карта по сути является алгоритмом, который по данным о потенциальном заемщике определяет - давать ему кредит или нет.

Создание такой карты - нетривиальная математическая задача. Там и оптимизация, и кластеризация данных, и подбор параметров (настройка) модели.

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

Время подачи заявки на кредит - важный параметр (линейный, кстати). Считается, что добропорядочный клерк не пойдет брать кредит в 12 часов дня в понедельник. В это время только мошенники ходят.

А, вот, про мошенников. На каждого клиента (кому дали кредит) составляют кредитную историю. Это цепочка ячеек-месяцев, в каждой написано - заплатил нужный процент или нет. Если сразу не стал платить и не платил первые три месяца от даты займа - это мошенник(fraud). Если вначале платил, а потом вдруг образовалось три месяца непроплаты - это банкрот(default). Предсказывать мошенничество (когда человек и не собирался возвращать) якобы научились (?!), а вот с дефолтами сложнее, для этого и нужны карты. Кстати, срок действия скоринговой карты в России всего год!

Подробнее - на wiki сайте www.machinelearning.ru

пятница, 13 августа 2010 г.

Parallel Books

Библиотека суперкомпьютерного центра (Иркутск) -хорошая подборка в pdf, без всяких регистраций и прочих выкрутасов.

Practical MPI programming - IBM Redbook.

Хо-хо, я теперь знаю, что такое рэдбук)!

пятница, 30 июля 2010 г.

Sun ODF plugin for Microsoft Office

Open Office шагает по стране, теперь шаблоны некоторых документов в интернете размещаются в формате .odt. Иногда с дубликатами в .pdf или .doc. А иногда и без них.

Что делать рядовому юзверю, который привык к своему MS Office и ни про какой OO знать не хочет? Поставить плагин фирмы Sun. Открывает и .odf и .odt.

Беда только в том, что фирму Sun купил Oracle. В этой конторе работают прирожденные барыги - они сделали бесплатный сановский плагин коммерческим и требуют за последнюю версию продукта 90 баксов.

Ну ничего, в сети еще есть бесплатная ПРЕДпоследняя версия. Качаем отсюда: http://narod.ru/disk/22749935000/odp-3.1-bin-windows-en-US.rar.html

суббота, 24 июля 2010 г.

Компиляция gcc программ с OpenMP

Нужно прилинковать библиотеку GOMP(ключ -lgomp при линковке). При компиляции, по идее, нужен ключ gcc -openmp (или -fopenmp), но у меня проект и без них откомпилировался и собрался.

Перенаправление ввода-вывода

Три потока, три пути, выбирай куда идти... Это я про stdin, stdout, stderr.

Допустим, у нас есть проект, который мы собираем из командной строки командой gmake. Генерируется многостраничная выдача и гораздо удобнее читать ее из файла, а не в окне терминала. Пишем gmake > файл и... в файле оказывается лишь несколько строчек. Засада.

А все потому, что при компиляции/сборке генерируются два типа выражений - просто output и ошибки. Первые идут в stdout, вторые - в stderr. Поскольку оба потока по умолчанию связаны с экраном, юзер их не всегда и различает. А когда начинаем перенаправлять - тут отличия и всплывают. Значок > перенаправляет только stdout. А вот комбинация >& перенаправит в файл и stdout, и stderr.

Узелок на память - список операторов перенаправления:
операция > файл - перенаправляет все сообщения stdout в файл;
операция >& файл - перенаправляет все сообщения stdout и stderr в файл;
операция < файл - перенаправление stdin, операция возьмет на вход содержимое файла;
операция >> файл - сообщения из stdout будут дописываться в конец файла (append).

Все это работает и в Windows и в Unix.

четверг, 22 июля 2010 г.

Простая программа на Python

# -*- coding: cp1251 -*-
w = 10
h = 10


fh = open('simple.txt', 'w')

for i in range(h):
s = ''
for j in range(w-1):
elem = 'a_{' + str(i) + ',' + str(j) + '}'
s = s + elem + ' '
elem = 'a_{' + str(i) + ',' + str(w) + '}'
s = s + elem + ' \n'
# простой вывод на экран - print s
fh.write(s)

fh.close()

Комменты. # - комментарии. Строчка с coding - на всякий случай, чтоб не ругался IDLE. Блоки не ограничиваются ни begin/end, ни {} - внутри блока нужно сделать отступ либо Tab, либо 4 пробела. Регулярные выражения реализованы не так как в Perl, здесь используются функции.

среда, 21 июля 2010 г.

Latex - матрицы из пакета amsmath

Окружения tabular и array не слишком удобны для набора матриц, особенно если порядок большой - нужно указывать выравнивание для каждого столбца.

Если подключен amsmath (\usepackage{amsmath,amssymb}), можно использовать окружения pmatrix, bmatrix, matrix и др. Отличаются они лишь формой скобок.

Одно маленькое замечание. Если написать просто \begin{pmatrix} \end{pmatrix} - ничего работать не будет - latex выдаст ошибку "Missing $ inserted". А все потому, что все окружения типа XXmatrix работают только в math mode. Поэтому нужно сделать так:
\begin{equation}
\begin{pmatrix}
\end{pmatrix}
\end{equation}

четверг, 15 июля 2010 г.

Графопостроитель

Обнаружил весьма продвинутую программу для рисования графиков и анализа данных - SciDAVis.
Умеет строить всякие графики, экспортировать их в некоторые векторные и растровые форматы (выбор, правда, совсем небольшой). Есть функции для расчета корреляции, автокорреляции, свертки и деконволюции. И даже возможность взятия прямого и обратного быстрого преобразования Фурье (БПФ, оно же FFT), а также функции для работы со спектрами и сигналами.

Пакет лежит здесь: http://scidavis.sourceforge.net/. Почитать о нем на русском можно в блог-посте.

Немного про Batch

Не перестаю удивляться синтаксису BAT-файлов.

Вот так не работает
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 (echo Cannot switch on extensions)
ELSE (echo Extensions are switched on)

- не знает cmd.exe команды ELSE.

А надо вот так:
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 (echo Cannot switch on extensions
)ELSE (echo Extensions are switched on)

так как ПРЕДЛОЖЕНИЕ (такой элемент языка) ELSE должно быть на той же строчке, что и команда, следующая за оператором IF.

Теперь про setlocal. Эта директива включает некоторую опцию только для данного bat-файла.
Далее цитата из хелпа:
"Команда SETLOCAL принимает необязательные аргументы: ENABLEEXTENSIONS или
DISABLEEXTENSIONS. Это позволяет включить или отключить расширенную обработку
команд до выполнения команды. Аргумент ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION включает или отключает отложенное расширение переменной среды."

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

среда, 30 июня 2010 г.

Установка и использование OpenMPI

Для быстрой отладки небольших MPI программ можно прямо на домашнюю Windows-машину поставить реализацию MPI. Например, OpenMPI.

В принципе, это не сложно:
1. Берем OpenMPI с http://www.open-mpi.org/
2. Для компиляции потребуется CMake - качается с cmake.org. Заморачиваться со сборками не стоит, сразу берем версию с GUI.
3.Разбираемся с CMake. Все, что мне пришлось сделать - нажать на Configure и сказать, какая версия Visual Studio у меня стоит, CMake сама ее нашла и прописала себе все пути. Также нужно указать, где лежат сорцы - это [путь к папке, куда скачали архив с openmpi]/openmpi-1.4.2 (кстати, вот этот момент не очень четко описан в документации).
4. Дальше компиляция - надо получить Visual Studio solution, в котором в районе 10 проектов. Занимает это в районе получаса (ну, чай попить точно успеешь).
5. Получили solution, открываем его в VS, делаем build. В Debug (я дебаг-версию делал)
создается куча файлов.

Все, OpenMPI готов к употреблению.

Что теперь, как на создавать MPI-приложения? Понятное дело, нужно инклюдить mpi.h. Он есть в поставке OpenMPI, нужно только переложить его туда, где Студия его увидит.
Еще я прикомпилил libmpid.dll (d в конце - от debug, сделал бы release - было б просто
libmpi.dll) и libmpi_cxxd.dll (возможна, последняя и не нужна или нужна в особых случаях - вроде, символы из нее не грузятся). Делается это путем включения в проект соответствующих экспортных lib.

Все, собрали свой проект - например, test.

Дальше можно сделать так - положить готовый test.exe в отдельную папку. Там же должны находиться: mpirun.exe, libmpid.dll, libopen_pald.dll, libopen_rted.dll (я еще соответствующие lib положил, но, видимо, и без них можно). Запускать так: mpirun test.exe.

Пока не решил проблему отсутствия хелпа. Например, если написать просто test, то mpirun его не найдет и напишет:

Sorry! You were supposed to get help about:
orterun:exe-not-found
But I couldn't open the help file:
[путь]\openmpi-1.4.2\installed\share\openmpi\help-
orterun.txt: No such file or directory. Sorry!

Вот такой он вежливый. А хелп куда дел?

воскресенье, 27 июня 2010 г.

INUIT - читать

Весьма продвинутый курс по ЧМ в матфизе - Лобанов, Петров Численные методы решения уравнений в частных производных.

вторник, 22 июня 2010 г.

Шпаргалка по Makefile

Трудное это дело - писать makefile-ы) Своеобразная у них логика.

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

понедельник, 21 июня 2010 г.

MPICH и один блог

Нашел тут интересный блог некоего Сухинова из ИММ - iproc.ru. Посвящен он обработке изображений, но там много статей и на другие темы - параллельное программирование, гидродинамика.

Особенно мне близки:
MPICH и Windows
Измерение интервалов времени в Windows
История гидродинамики.

среда, 16 июня 2010 г.

Data breakpoints и debug modes

Data breakpoint - это когда прерывание происходит при изменении данных по определенному адресу. В Visual Studio: Debug->New Breakpoint->Set data breakpoint.

Может оказаться, что эта опция отключена. Работает она только в native debug mode (в mixed и managed режимах - не работает). Режимы отладки переключаются в свойствах проекта, ветка Debugging (сразу под General).

У меня даже после перехода в нативный режим пункт Set data breakpoint не включился. Пришлось сделать так: поставить бряк в самом начале main. Непонятно почему, но полсе этой остановки появилась возможность ставить data breakpoint.

(to be continued. maybe.)

MPI

Стандарт MPI - здесь.

Еще один учебник - MPI для начинающих

Аккуратно оформленный список MPI функций - на сайте DeinoMPI ("The Great and Terrible implementation of MPI-2").

четверг, 3 июня 2010 г.

Production quality code

Переведем это как "код, имеющий товарный вид".

Как определить, что программа готова к передаче заказчикам? В интернете нашел следующий список требований:

Design

* Design documents are readily available and organized for easy access
* All functionality is specified to an appropriate amount of detail
* Presentation, Business Logic, and Data have been abstracted (ie. Three tier architecture)
* Code is well-documented such that it explains all functionality and facilitates maintenance
* An effective test strategy/plan exists

Implementation

* The application does what it was intended to do
* Modules pass unit tests
* Log messages provide accurate portrayal of runtime and facilitate debugging
* Errors have been handled effectively
* Configuration variables have been abstracted into a sane configuration scheme
* Code meets the benchmark criteria
* Resource utilization is sane
* Test plan has been executed and application has been accepted

Deployment

* Code/documentation has undergone peer review
* Interagency coordination (ie. "one-hand knows what the other is doing")
* A rollback plan exists
* Deployment recipe exists

А бывалые прогеры говорят проще:
When the amount of flak the project manager is getting over late delivery exceeds the amount of flak he expects over the bugs remaining in the software, then the software is ready for deployment.
(Когда втык, получаемый менеджером проекта за невыполнение работы в срок, становится сильнее втыка за невыловленные баги - программа готова к внедрению)

среда, 26 мая 2010 г.

CUDAxтаем дальше: линал и графы

Обнаружил мат.библиотеку на CUDA для решения СЛАУ с разреженными матрицами. Еще она умеет что-то с графами делать. Пока фукнциональность небогатая (например, предобуславливатель только один - обратная диагональ), но разработчики обещают добавлять.


Называется библиотека CUSP, лежит здесь.

Visual Studio: подавление warning-ов

Прога выдает штук сто варнингов об unreferenced variable. Надоело.

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

1. В настройках проекта. Configuration Properties -> C\C++ -> Disable Specific Warnings.
Перечисляем номера варнингов (только не С4101 надо писать, а 4101) через точку с запятой.
Отключает эти варнинги во всей проге.

2. Пусть надо отключить варнинги в некотором участке кода. Пишем:
#pragma warning(disable: 4101, 4996)
<кусок кода>
#pragma warning(default: 4101, 4996)
Вторая прагма восстанавливает выдачу варнингов.

понедельник, 24 мая 2010 г.

batch: переименование файлов по маске.

Некоторые особенности программирования batch-файлов способны запутать даже мастеров скриптования.

Например. У нас есть директория с файлами вида a-001.zdt, a-002.zdt и т.д. Мы хотим их переименовать в a-wp001.zdt, a-wp002.zdt, ...

Это можно сделать следующим bat-ником:

for %%I in ("*.zdt") do (
for /f "delims=-. tokens=1,2,3" %%A in ('echo %%I') do (
ren %%I %%A-wp%%B.%%C )
)

Разберемся. Во внешнем цикле в переменную %%I по очереди помещаются имена файлов с расширением zdt. Внутренний цикл парсит имена - разбивает на куски. Ключ /f включает некоторые спецвозможности (см. help for). "delims=-." означает, что символы "-", "."мы считаем разделителями. "tokens=1,2,3" означает, что делим имя файла на 3 части по разделителям.

Переменная %%A - это итератор внутреннего цикла, как %%I - итератор внешнего. Но здесь %%A бежит не по списку файлов, а по строке, которую выводит команда echo %%I (которая выводит содержимое %%I, т.е. имя очередного файла). Одинарные кавычки и говорят циклу - итерируем по результату выполнения команды. Вообще, важно ставить нужные кавычки. Если поставить вокруг echo двойные кавычки - будет ошибка. В двойных надо писать списко файлов.

Теперь - внимание. Имя файла разбивается на три части. Первая помещается в итератор %%A. Вторая и третья - в ЛЮБЫЕ переменные, которые встрется внутри цикла. Здесь это %%B и %%С, но вовсе не обязательно брать подряд идущие буквы (A,B,С). Можно другие. Лихо, да? Batch, оказывается, хитроумнее Perl-a.

Да, вот еще. Переменные-итераторы могут иметь только однобуквенные названия.

воскресенье, 23 мая 2010 г.

ПоCUDAхтаем

В лекциях Саада обнаружил ссылку на статьи по CUDA некоего Роба Фарбера. Всего Фарбер написал аж 15 статей, лежат они на весьма уважаемом ресурсе DrDobbs.

Итак, Rob Farber "CUDA, Supercomputing for the Masses".

пятница, 21 мая 2010 г.

BLAS и Lapack под Windows

Вообще-то, принято собирать их самостоятельно, но если есть возможность - почему бы не воспользоваться:
dll, lib и хедэры можно скачать со страницы чеха Свободы.

Теперь есть надежда, что всякие математические пакеты, заточенные под Юникс, свободно соберутся и под Виндой.

UPD.

Линковать лучше статически (blas_win32_mt.dll и lapack_win32_mt.dll). Если брать *_md.dll - возникает ошибка error loading C runtime library. Также Visual Studio потребовала msvcr90.dll (это, собственно, и есть С runtime library). Скачал с сайта www.dll-files.com.

четверг, 20 мая 2010 г.

Гражданин Саад и другие

Юзеф Саад - культовая личность среди тех, кто решает СЛАУ. Фанаты могут увидеть его фото на его страничке (где много всего полезного). Добрый Юзеф выложил в электронном виде конспекты своих лекций (см. раздел Teaching):
> Computational Aspects of Matrix Theory
> Sparse Matrix Computations
> Introduction to Parallel Computing
Последний курс (про паралл выч) прочтен этой весной, на странице есть не только pdf с лекциями (есть лекция по CUDA!), но и куча программок-примеров на OpenMP, CUDA, MPI.

Софт Саада.

Хоумпейджи других авторитетных товарищей:
Dominique Pelletier (Монреаль)
Randall Bramley (автор splib, Indiana)
Martin J. Gander (variable preconditioning, etc.)
Volker Mehrmann (Берлин)
Nicholas J. Higham
(Manchester) - почти классик. Делал код для Lapack, NAG, Matlab. Занимается вычислительной линейной алгеброй и теорией устойчивости алгоритмов. Работы по тестовым матрицам.
Михаил Юрьевич Баландин (Новосибирск),
один из авторов методички "Методы решения СЛАУ большой размерности"

вторник, 18 мая 2010 г.

Нет балунам!

Очень, знаете ли, раздражают подсказки в виде облачков из комиксов (balloon tips). Они постоянно вылезают в правом нижнем углу, где всякие значки: "New version of Java machine is available" и прочее.

Чтоб это отключить, надо в разделе реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced создать параметр типа DWORD под названием EnableBalloonTips и присвоить ему значение ноль. Потом закрыть редактор реестра, выйти из системы и снова войти.

четверг, 13 мая 2010 г.

Математика в интернете

Вот, уже придумали, как делать онлайн-книжки по математике с ИСПОЛНЯЕМЫМИ алгоритмами. Т.е. можно встраивать программы в книжки, я так понимаю.
Читать здесь: О проекте artspb.com

Там же написано о каком-то Internet Matlab (iMatlab).

вторник, 11 мая 2010 г.

Адрес приватной переменной

Напишем что0-нибудь типа

int lm;

#pragma omp parallel for private(lm)
for(i = 0; i < maxI; i++)
{
MyRead(&lm);
}

здесь функция MyRead читает в lm. Прототип MyRead(int *arg).

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


Т.е. лучше

int lm[N_];

#pragma omp parallel for
for(i = 0; i < maxI; i++)
{
s_ = omp_get_thread_num();
MyRead(lm+s_);
}

где N_ - число процессов

пятница, 30 апреля 2010 г.

Бинарные файлы в Unix и Windows

[#####!!!! я убил несколько дней своей жизни на эту ерунду, конвертируя файлики, сгенерированные по Аиксом, для чтения по Виндой. И все из-за недостатка знаний по Си. #####!!!!]

1. Если есть желание читать бинарный file1 и писать в бинарный file2 (c помощью fwread и fwrite), открывайте файлы в режиме binary ("rb", "wb"; иногда пишут "r+b", "w+b"). Тогда не будет проблем с выравниванием.

2. На компьютере IBM четырехбайтное integer-число 150 (HEX 96) запишется в файл как 0x00 00 00 96. Этот порядок байт называется big-endian. На Intel x86 байты будут в обратном порядке: 0x96 00 00 00. Числа double в Windows тоже переворачиваются. Т.е. имеет место little-endian порядок байт.

4. Еще я теперь знаю, что такое сериализация:) "Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности." (Википедия)

среда, 21 апреля 2010 г.

И все-таки бесплатно

Есть такая организация - ACM(Association fo Computing Machinery, www.acm.org). Эти самые компьютерные машинисты создали хорошую электронную библиотеку с удобным поиском - portal.acm.org. Но вот незадача - хочешь что-нибудь скачать, они тебе говорят - нужен платный аккаунт.

Я уже было собирался просить о помощи в интернете, но тут случайно обнаружил такую неприметную строчку: doi>ссылка. Пройдя по ссылке, попал на ScienceDirect, где нужная мне статья преспокойненько лежала в виде pdf, совершенно бесплатно.

Что такое doi - не знаю. Зачем просить деньги за скачивание статьи, при этом указывая ссылку на бесплатный ресурс - тоже непонятно. Тренировка сообразительности, наверное.

вторник, 13 апреля 2010 г.

Скачайте мне статью!

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

Называется PDF.

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

И еще одно комьюнити - ru_math, посвященное понятно чему и кому. Меня заинтересовало обсуждение "Итерационные методы для комплексных систем".

понедельник, 5 апреля 2010 г.

TeX формулы онлайн

Про Астронет, наверное, все знают - можно забить формулу в окошко и получить соответствующий gif - http://www.astronet.ru/db/latex2gif/.

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

Вот аналогичный проект - http://at.org/~cola/tex2img/
Здесь немного удобнее - форма ввода внизу, результат показывается над ней, что ускоряет работу

пятница, 2 апреля 2010 г.

Wikipedia про TeX

Иногда лень рыться в Львовском, чтоб найти, как обозначается знак "не принадлежит" в TeX (правильный ответ - \notin). Да и не всегда книжка под рукой.

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

А вот Викикнижка о Латексе.

вторник, 16 марта 2010 г.

CFD Online

Нашел проект, посвященный вычислительной гидрдинамике. Называется Computational Fluid Dynamics online. Адрес - www.cfd-online.com.В частности, там есть Wiki, пополняемый "тысячами добровольцев". Ну, положим, методы решения СЛАУ изложены посредственно, но само наличие такого проекта радует.

upd 2.04.2010

Еще одна ссылка с пафосным названием Your one stop resource for fluid dynamics and flow engineering - www.efluids.com
Отличается наличием большого числа картинок и анимаций, можно посмотреть на разные типы потоков, увидеть турбулентность.

вторник, 2 марта 2010 г.

grep и Perl

Пусть у нас в директории есть несколько html файлов со со страшными словами ILU, MILU, ILUT. Я хочу найти строки в этих файлах, куда входит именно ILU (ILUT и MILU не подходят) и вывести их на экран.

С помощью grep это выглядит так
grep -rnw 'ILU' ./*.html
Здесь -r выполняет рекурсивный поиск, -n ставит номера строк, куда входит ILU, а -w говорит, что мы ишщем слово целиком.

[удобно искать по исходникам: $ grep -rnw function_name /home/www/dev/myprogram/]

выдача будет состоять из строк вида
./results_add4.html:163:Solver is CG-Sq with ILU preconditioning

А можно написать скрипт на Perl, который делает то же самое (кроме простановки номеров строк):
#!/usr/bin/perl

#формируем список html-файлов в текущей директории
@FilesList = glob("*.html");

foreach $FileName (@FilesList)
{
open FN, $FileName;
#читаем файла построчно
while( <FN>)
{
#ищем вхождения слова ILU целиком, \b - граница слова
# $_ - очередная считанная строка
print "$FileName:$_\n" if m/\bILU\b/;
}

close FN;
}

понедельник, 1 марта 2010 г.

Зачем нам линейная алгебра?

Это любимый вопрос студентов - А зачем нужно такое-то понятие, такая-то теория, такая-то наука? Зачем нужны криволинейные интегралы, синусы, конусы, etc.?

Линейка - первый шаг на высоты абстрактных разделов математики (потом будут функциональный анализ, топология, пространства дробной гладкости, затем больница имени Кащенко).

Между тем, Википедия говорит, что Linear algebra is central to modern mathematics and its applications.

Какой-то умный дядька из Оттавы (хорошо, не из Ванкувера) составил подробное описание приложений ЛА в других науках (криптографии, химии, экономике и т.д.).

Читайте!

суббота, 20 февраля 2010 г.

Переопределим printf

Иногда бывает так, что printf ничего не выводит. Видимо, это из-за того, что она пишет в буфер, который по каким-то причинам не вываливает содержимое в stdout. Чтобы принудительно очистить это буфер используется fflush(stdout).

Логично переопределить printf как printf + fflush. Сложность в том, что у printf переменное число аргументов. если написать
#define printf(A) printf(A); fflush(stdout);
а потом задать строку форматирования с несколькими аргументами, компилятор ругнется, что-де слишком много параметров у макроса printf(A).

Решается это так (нашел в интернете)
#define printf(A) printf A; fflush(stdout);
printf(("t%d: RRJ in %d\n",TRED, t1));

Тут важно, что вызывать printf надо с ДВОЙНЫМИ скобками.

вторник, 16 февраля 2010 г.

ILU предобуславливатели.

ILU = incomplete LU preconditioner (оказывается, бывают и postconditioner-ы).

Неплохая дока по предобуславливателям этого класса - здесь.

Коротко:

1. incomplete - в смысле, произведение LU приблизительно равно матрице системы A. В отличие от обычного LU разложения, где A = LU.

LU - разложение -- хорошая штука, но если матрица A - разреженная, хранится в соответствующем формате, то хотелось бы, чтоб и произведение LU было бы разреженным. Т.е., мы раскладываем A в LU и начинаем выкидывать в L и U элементы в соответствие с некоторой стратегией. Равенство A = LU становится приближенным. Самый радикальный вариант - оставлять в LU элементы только в тех позициях (i,j), для которых a_ij не равен нулю (получим ILU(0)).

2. Предобусловленная система выглядит так: U^-1 L ^-1 A x= U^-1 L ^-1 b.

3. ILU(s). s - число уровней заполнения (levels of fill). Про ILU(0) см. в п. 1. А что такое уровни заполнения? Опять обратимся к LU-факторизации. Всем позициям, в которых a_ij не равен нулю, приписывается уровень нуль. Они считаются допустимыми. Вообще, допустимыми будут позиции с уровнем не больше s. Если позиция (при LU-факторизации) порождена двумя разрешенными позициями, то ей присваивается следующий уровень.

Прочитал я об этом в начале этой статьи (pdf).

4. MILU - modified ILU. Если в ILU стараются сохранить узор (zero pattern) A, т.е. {если a_ij<>0 => LU_ij = a_ij}, то в MILU это правило для i = j заменяют таким: {rowsum(LU) = rowsum(A)}

Бррр...

вторник, 9 февраля 2010 г.

Проверка существования файла в Unix shell

Есть вот такая команда Linux:
test -e filename - проверить, что файл filename существует ;
test -d filename- проверить, что файл filename существует и является директорией
(и куча других опций). На экран ничего не выводит, возвращает 1 или 0 если файл существует или не существует. Поэтому использовать лучше в скриптах. Например, если мы хотим удалить файл, надо сначала проверить его наличие, иначе rm выдаст ошибку, и скрипт дальше не будет исполняться.

Приведу кусочек makefile-a, где a)используется test : б) показан условный оператор shell:

if (test -f /usr/lib/libblas.a);\
then ($(FC) $(FFLAGS) -o driver driver.o splib.a -lblas);\
else ($(FC) $(FFLAGS) -o driver driver.o splib.a blas/localblas.a);\
fi

Здесь мы проверяем - есть ли в каталоге /usr/lib/ библиотека blas. Если да - линкуем с ней, иначе с blas-ом из директории ./blas.

четверг, 4 февраля 2010 г.

Работа с отладчиком dbx

Сказал бы мне кто-нибудь неделю назад, что буду дебужить в консоли - не поверил бы... "Мама это небыль, мама это не со мной".

Распишу по шагам, как работать с AIX-вским dbx. Обычный линуксовый gdb имеет свои особенности, dbx как-то поудобнее даже.

Итак - откомпиляли все сорсы (foo.c, stupid.c) с ключом -g. Получили бинарник (stupid).

1. Теперь запускаем dbx, грузим наш бинарник в него:
dbx stupid

Если хотим, чтоб отладчик искал сорсы в директории ./src, пишем:
dbx -I ./src stupid

2. Перед запуском отлаживаемой программы можно поставить брейкпоинты и задать способ трассировки (т.е., когда нужно будет выводить строки выполняемого кода).

поставить брякпоинт в файле foo.c на строке 9:
stop at "foo.c" : 9
[Набирать строчку надо без исправлений, без BackSpace, иначе отладчик говорит об ошибках синтаксиса]

поставить брякпоинт на функции foo:
stop in foo
(брякнется на первом выполняемом выражении).

Теперь трассировка:
  1. Трассировать каждый вызов printf :

    trace printf
  2. Трассировать каждое выполнение строки 22 в hello.c :

    trace "hello.c":22
  3. Трассировать изменение переменной x в процедуре main :

    trace x in main
  4. Трассировать данные по адресу 0x2004000:

    set $A=0x2004000
    trace $A
3. Запуск программы на выполнение (отладку) : r
если программе нужны флаги (например, -da), пишем r -da

4. После остановки на брякпоинте:
можно вывести значение одной переменной: print x
или всех переменных, которые видны из данного куска кода (текущей процедуры):
dump.
Кроме того, можно вывести стек вызова процедур: where.

5. Выход из программы - quit

среда, 3 февраля 2010 г.

Консольные отладчики gdb и dbx

Ну, вы знаете : Linux way - это консоль. Все в консоли, и отладка тоже. Очень необычно это для привыкших к Visual Studio, но со временем привыкаешь и начинаешь чувствовать себя хакером а-ля Касперски.

Отладчик gdb есть, похоже, во всех никсах. А в IBM-овской AIX есть еще свой - dbx. Так вот,
судя по хелпу, с их помощью можно выделывать весьма занятные фокусы. Скажем, менять значения переменных на ходу из отладчика, делать всевозможные дампы (например, можно сказать dump - и вам вывалят все переменные контекста), даже можно как-то двигать функции по стеку вызова вниз-вверх.

Чтобы можно было пользоваться этим великолепием, надо компилировать с ключом -g (генерирование отладочной информации).

Мануал по dbx: здесь.

Пути для поиска файлов в Linux

Как известно, в Винде есть переменная окружения Path, где прописаны директории, в которых система ищет всякие хедэры, библиотеки и т.д. В Linux переменная , где хранятся с путями поиска подгружаемых библиотек, называется LD_LIBRARY_PATH. Изменять ее надо следующим образом (добавим еще одну директорию в список):
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"new_dir_name"

Также как и PATH, эта переменная скидывается при перезапуске системы :(

Кроме директорий из LD_LIBRARY_PATH, Linux всегда ищет библиотеки .so в /lib и /usr/lib

четверг, 28 января 2010 г.

Makefile: подлянка с пробелом

Не ставьте пробелов после инициализации переменных в Makefile!

Если мы напишем INCDIR=../include_, где _ = пробел, то выражение
'$(INCDIR)/header1.h' будет восприниматься make-ом как '/header1.h'. И этот хедэр найден, конечно? не будет.

Поэтому правильно будет написать INCDIR=../include<конец строки>