Очень часто приходится в лабораторных, домашних и курсовых работах портировать/набирать формулы, дабы показать цепочку размышлений, алгоритм или аналитический вывод. К тому же очень часто используется Matlab, для расчетов. Если задача решается символьно (symbolic computations) то по сути надо перенабивать формулы вывода Matlab с командного окна в Word или Open Office. Довольно нудная и неблагодарная работа.
Решение
Порившись немного в help, нашел все таки, что нужно. Есть такая функция latex(), которая представляет символьное выражение в LaTeX виде. Да к стате, чтобы переводить формулы из Matlab в MS Word, LaTex знать не обязательно.
Для примера возьмем простую программку:
%clear workspace and console output clc clear %define of symbolic variables syms t beta_1 omega %build symbolic expression %movement of angle alpha_2=atan(tan(t*omega)/cos(beta_1)) %differentiates movement of angle 2 times ddalpha_2=diff(alpha_2,t,2)
Вывод в консоли будет следующим:
alpha_2 = atan(tan(omega*t)/cos(beta_1)) ddalpha_2 = (2*omega^2*tan(omega*t)*(tan(omega*t)^2 + 1))/(cos(beta_1)*(tan(omega*t)^2/cos(beta_1)^2 + 1)) - (2*omega^2*tan(omega*t)*(tan(omega*t)^2 + 1)^2)/(cos(beta_1)^3*(tan(omega*t)^2/cos(beta_1)^2 + 1)^2)
Не очень читабельно, не правда ли? Можно конечно использовать функцию pretty (), что сделает формулы наглядными, но в любом случае надо будет их вручную набирать.
Добавим в коде еще пару строк:
tex_out_alpha_2 = latex(alpha_2) tex_out_ddalpha_2 = latex(ddalpha_2)
Эти команды просто преобразуют коды Matlab в LaTeX. В командном окне получим результаты:
tex_out_alpha_2 = \arctan\!\left(\frac{\tan\!\left(\mathrm{omega}\, t\right)}{\cos\!\left(\mathrm{beta}_{1}\right)}\right) tex_out_ddalpha_2 = \frac{2\, {\mathrm{omega}}^2\, \tan\!\left(\mathrm{omega}\, t\right)\, \left({\tan\!\left(\mathrm{omega}\, t\right)}^2 + 1\right)}{\cos\!\left(\mathrm{beta}_{1}\right)\, \left(\frac{{\tan\!\left(\mathrm{omega}\, t\right)}^2}{{\cos\!\left(\mathrm{beta}_{1}\right)}^2} + 1\right)} - \frac{2\, {\mathrm{omega}}^2\, \tan\!\left(\mathrm{omega}\, t\right)\, {\left({\tan\!\left(\mathrm{omega}\, t\right)}^2 + 1\right)}^2}{{\cos\!\left(\mathrm{beta}_{1}\right)}^3\, {\left(\frac{{\tan\!\left(\mathrm{omega}\, t\right)}^2}{{\cos\!\left(\mathrm{beta}_{1}\right)}^2} + 1\right)}^2}
Бред... Он нам поможет!!!
Что бы корректно воспроизвести формулы, необходимо установить надстройку для MS Word, которая называется MathType. В моем случае была использована 6 я версия. Устанавливаем прогу, появляется новая вкладка (Office 2007) на панели. Дальше нужно проделать следующие действия (в картинках, без комментариев):
Step 1
Step 2
Step 3
Step 4
Step 5
Все сконфигурировано, теперь просто вставим LaTeX (тот бредовый набор символов ) текст в редактор формул, результат будет слудующим:
Неплохо, правда? Первую формулу можно было конечно набрать, но вторую? (Мне было бы лень)
Нужно заметить, что в LaTeX индекс обозначается через нижние подчеркивание, k_1 = k1. То есть обозначив символьную переменную в таком виде, мы определяем ее индекс. Важно, то что если переменная будет задана в виде k_22 то индексом будет считаться только первый символ, результат будет k12. (в LaTeX если символов в индексе больше чем один, их нужно заключить в фигурные скобки k_{22} ).Важно это помнить, да бы не запутаться потом.
Теперь попробуем заменить названия переменных на грецкие буквы:
Немного модифицируем нашу программу:
clc clear syms t beta_1 omega alpha_2=atan(tan(t*omega)/cos(beta_1)) ddalpha_2=diff(alpha_2,t,2) tex_out_alpha_2 = latex(alpha_2) tex_out_ddalpha_2 = latex(ddalpha_2) %find 'beta' and replace on '\\beta' str_find='beta' str_replace = '\\beta' str_out = regexprep(tex_out_alpha_2, str_find, str_replace) %find 'omega' and replace on '\\omega' str_find ='omega' str_replace = '\\omega' str_out = regexprep(str_out, str_find, str_replace)
Добавленные команды 'beta' на '\\beta' (для LaTeX нужно только \beta, но для того чтобы Matlab не запутался, \ обозначают как \\).
\beta и \omega -нарисует соответственно грецкую бету и омегу.
Так лучше?Теперь попробуем вставить LaTeX код в Kile. Минимальный документ с формулой будет иметь вид:
\documentclass[a4paper,10pt]{article} \usepackage[utf8x]{inputenc} %opening \title{} \author{} \begin{document} \maketitle \begin{abstract} \end{abstract} \[ \frac{2\, {\mathrm{\omega}}^2\, \tan\!\left(\mathrm{\omega}\, t\right)\, \left({\tan\!\left(\mathrm{\omega}\, t\right)}^2 + 1\right)}{\cos\!\left(\mathrm{\beta}_{1}\right)\, \left(\frac{{\tan\!\left(\mathrm{\omega}\, t\right)}^2}{{\cos\!\left(\mathrm{\beta}_{1}\right)}^2} + 1\right)} - \frac{2\, {\mathrm{\omega}}^2\, \tan\!\left(\mathrm{\omega}\, t\right)\, {\left({\tan\!\left(\mathrm{\omega}\, t\right)}^2 + 1\right)}^2}{{\cos\!\left(\mathrm{\beta}_{1}\right)}^3\, {\left(\frac{{\tan\!\left(\mathrm{\omega}\, t\right)}^2}{{\cos\!\left(\mathrm{\beta}_{1}\right)}^2} + 1\right)}^2} \] \end{document}
Нужно заметить, что в LaTeX редакторах нужно не просто вставить формулу из Matlab, но заключить ее в "\[" и "\[" (без кавычек):
\[ \arctan\!\left(\frac{\tan\!\left(\mathrm{\omega}\, t\right)}{\cos\!\left(\mathrm{\beta}_{1}\right)}\right) \]
Думаю идея понятна))), надеюсь поможет Вам с экономить время и избавиться от рутинной работы. Когда разберусь с регулярными выражениями, постараюсь решить проблему с индексами да и более красиво реализовать замену строк.
Полезные ссылки:
http://www.mathworks.com/access/helpdesk/help/toolbox/symbolic/latex.html
http://www.math.harvard.edu/texman/node21.html
No comments:
Post a Comment