Показаны сообщения с ярлыком настройки. Показать все сообщения
Показаны сообщения с ярлыком настройки. Показать все сообщения

понедельник, 16 сентября 2013 г.

Про идеалы

Идеалов в реальном мире не бывает, но в математике они существуют еще как. Идеалы в  математике бывают разные, но здесь я расскажу про идеалы коммутативных колец.
Вообще, кольцо --- это множество, замкнутое относительно двух операций со свойствами сложения и умножения. Эти операции поэтому часто так и называют: сложение и умножение. Правда, коммутативность умножения не требуется, но нас интересует как раз кольцо с коммутативным умножением --- коммутативное кольцо. Ну еще хотят чтобы был нуль, и был противоположный элемент. Существование противоположного элемента позволяет определить в этом множестве и операцию вычитания по формуле $a-b\equiv a+(-b)$, где $-b$ --- элемент, противоположный $b$. Заметим, что существование единичного элемента и обратного элемента для ненулевого $a$ не требуется, и в этом принципиальное отличие кольца от поля.
Говоря неформально, в кольце деление даже на ненулевой элемент может быть невыполнимо. И, естественно, встает вопрос, а когда же деление все-таки выполнимо? Возьмем элемент кольца $a$ и спросим, какие элементы $b$ на него делятся, для каких $b$ разрешимо уравнение \begin{equation}b=ca.\label{eq1}\end{equation} Множество допустимых значений $b$ является примером идеала.

Возьмем самый простой пример коммутативного кольца — множество целых чисел $\mathbb{Z}$ с обычным сложением и умножением. Тогда, например, множество чисел, кратных числу $a$ является идеалом.

Можно расширить определение идеала так: пусть заданы несколько элементов кольца $a_1,\ldots,a_n$. Тогда идеал определим как множество значений $b$ (из кольца, конечно), для которых уравнение\begin{equation}b=c_1a_1+\ldots+c_na_n\label{eq2}\end{equation} разрешимо относительно $c_1,\ldots,c_n$ (в кольце, конечно). Про такие идеалы говорят, что они порождаются элементами $a_1,\ldots,a_n$. Для кольца целых чисел наше обобщение \eqref{eq2} не добавляет ничего нового. Чтобы это понять, заметим, что, во-первых, достаточно рассматривать идеалы, порожденные натуральными числами. Во-вторых, идеал, порожденный натуральными числами $a_1,\ldots,a_n$, совпадает с идеалом, порожденным  $\mathrm{GCD}(a_1,\ldots,a_n)$. Таким образом, в кольце целых чисел не только каждому натуральному числу соответствует идеал, но и наоборот, что открывает возможность переформулировать утверждения о натуральных числах в утверждения об идеалах. Вот, например, идеал, соответствующий простому числу (по понятным причинам называется простым идеалом), --- это собственный идеал (собственный $\equiv$ не совпадающий со всем кольцом), обладающий следующим свойством: для любого его элемента, имеющего вид произведения, по-крайней мере один из сомножителей также принадлежит идеалу. Теперь, когда у нас есть такое определение, мы можем его использовать для идеалов любых коммутативных колец, и, естественно, надеяться, что у этой и подобных конструкций есть простой смысл и большая польза.

Вот, например, рассмотрим полиномиальное кольцо ---  множество полиномов от $n$ переменных $x_1,\ldots,x_n$ с комплексными, скажем, коэффициентами. Полиномы, как и целые числа, можно складывать и умножать.  Обозначать это множество будем так: $\mathbb{C}[x_1,\ldots,x_n]$. В этом кольце наше обобщение \eqref{eq2} уже не сводится к \eqref{eq1}. Для кольца целых чисел каждый идеал у нас соответствовал натуральному числу, а для кольца полиномов идеалу можно придать гораздо более интересный смысл. А именно, идеалу, порожденному полиномами $p_1,\ldots,p_n$, сопоставим алгебраическое многообразие в $R^n$, заданное полиномиальными уравнениями \begin{align}p_1=0\nonumber\\\vdots\label{eq3}\\p_n=0\nonumber\end{align}Только вот это соответствие неоднозначное. В частности, если мы любой полином в системе \eqref{eq3} заменим на его степень, многообразие, очевидно не поменяется, а идеал, вообще говоря, поменяется. Чтобы соответствие было однозначным, нам нужно рассматривать не все идеалы, а то, что называется радикал-идеалы. Радикал-идеал $\mathcal{I}$ --- это идеал, для которого из условия $a^n\in \mathcal{I}$ следует $a\in \mathcal{I}$. Так вот соответствие между радикал-идеалами и алгебраическими многообразиями однозначно. Это означает, что, исследуя радикал-идеалы, можно исследовать алгебраические многообразия. Кстати, радикал-идеалы в кольце $\mathbb{Z}$ соответствуют натуральным числам, в разложении которых на простые нет степеней. Поэтому радикал-идеалы называются еще полупростыми. Очевидно, что простые идеалы являются также полупростыми, а обратное не всегда верно.
Пример приводимого многообразия,
заданного уравнением
$(x^2+y^2-4)(x^2-y)=0$



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

