четверг, 2 июля 2009 г.

Пример символьных преобразований в EMaxima

Подробное описание использования интерфейсов интерактивной и пакетной работы с Maxima, а также интерфейса EMaxima приведено в документации Jay Belanger Maxima and Emacs. Найти ее можно в установленной версии Maxima, например,
C:\Program Files\Maxima-5.18.1\share\maxima\5.18.1\doc\EMaximaIntro.ps

Приведу наиболее часто используемые ключи:
C-c C-o Создание стандартной ячейки.
C-c + Переход к следующей ячейке.
C-c - Переход к предыдущей ячейке.
C-c C-u c Обновить (выполнить) текущую ячейку. Результат - в текстовом формате.
C-c C-u C Обновить (выполнить) текущую ячейку. Результат - в формате TeX.
C-c C-d Очистить вывод, генерируемый Maxima для данной ячейки.

Пришло время рассмотрения более серьезного примера использования EMaxima. Для его описания понадобится ввести еще несколько новых понятий, каждое из которых рассмотрим отдельно на простых примерах. Прежде всего, необходимо упомянуть ссылки на другие ячейки.

Ссылки на другие ячейки



Помечаем одну из ячеек, например [filename:definef]. Другая ячейка должна быть также помечена тем же filename, но с уникальной меткой ячейки. Добавялем ссылку <filename:definef>. Ткаим образом, вместо ссылки будет выполнена ячейка с этой меткой. Результат ее работы - также будет отображен в вызывающей ячейке. Таким образом, при вычислении ячейки filename:optional сначала переменной x будет присвоено значение 3, затем выражение в вызывающей ячейке будет вычислено с учетом этого значения.

\begin{maxima}[filename:optional]
<filename:definef>
x^2;
\maximaoutput*
\m 9 \\
\end{maxima}

\begin{maxima}[filename:definef]
x:3$%$
\end{maxima}


Использование $%$ - это предложенный в заметке Графики в EMaxima
способ подавления вывода Maxima в LaTeX-окружении.

Использование произвольных символов при обозначении переменных



Такие символы как a, b, c, x, y, z... не всегда оказываются достаточными для обозначения переменных. Что если нам требуется использовать символы греческого алфавита с подстрочными и надстрочными символами индексами и т.д.? В LaTeX имеются все необходимые средства для работы с ними, но Maxima ничего такого не предоставляет, а корректировать вручную генерируемые формулы слишком непроизводительно, кроме того, велика вероятность случайной ошибки. Ответ на этот вопрос, как ни странно, находится в FAQ Maxima:http://maxima.sourceforge.net/ru/faq.html#TeXOutput0.
Тогда для того чтобы возвести экспоненту в переменную лямбда с подстрочным символом гамма e^{\lambda_{\gamma}} необходимо:

Создать файл vars.lisp где-нибудь неподалеку от редактируемого tex-файла, и записать в нем:
(defprop $lambda_gamma "\\lambda_{\\gamma}" texword)

Тем самым мы ассоциируем обозначение lambda_gamma с его TeX-овым представлением \lambda_{\gamma}
Теперь записываем в ячейке:
\begin{maxima}
load("vars.lisp")$%$
exp(lambda_gamma);
\end{maxima}

Вычисляем C-c C-u C. Результат
\m e^{\lambda_{\gamma}} \\
т.е. как раз e^{\lambda_{\gamma}}

Скрытые элементы текста



Довольно часто бывает удобно иметь некую ячейку, в которой помимо загрузки обозначений переменных выполняются другие инициализирующие действия, которые актуальны для ряда других ячеек. Однако, в результирующем pdf-додкументе нам ее иметь совсем не обязательно. Такие ячейки следует обозначать звездочкой:
\begin{maxima*}
\end{maxima*}


Однако, эту ключевую ячейку также приходится довольно часто редактировать. Можно осуществлять навигацию по ячейкам, но когда их число велико это долго; можно использовать штатные средства Emacs, такие как закладки, но нельзя забывать, что мы используем такое мощное средство как ecb. Значит нам необходим элемент документа, который бы отображался в окне навигации по методам, но при этом отсутствовал в результирующем документе. Ответ был подсмотрен тут http://forum.ru-board.com/topic.cgi?forum=5&topic=30211

%Многострочный комментарий
\newcommand{\hidden}[1]{}
...
\begin{document}
...

\hidden{
\section{Инициализация}}


Комплексный пример


Попросим Maxima решить для нас несложный интеграл и выдать результат в виде, пригодном для использования в результирующем документе.

%-*-EMaxima-*-
\documentclass[russian, ucthesis ,14pt, oneside]{article}
\usepackage{mathtext}%Использование русского текста в формулах
\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
\usepackage{geometry}
\geometry{verbose,a4paper}
\pagestyle{plain}
\usepackage{emaxima} %Позволяет использование EMaxima
\usepackage{pdfcolmk} %Позволяет использование EMaxima для pdf

\usepackage{amsmath} %для набора мат. формул
\usepackage{mathrsfs} %дополнительные математические шрифты

%Многосторочный комментарий
\newcommand{\hidden}[1]{}

\begin{document}

\fontsize{12pt}{12pt}
\selectfont

\hidden{
\section{Инициализация}}
\begin{maxima*}[filename:definef]
load("vars.lisp")$%$
\end{maxima*}

\begin{maxima*}[filename:optional]
<filename:definef>
'integrate(exp(lambda_gamma*x), x, 0, t);
integrate(exp(lambda_gamma*x), x, 0, t);
\end{maxima*}

\end{document}


Результат вычислений ячейки с меткой filename:optional
\m \int_{0}^{t}{e^{\lambda_{\gamma}\,x}\;dx}\big. \\
\m {{e^{\lambda_{\gamma}\,t}}\over{\lambda_{\gamma}}}-{{1}\over{\lambda_{\gamma}}} \\


Осталось вынести его из окружения Maxima и внести минимальные корректировки:
$$
\int_{0}^{t}{e^{\lambda_{\gamma}\,x}\;dx}\big. \\ =
{{e^{\lambda_{\gamma}\,t}}\over{\lambda_{\gamma}}}-{{1}\over{\lambda_{\gamma}}} \\
$$


Результат:
\int_{0}^{t}{e^{\lambda_{\gamma}\,x}\;dx} ={{e^{\lambda_{\gamma}\,t}}\over{\lambda_{\gamma}}}-{{1}\over{\lambda_{\gamma}}} \\

Комментариев нет:

Отправить комментарий