28 мая 2009 г.

Короткометражный бред 1 — Не закрывая глаз.

— Как?! Как, черт побери, псих с мешочком перца прошмыгнул почти через все посты незамеченным? Вас на учения в детсад водили? Показывали, как правильно в горшок срать?

— Т…

— Молчать! Почему, скажите мне, только пост №37 смог его заметить и остановить?

— Товарищ майор! Стоящий на посту, рядовой В после просмотра какого-то сериала решил научиться (и научился) чихать, не закрывая глаз…

26 мая 2009 г.

PSTricks

Существует, конечно, такая вещь как TikZ and PGF, но для графиков я пока испытал лишь PSTricks, который кстати умеет рисовать очень многое. Почти все приведенные дальше примеры используют возможности расширенного пакета pstricks-add
Простейший график можно нарисовать, например, вот так:
\begin{psgraph}[comma,arrows=->](0,0)(-1,-0.6)(5,0.6){.8\textwidth}{5cm}

  \psplot[plotpoints=200,algebraic]{-0.75}{5}{sin(4*x)/((4*x)^2+1)}
  \psxTick[linecolor=red](1.55){$x_0$}
  \resetOptions

\end{psgraph}


изображение в результате будет вот таким:
(кликабельно, по ссылке svg файлик, если уж интересно как оно в векторе выглядит. Т.к. тексты "написаны" с помощью кривых, то размеры svg относительно большие: 50 – 160 KiB) 
С помощью PSTricks можно настраивать вид осей, шкалы, формат, стили линий, метки на осях и многое другое. Проще всего объяснить примером с детальными комментариями, благодаря которым, надеюсь, всё понятно.
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{pstricks-add}
\pagestyle{empty}

\begin{document}
\setcounter{figure}{1}

\begin{figure}[h]
 \centering
 % \psset "запоминает" настройки глобально
 \psset{xAxisLabel=$x_\nu$,% подпись оси x
        yAxisLabel=$y_\beta$,% подпись оси y
        ury=0.5cm,% отступ сверху графика
        algebraic,% способ задания функций
        plotstyle=ecurve}% стиль графика

\begin{psgraph}[comma,                          % запятая вместо точки в цифрах
                Dy=0.5,                                          % шаг по оси y
                xsubticks=5,              % количество "маленьких" засечек по x
                ysubticks=4,              % количество "маленьких" засечек по y
                arrows=->,                                    % стрелки на осях
                yticksize=-1 5,    % превращаем засечки в линии от -1 до 5 по x
                xticksize=-0.5 0.5,  % засечки в линии, теперь получилась сетка
                subticksize=1,% длинна младших засечек такая же как материнских
                ticklinestyle=dashed,                      % стиль линий "сетки"
                subticklinestyle=dotted,          % стиль линий вторичной сетки
                subtickwidth=.5pt]              % толщина линий вторичной сетки
                (0,0)                            % "координаты начала координат"
                (-1,-0.6)                                % диапазон изменения x
                (5,0.6)                                  % диапазон изменения y
                {.8\textwidth}{5cm}                 % размеры конечного графика

  % зададим для следующего графика стиль линии
  % штрих-пунктирная линия: 4мм линия 1мм пропуск 0.5мм линия(точка) и 1мм пропуск
  \psset{linestyle=dashed,dash=4mm 1mm .5mm 1mm}                  % стиль линий
  \pcline(3.8,-0.4)(4.4,-0.4)                              % линия для "легенды"
  \rput(4.8,-0.4){$\frac{sin(4 x)}{(4 x)^2+1}$}               % пояснение линии
  \psplot[plotpoints=200]{-0.75}{5}{sin(4*x)/((4*x)^2+1)}          % сам график
% plotpoints задано, потому, что иначе график выходит ломаный или вообще неправильный

  % отметка на оси х, где х=1.55
  \psxTick[linecolor=red](1.55){$x_0$}

  % а для следующего линия цельная с белой "каймой"
  \psset{linestyle=solid,border=1mm,bordercolor=white}
  \psline(2.4,-0.4)(2.9,-0.4)
  \rput(3.3,-0.4){$\frac{sin(x)}{x^2+1}$}
  \psplot{-0.75}{5}{sin(x)/(x^2+1)}

  % сброс всех настроек PSTricks в стандартные
  \resetOptions

