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

Жажда творчества

Когда нет возможности делать хоть что-нибудь новое на работе (по причине навалившейся рутины), приходится отводить душу на всякой ерунде. Вчера просмотрел забавный ролик на Youtube (в моей живой ленте есть) и не смог удержаться от того чтобы написать демонстрашку. Если вы еще не посмотрели ролик, попробуйте ответить на следующий вопрос. На рисунке изображена тележка(зеленая) на двух колесах (синих). Сверху лежит катушка от ниток (красная), которая внутренним диаметром касается колес. Еще выше изображена линейка, которую мы собираемся тянуть, скажем, вправо. Вопрос такой: куда поедет тележка?

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

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

Задача

Недавно прочитал в википедии забавную статью и написал скрипт в духе "Petals around the rose".
1
Ну, вопрос, понятно, как это работает.
PS Только нецелые числа вводить не надо, а то зациклится.

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

В борьбе за аудиторию

Вчера убил вечер, пытаясь заставить блоггер показывать математические формулы во всех браузерах. Ну, по-крайней мере, в Firefox, Opera и Chrome.
Гришино решение, конечно, впечатляет. Везде выглядит нормально, даже на смартфоне (он его, правда, по-другому называет). Но если заглянуть в код, то видно, что эта красота нерукотворная создана посредством шинкования пространства с помощью клеток таблицы. Это означает, что обратный процесс перевода в человеческий формат едва ли возможен. А теперь допустим появится через полгодика идеальный способ воспроизводить формулы в вебе. Тогда эта красота останется не у дел, не исправить ее, не использовать повторно будет невозможно. Так что такой подход, по-моему, даже хуже замены формул картинками. А полная масштабируемость, ну кому она особенно нужна? Картинки ведь тоже можно немного растянуть если очень хочется.
Так что я решил остаться на MathML. Фактически, это означает, что формулы у меня в блоге нормально выглядели только в FF. Вчера я нашел в и-нете проект под названием MathJax и он мне показался ничего. Синтаксис копирует MathML, заменяя родные <mrow...></mrow> таги на что-то типа <span class='mrow'...></span> и т.д.
Одна проблема, все работает, когда он установлен на том же сервере, что и страничка, на которой он используется. Дело оказалось в излишней подозрительности современных браузеров. При попытке на лету добыть нужные шрифты с http://www.mathjax.org они применяют same-origin security policy и не грузят шрифты. Утверждалось, что это исключительно проблемы FF, но вскрытие показало, что и современная Opera тоже не лучше. В Chrome, впрочем, все работает. Нужно просто вставить
<script src="http://www.mathjax.org/MathJax/MathJax.js">
    MathJax.Hub.Config({
    delayStartupUntil: "onload",
    jax: ["input/MathML", "input/TeX", "output/HTML-CSS"],
    extensions: ["tex2jax.js"],
    tex2jax: {
      inlineMath: [['$','$'], ['\\(','\\)']], 
      processEscapes: 1
    }
  });
</script>
куда-нибудь в голову страницы.
В результате я сделал так, чтобы в FF работал прежний скрипт LaTeXMathML.js, а в остальных браузерах MathJax. Но, как я уже сказал, в Опере рецепт не работал. Помогло просто тупое скачивание шрифтов с сайта MathJax и установка .otf версий в систему. Теперь, наверное, и в FF работал бы MathJax, но ведь не все захотят шрифты устанавливать.

PS. Забыл какую-нибудь тестовую формулу вставить. Вот
\[ \int_{-\infty}^{\infty} dx\int_{-\infty}^{\infty} dy \frac{x^2-y^2}{(1+x^2+y^2)^2}=? \]

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

Подписали несовершеннолетних

Если набрать в гугле "signed minors", ничего хорошего не получишь, по-крайней мере, на первой странице. Например, вторая сверху ссылка называется "Minor Signed an Agreement to Pay Debts". Вот тебе и релевантность результатов поиска. Английская википедия более продвинута, поскольку четвертый пункт называется cofactors и действительно имеет отношение к теме. Но все-таки, кофактор это частный случай signed minor-а, так сказать, next-to-adult, пользуясь принятой терминологией. Закончил филологические изыскания в гугловском переводчике, который, ничтоже сумняшеся, выдал тему. Красиво, точно, но, как говорится в известном мультике, для своих я просто Нюша, а точнее, минор со знаком (криво все-таки звучит).

Мне, конечно, кажется, что все про миноры со знаком должны знать, но на всякий случай объясню. Как учат нас старшие товарищи, объяснять как раз и нужно то, что, в общем-то, объяснять не нужно. А то, что действительно нужно объяснять, нужно старательно заметать под ковер дабы не вызвать в слушателях ненужных сомнений. Вот и я обнаружил и доказал недавно два красивых тождества и ну очень хотел впихнуть их в свой вклад в труды конференции, но когда дело до этого дошло, понял, что погрязну в объяснениях. Ограничился тем, что привел в статье частный случай одного из них и написал поясняющую все и сразу  фразу, оканчивающуюся на "presented elsewhere". Но зато успел отправить сегодня (в дедлайн).