Красота идеальной математики на этом не кончается, но вот пост пора закруглять. Могу только порекомендовать для самообразования книжку Кокс, Литтл, О'Ши Идеалы, многообразия и алгоритмы. 

P.S. Все, можно статьи писать прямо в блоггере. Последний MathJax поддерживает нумерацию уравнений + ссылки через \ref и \eqref. Чтобы узнать как это включить, смотреть в коде поста скрипт с  src="...MathJax.js"

вторник, 2 апреля 2013 г.

Docked Cells в Mathematica

Все, кто программировал в Математике, знают, что одна из самых полезных операций называется Quit Kernel. Удивительно, что для нее нет ни клавиатурного сокращения, ни кнопки. Нужно лезть в меню Evaluation>Quit Kernel>Local, а затем еще жать Ok в появившемся окошке с предупреждением. Есть немного более простой способ, конечно --- ввести Quit и нажать Shift-Enter. Но если ядро занято другими вычислениями, этот способ не работает. Есть и третий способ: создать кнопку командой  Button["Quit", Quit[]] и жать на нее в свое удовольствие. Проблема в том, что кнопочка эта постепенно уплывает из зоны видимости. Можно, конечно, сгенерировать палитру (palette) и для кого-то это будет самый удобный вариант. Понятно, что для настоящего художника в палитре должна быть не только черная краска, так что в палитру можно оформить несколько ваших любимых кнопок.
Однако, в том, что палитра хранится отдельно от файла есть как достоинства, так и недостатки. Достоинства, понятно, в том, что одну палитру можно использовать при работе в любом файле. Недостаток --- в том, что взяв с собой файл на другой компьютер, нужно не забыть взять и установить туда и палитру. Выходом из этого концептуального тупика может стать Docked Cell. По сути, это та же палитра, только определенного вида. Важно, что хранится она  прямо в файле. Вот пример создания Docked Cell-а с тремя кнопками:
SetOptions[InputNotebook[], DockedCells -> {Cell[BoxData[ToBoxes[
      Row[{Button["Quit", Quit[]],
        Button["Abort", FrontEndTokenExecute["FindEvaluatingCell"];
         FrontEndTokenExecute["EvaluatorAbort"]],
        Button["Evaluate", FrontEndTokenExecute["EvaluateCells"];
         SelectionMove[InputNotebook[], Next, Cell]]}]
      ]],
    Background -> RGBColor[0.9, 0.9, 0.9],
    CellMargins -> 0,
    CellFrame -> {{0, 0}, {1, 0}}]}]

Жмем Shift-Enter и вуаля. Кому-то может показаться, что вбивать такую команду в каждом новом файле утомительно. Согласен, но тут можно и палитру сделать:
CreatePalette[Button["Install tools",SetOptions[InputNotebook[], DockedCells -> {Cell[BoxData[ToBoxes[
      Row[{Button["Quit", Quit[]],
        Button["Abort", FrontEndTokenExecute["FindEvaluatingCell"];
         FrontEndTokenExecute["EvaluatorAbort"]],
        Button["Evaluate", FrontEndTokenExecute["EvaluateCells"];
         SelectionMove[InputNotebook[], Next, Cell]]}]
      ]],
    Background -> RGBColor[0.9, 0.9, 0.9],
    CellMargins -> 0,
    CellFrame -> {{0, 0}, {1, 0}}]}]]]

А еще лучше --- сделать такую палитру
CreatePalette[{Row[{Button["Quit", Quit[]],
    Button["Abort", FrontEndTokenExecute["FindEvaluatingCell"];
     FrontEndTokenExecute["EvaluatorAbort"]],
    Button["Evaluate", FrontEndTokenExecute["EvaluateCells"];
     SelectionMove[InputNotebook[], Next, Cell]]}],
  Button["embed tools",
   SetOptions[InputNotebook[],
    DockedCells -> Most@First@NotebookGet[ButtonNotebook[]]],
   ContentPadding -> False, FrameMargins -> 0]}]

суббота, 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}=? \]

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

Матрицы и уравнения