\end{psgraph}
\caption{plot with labels}\label{plt:demo}
\end{figure}


\end{document}


В результате получится следующее:

Ну и еще парочка примеров:

17 мая 2009 г.

Python в Latex

Использовать Python в LaTeX было бы очень удобно. Сразу предупреждаю, что предложенные методы считаются небезопасными, потому-что Python умеет гадить, если написать соответствующий код, так что проверяйте его (=

Существует готовый метод в виде файла стилей, используется так:

\usepackage{python} \begin{python} from math import sin a = sin(5) c = sin(9) b = max(a,c) print b \end{python}

Этот пакет, фактически, создает jobname.py, пишет вывод в jobname.py.out, jobname.py.err, и читает его. Метод плох тем, что переменные не сохраняются от кода к коду, и для этого приходится использовать pickle, приходиться каждый раз заново всё import`ить и т.п., а еще мне кажется, что удобно иметь все расчеты в одном месте в отдельном файле, поэтому я построил свой лунапарк...

Всё до безумия просто. Добавляем в преамбулу следующее:

\newcommand{\python}[1]{% \immediate\write18{python #1 > ./py.out 2> ./py.err} \immediate\input"py.out"} \newcommand{\ptn}[1]{% \python{./path_to_your_scripts/script_name.py #1}} \newcommand{\peval}[1]{% \python{-c "print #1" |./path_to_your_scripts/sedder}} \newcommand{\comments}[1]{}

Первый макрос вызывает python с заданными вами аргументами, второй запускает конкртеный скрипт с аргументами, ну а третий может выполнять однострочный код Пайтона, который потом преаброзовывается маленьким sed`ом, что бы заменить точки на запятые. И пооследний макрос добавил, что бы при выводе Python и появлении каких-то ошибок в Latex было понятно где проблема

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

sedder:

#!/bin/sh sed -e 's/\./,/'
Сделайте его исполняемым.

конец файла "./path_to_your_scripts/script_name.py":

import sys from re import sub from __future__ import division def toStr(num,digitsAfter=2): """Num to string with zero stripping""" frmt = '%.' + str(digitsAfter) + 'f' num = (frmt%num) num = num.strip('0') if num[0] =='.': num = '0'+num if num[-1] == '.': num = num.strip('.') return num def tenpower(num,maximum=1e3,minimum=1e-2,base=1): """converts num to (num1,num2) where num1*10**num2=num converts when not minimum<num<maximum. converts until base<num1<2*base""" pwr = 0 while abs(num) > maximum or (abs(num)>2*base and pwr>0): pwr +=1 num = num / 10 while abs(num) < minimum or (abs(num)<base and pwr<0): pwr -=1 num = num * 10 return num,pwr def latexize(num,power=False,delim=','): if power: return ('%s \\cdot 10^{%d}' %(num,power)).replace('.',delim) else: return str(num).replace('.',delim) if __name__ == "__main__": #try: argc = len(sys.argv) var = 'Ooopsy-doopsy!' digitsAfter = 2 typ = 10 if argc >1: var = sub('[{}\. ]','',sys.argv[1]) comment = '\\comments{%s}'%sys.argv[1] var = globals()[var] else: raise ValueError if argc >2: try: digitsAfter = int(sys.argv[2]) except: typ = sys.argv[2] if argc >3: typ = sys.argv[2] digitsAfter = int(sys.argv[3]) mini=1/10**digitsAfter if typ in ('int','i'): print comment,int(var) elif typ in ['float','f','nomath']: print comment+latexize(toStr(var,digitsAfter)) else: strings = tenpower(var,minimum=mini) print comment+latexize(toStr(strings[0],digitsAfter),strings[1]) #except Exception: # pass

P.S. Обрабатывать такой файл LaTeX нужно с опцией "-shell-escape"

14 мая 2009 г.

Python + LaTeX(XeTeX) и учеба

Сделал я с помощью LaTeX и Python расчетку по Радиотехническим системам(на самом деле GPS) и курсовую работу. А так как рабочий пример это всегда хорошее пособие, то решил этим всем поделиться.

Постоянно они доступны из репозитория mercurial на bitbucket.org вот тут и тут. Ну а еще лежат архивчиками у меня на ftp (когда и пока он работает). На bitbucket.org версия естественно новее, и наверняка там есть парочка мелких исправлений, поидее косметических

Начну пожалуй с описания того, что сделано чуть более качественно, это расчека по GPS. Нам даны значения мифологических параметров, парочку графиков, которые надо аппроксимировать (я их аппроксимировал нагло кусочно-линейно) и формулы мифологических махинаций. Вот эти махинации и надо расчитать. Скрипт на Python выглядит немного ублюдочно, ибо писался «влоб» и незадумываясь. Вся прелесть этой расчетки лишь в том, что из Python`a LaTeX сам берёт все данные(нууу, почти, надо 4 команды из консольки запустить, но естественно можно и это автоматизировать, детальнее в README).

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

На самом деле там с тем же успехом можно было писать "qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius modi" Для чертежей был нагло спизжен AVR Butterfly MP3. Рамки для них сгенерены LaTeX, и всё это скомпоновано в Inkscape, но вообще с помощью PStricks можно было и LaTeX`ом дорисовать недостающие тексты, размеры и т.п., но мне лень было разбираться.

Из полезного в курсаче имеется:

  • Опять вытягивать переменные из скрипта Python, но уже одной командочкой, может вытягивать их в заданном формате. Например:
    • \ptn{variable} Выдаст переменную в виде обычного чила если оно по модулю меньше 1000 и больше 0,01. Если же оно не попадает в эти пределы то выдастьcя в виде "число,сотые \cdot 10^{степень}"
    • \ptn{variable f} всегда выдаёт результат без "10^{}"
    • \ptn{variable f 5} или \ptn{variable 5} выдаст число как в одном из двух предыдущих вариантов, но с 5 знаками после запятой(лишние нули обрежутся), естественно можно 5 заменить на любое число
  • Скрипт автоматически убирает в запросах пробелы, точки, подчеркивания, скобочки так что можно написать что-то в духе:
    \Delta d_{min.5} = \ptn{Delta d_{min.5}}
    и туда подставиться переменная Deltad_min5. Обратный слеш все же прийдёться удалить, а кириллицу заменить на латиницу.
  • Можно вызывать код python прямо из LaTeX(удобно для быстрых несложных вычислений). \peval{1.23*8**5.57}
    С многострочными вариантами оно не работает
  • Занимательно выглядящие таблицы(мне нравится). Заодно посмотрите как назначать стиль отдельному столбцу таблицы
  • Рамки по ГОСТ
  • Титулка такая, как требуют у нас на факультете(правда лишняя надпись "ПОГОДЖЕНО", но её можно убрать, подумайте как)

5 мая 2009 г.

"Восстановление среды" по данным поля из n-цати точек

Новый тип съёмки воссоздаёт теряемую информацию об объекте. Ха-ха. В электродинамике уже давно решают подобные проблемы("обратная задача электродинамики"). Я думал такое давно придумали, а тут "на тебе". Дурачки, как обычно теории много и давно, а на практике только-только применять начали

P.S. кто не верит про обратные задачи:
Оценка устойчивости решения в двумерной обратной задаче электродинамики тут правда для изотропной среды и источник "света" один и тот импульс, но доказано что измеряя параметры сигнала в некоторой области некоторое время, можно определить все параметры среды. Короче все проблема состоит в создании правильных "алгоритмов" для анизотропной среды часть которой известна(есть начальные условия)(cp1251)
Inverse Modelling Group Publications. Вот тут много чего есть и про анизотропные среды

Чтение мыслей роботами

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

1 мая 2009 г.

Barfuss (Босиком по мостовой, фильм)

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

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

P.S. Фильм немецкий и по фейсу актёра ожидаешь, что фильм зороший, но фильм так себе, да еще и музыка — какая-то англоязычная попса. Пусть и неплохая местами, но как-то портит атмосферу окончательно