Да, про миноры со знаком. Если есть у нас матрица
\[\left[\begin{array}{ccc}r_1^1&\ldots&r_N^{1}\\\vdots&\ddots&\vdots\\r_1^N&\ldots&r_N^N\end{array}\right]\]
будем называть ее $\left(\begin{array}{c}i_1,\ldots,i_m\\j_1,\ldots,j_m\end{array}\right)$-минором (обозначение только что придумал) детерминант матрицы, которая получается из исходной вычеркиванием столбцов под номерами  $i_1,\ldots,i_m$ и строк под номерами $j_1,\ldots,j_m$. Видим, что минор симметричен по верхним и по нижним индексам. А минор со знаком — антисимметричен. Потому что от просто минора отличается таким множителем
\[(-1)^{i_1+\ldots+i_m+j_1+\ldots+j_m}\sigma(i_1,\ldots, i_m)\sigma(j_1,\ldots, j_m)\]
Здесь $\sigma(i_1,\ldots, i_m)=\pm 1$ обозначает четность перестановки, которую нужно сделать чтобы упорядочить по возрастанию ряд чисел $i_1,\ldots, i_m$. Обозначать этот страх будем так
\[R_{j_1,\ldots,j_m}^{i_1,\ldots,i_m}=(-1)^{i_1+\ldots+i_m+j_1+\ldots+j_m}\sigma(i_1,\ldots, i_m)\sigma(j_1,\ldots, j_m)\left(\begin{array}{c}i_1,\ldots,i_m\\j_1,\ldots,j_m\end{array}\right)\]
Например, детерминант всей матрицы будет равен
\[R=\left(\begin{array}{с}\, \\\, \end{array}\right)=\left|\begin{array}{ccc}r_1^1&\ldots&r_N^{1}\\\vdots&\ddots&\vdots\\r_1^N&\ldots&r_N^N\end{array}\right|\]
Если наша матрица состоит из независимых переменных, то мы можем любой минор со знаком получить простым дифференцированием $R$:
\[R_{j_1,\ldots,j_m}^{i_1,\ldots,i_m}=\frac{\partial}{\partial r_{i_1}^{j_1}}\ldots \frac{\partial}{\partial r_{i_m}^{j_m}} R\]

Теперь вернемся к теореме Карла Якоби (см. предыдущий пост)
"If the determinant of a block $= R$, the determinant of any minor of the $m$th degree of the adjugate block is the product of $R^{m-1}$ and the coefficient which, in $R$, multiplies the determinant of the corresponding minor."
(C.Jacobi)
В терминах наших миноров со знаком эту теорему можно записать так
\[m! R_{j_1}^{[i_1}\ldots R_{j_m}^{i_m]}=R^{m-1}R_{j_1,\ldots,j_m}^{i_1,\ldots,i_m}\]
Я этого сразу не понял, но ведь мне никто и не подсказал. Так что эквивалентность выписанной формулы теореме Якоби должна быть понятна. Вообще-то, это уравнение говорит чуть больше, чем теорема Якоби, но это "чуть больше" — тривиальное утверждение, что если есть повторяющиеся верхние или нижние индексы, то ноль с обеих сторон и довольно простое утверждение о том, что знак правильный.
Кстати, тождество Доджсона Desnanot-Jacobi — это частный случай теоремы при $m=2$. Кстати, эквивалентное этому тождество и тоже очень красивое можно записать так
\[C_{m}^k R_{j_1\ldots j_k}^{[i_1\ldots i_k}\,R_{j_{k+1}\ldots j_m}^{i_{k+1}\ldots i_m]}=R\,R_{j_1,\ldots,j_m}^{i_1,\ldots,i_m}\]

Теперь собственно к найденным мной (приоритет!) тождествам. Я их умею доказывать, используя теорему Якоби, но кто же эту скуку в состоянии будет прочитать. А между тем, сами тождества — красоты неописуемой (в смысле, легче предъявить тождества, чем описать их красоту). Рассмотрим такой оператор
\[D_{j_1,\ldots,j_m}^{i_1,\ldots,i_m}=\left|\begin{array}{ccc}\frac{\partial}{\partial r_{i_1}^{j_1}}&\ldots&\frac{\partial}{\partial r_{i_m}^{j_1}}\\\vdots&\ddots&\vdots\\\frac{\partial}{\partial r_{i_1}^{j_m}}&\ldots&\frac{\partial}{\partial r_{i_m}^{j_m}}\end{array}\right|\]
Первое тождество такое
\begin{equation}D_{j_1,\ldots,j_m}^{i_1,\ldots,i_m} (R)^{\alpha}=\alpha (\alpha+1)\ldots (\alpha+m-1)R_{j_1,\ldots,j_m}^{i_1,\ldots,i_m} (R)^{\alpha-1}\end{equation}

А теперь рассмотрим симметричную матрицу
\[\left[\begin{array}{ccc}s_{1,1}&\ldots&s_{1,N}\\\vdots&\ddots&\vdots\\s_{1,N}&\ldots&s_{N,N}\end{array}\right]\]
Мне-то в статье как раз такая нужна была.  Соответственно, миноры будем буквой $S$ обозначать. Вопрос: можно ли похожую формулу написать для этого случая? Оказывается, можно. Используем теперь такой оператор
\[\tilde{D}_{j_1,\ldots,j_m}^{i_1,\ldots,i_m}=\left|\begin{array}{ccc}2^{\delta_{i_1,j_1}-1}\frac{\partial}{\partial s_{i_1,j_1}}&\ldots&2^{\delta_{i_m,j_1}-1}\frac{\partial}{\partial s_{i_m,j_1}}\\\vdots&\ddots&\vdots\\2^{\delta_{i_1,j_m}-1}\frac{\partial}{\partial s_{i_1,j_m}}&\ldots&2^{\delta_{i_m,j_m}-1}\frac{\partial}{\partial s _{i_m,j_m}}\end{array}\right|\]
Так вот, второе тождество выглядит так
\begin{equation}\tilde{D}_{j_1,\ldots,j_m}^{i_1,\ldots,i_m} (S)^{\alpha}=\alpha (\alpha+1/2)\ldots (\alpha+(m-1)/2)S_{j_1,\ldots,j_m}^{i_1,\ldots,i_m} (S)^{\alpha-1}\end{equation}

Вот такая производная по минору.