Как известно, Льюис Кэрролл не только написал книги про Алису, но и был математиком. Занимался он в основном линейными уравнениями, матрицами и детерминантами. Я о его математических достижениях узнал совсем недавно. Точнее, я прочитал его статью о методе вычисления детерминантов.
Вот что он придумал. Пусть, например, нам нужно вычислить детерминант матрицы
\[\left[\begin{array}{ccccc}4&4&2&1&2\\4&4&5&2&2\\4&2&5&3&1\\2&5&3&1&2\\1&2&0&4&5\end{array}\right]\]
Делаем так: сначала вычисляем детерминанты блоков $2\times 2$ и строим из них матрицу размерности на один меньше:
\[\left[\begin{array}{cccc}0&12&-1&-2\\-8&10&5&-4\\16&-19&-4&5\\-1&-6&12&-3\end{array}\right]\]
Далее делаем то же самое, но теперь каждый детерминант $2\times 2$ делим на соответствующий элемент внутренности первой матрицы. Внутренность матрицы — это матрица, получающаяся из исходной вычеркиванием первой и последней строки и первого и последнего столбца. Получаем
\[\left[\begin{array}{ccc}24&14&7\\-4&11&3\\-23&-84&-48\end{array}\right]\]
Повторяя процесс, получаем
\[\left[\begin{array}{ccc}\begin{array}{cc} 32 & -7 \\-31 & 69\end{array}\end{array}\right]\]
\[\left[181\right]\]
Получившееся число и есть детерминант исходной матрицы.
Если сравнить число операций
\[N(\mbox{Доджсон})=3(n-1)^2+4(n-2)^2+\ldots=\frac{1}{3} (n-1) \left(4 n^2-5 n+3\right)\]
с числом операций при разложении по строке
\[N(\mbox{По строке})=e \Gamma (n+1,1)-2,\]
(эту формулу можно получить, решая рекуру) видим, что для больших матриц получаем значительный выигрыш. Но если мы будем просто методом Гаусса приводить матрицу к треугольному виду, получим
\[N(\mbox{Гаусс})=\frac{1}{6} (n-1) \left(4 n^2+n+6\right)\]
т.е., немного лучше, чем метод Доджсона. Есть еще особенные случаи, когда один из внутренних элементов матрицы оказывается равным нулю. В этом случае получается неопределенность и нужно начинать почти сначала. Так что с практической точки зрения метод Доджсона так себе. Вообще-то, я статью стал читать по другому поводу, а именно, по поводу так называемого тождества Доджсона, которое на поверку оказалось элементарным следствием теоремы Якоби, приведенной опять в  вышеупомянутой статье:
" 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."
(Jacobi)
Про эту теорему и про красоты с ней связанные я еще, может быть, напишу. Ну а пост этот написан чтобы проверить работу скрипта LaTeXMathML.js, а точнее, его модификации, которая позволяет делать матрицы и выключные уравнения, используя нормальный синтаксис LaTeXа. И еще, этот скрипт работает и для Оперы.

PS Только что выяснил, что описанный метод вычисления детерминантов можно найти в английской википедии в соответствующей статье. Там тождество Доджсона называется Desnanot-Jacobi identity, и это, по-моему, правильно.

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

Интерференция и SVG

Вчера Ваня напомнил про один вопрос из квантовой механики, с которым я когда-то разобрался.
Все знают, как борновская амплитуда рассеяния на нескольких одинаковых центрах выражается через амплитуду рассеяния на одном. А именно, появляется множитель
\[F(\vec{q})=\sum_{k=0}^{N} e^{i\vec{q}\vec{r}_k}.\]
Если центры образуют периодическую структуру, этот множитель приводит к тому, что в интерференционных максимумах сечение увеличивается в $N^2$ раз.
Допустим теперь, что мы случайно бросаем рассеивающие центры в большой ящик и после этого они остаются неподвижными. Каким будет сечение? Я в свою бытность студентом 3-его курса, пока не обдумал вопрос самостоятельно, считал, что дифференциальное сечение будет примерно равно
\[\frac{d\sigma_N}{d\Omega}\approx N\frac{d\sigma_1}{d\Omega},\]
а отклонения будут расти медленнее чем $N$ (как $\sqrt{N}$). Ниже скрипт, который поможет "экспериментально" изучить вопрос. Как можно заметить, отношение сечения на $N$ центрах к умноженному на $N$ сечению на одном и не думает стремиться к единице при $N\to\infty$. Действительно ли это так, или это артефакт моделирования?


$\displaystyle{\frac{d\sigma_N/d\Omega}{N d\sigma_1/d\Omega}=\left|F(q)\right|^2/N=}$?


$\lambda=\frac{2\pi}{q}=$ — расстояние между красными линиями.

Вообще-то, этот пост еще служит проверкой возможности включения svg в блог. Скажу честно, делается через ж... использование javascript. Правда, если хочешь интерактивности, javascript все-равно нужен. Кто будет смотреть в код, обратите внимание на функцию createSVG. Вроде, мелочь, а времени много экономит.