MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

Приложения с GUI и дескрипторная графика

Вывод математических формул, смена шрифта и начертания

В MATLAB имеется возможность вывода достаточно сложных математических формул, содержащих индексы, дроби, корни, интегралы и суммы, матрицы и специальные математические знаки, с использованием интерпретаторов TeX и LaTeX.

В справочной системе MATLAB соответствующая информация размещена в следующих разделах:

  • MATLAB: Handle Graphics Property Browser, в правом окне надо щелкнуть по ссылке Axes, затем по Core Objects и потом по Text и посмотреть на значения свойств Interpreter и String текстового объекта.
  • MATLAB: Graphics: Annotating Graphs: Adding Text Annotations to Graphs: Mathematical Symbols, Greek Letters, and TEX Characters - приведен пример формулы, содержащей греческие буквы и индексы, сделанной при помощи интерпретатора TeX.
  • Страница с информацией о функции text, перейти к которой можно, например при помощи команды >> doc text.

Смена шрифтов, начертания, размеров, индексы, разные знаки. Интерпретатор TeX.

Формула является текстовым объектом, который создается при помощи функции text (см. Размещение текстового объекта, определение его размеров и положения). В качестве простого примера рассмотрим размещение подписи на графике функции sin x2; e-x, построенном на отрезке [0, 5] при помощи fplot, которая сама подбирает значения аргумента для получения наиболее точного графика:

fplot('sin(x.^2)*exp(-x)', [0 5])

Для создания текстового объекта применим функцию text, указав в ее входных аргументах координаты текстового объекта по оси абсцисс 2.5 и по оси ординат 0.15, строку текста 'sin({\itx}^2){\ite}^{-{\itx}}' и размер шрифта 20 пт.

hT = text(2.5, 0.15, 'sin({\itx}^2){\ite}^{-{\itx}}', 'FontSize', 20)

На оси выводится формула, а не в точности те символы, которые были заданы в текстовой строке

Так происходит потому, что по умолчанию функция text интерпретирует некоторые символы и сочетания как теги формата TeX (из-за того, что свойство Interpreter текстового объекта имеет значение 'tex') и соответствующим образом форматирует выводимый на оси текст так, как указано на рисунке ниже.

В данном случае команда \it привела к форматированию курсивом того текста, который вместе с \it заключен в фигурные скобки, а символ ^ позволил создать верхние индексы: двойку и содержимое фигурных скобок -{\itx}, из которого получилось -x. Для создания нижнего индекса следует воспользоваться знаком подчеркивания, например последовательность команд:

>> figure
>> text(0.5, 0.5, '({\ita}_{\iti}+{\itc}_{\iti})^2',  'FontSize', 30)

приводит к следующему результату:

Если нижним или верхним индексом размечается более одного символа, то все они должны быть заключены в фигурные скобки, сравните:

'A_ij^(1)' приводит к неверному результату
'A_{ij}^{(1)}' к верному

Если текст не размечен, то интерпретатор TeX выводит его прямым шрифтом, как в нашем предыдущем примере. Для изменения начертания части текста следует применить одну из следующих команд:

  • \bf - для жирного текста;
  • \it - для курсива;
  • \rm - для обычного текста.

и заключить текст в фигурные скобки. Если пропустить фигурные скобки, то действие команды распространится либо до конца строки, либо до следующей команды смены начертания, если она противоречит данной команде (текст может быть отформатирован одновременно и жирным и курсивом, но прямым шрифтом и курсивом не может). Ниже приведены некоторые примеры смены начертания шрифта вместе с получающимся результатом:

Строка Результат Комментарии
'ABC\itDEF\bfIJK\rmLMNOP' команда \bf не противоречит \it, т.к. текст может быть одновременно отформатирован жирным и курсивом, после команды \rm убирается все форматирование и текст выводится прямым шрифтом
'ABC{\itDEF}{\bfIJK}LMNOP' действие команд \it и \bf распространяется только на текст, заключенный в фигурные скобки.
'\itABCDEF{\bfIJK}LMNOP' форматирование курсивом применено ко всей строке, а дополнительная разметка жирным шрифтом действует только внутри фигурных скобок

Кроме смены форматирования, возможно изменять шрифт и его размер. Для этого предназначены следующие команды:

  • \fontname{имя шрифта} - смена шрифта. В фигурные скобки вводится название одного из шрифтов, установленных на компьютере.
  • \fontsize{размер шрифта} - смена размера шрифта. По умолчанию, указанное в фигурных скобках значение воспринимается в пунктах, т.к. свойство FontUnits текстового объекта по умолчанию имеет значение 'points' (пункты). Если свойство FontUnits текстового объекта установлено в другое значение, то будут использоваться соответствующие единицы измерения (см. Размещение текстового объекта, определение его размеров и положения).

В одном текстовом объекте можно отформатировать текст несколькими шрифтами. При этом следует учесть, что область действия одной команды \fontname распространяется до другой команды \fontname или до конца строки. Например, указание во входных аргументах функции text следующей строки

 
'\fontname{Courier}ABCDEF\fontname{Arial}LMNOP'

приводит к появлению текстового объекта, в котором первая половина текста отформатирована моноширинными шрифтом Courier, а вторая - пропорциональным шрифтом Arial

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

'\fontsize{40}\fontname{Courier}ABC\itDE\bfF\fontname{Arial}LM\fontsize{10}NOP'

позволяет получить такой текст:

в котором размер символов сначала 40пт., затем 10пт., применены шрифты Courier и Arial, а так же курсив и жирный шрифт.

Для подписей осей, заголовка и легенды, которые делаются функциями xlabel, ylabel, zlabel и title, также можно использовать верхний и нижний индекс, смену начертания, шрифта и его размера, например:

xlabel('{\itx}_i')
title('\bfVery simple \rmfunction')

Так происходит потому, что подписи осей и заголовок, создаваемые функциями высокоуровневой графики xlabel, ylabel, zlabel и title, в действительности являются текстовыми объектами, принадлежащими осям в иерархии графических объектов MATLAB (см. раздел Заголовок и подписи осей это текстовые объекты, потомки осей).

В режиме интерпретатора TeX (когда свойство Interpreter текстового объекта установлено в 'tex', как по умолчанию), можно выводить различные математические символы, прописные и строчные греческие буквы. Для просмотра полной таблицы доступных символов и греческих букв следует обратиться к разделу справочной системе MATLAB, содержащему описание функции text:

>> doc text

В появившемся окне достаточно перейти по гиперссылке String и посмотреть таблицу. В ней приведены команды TeX, начинающиеся со знака обратной косой черты, для вывода следующих символов:

  • прописных и строчных греческих букв \alpha, \beta, \gamma, \Gamma, \Sigma, \Pi и т.д.
  • различных стрелок \leftarrow, \uparrow, \rightarrow и т. д.
  • символов пересечения, объединения и принадлежности \cup, \cap, \in и т.д.
  • знаков "больше или равно", "меньше или равно", "не равно" \geq, \leq, \neq
  • кванторов \forall, \exists
  • других знаки

При помощи этих знаков можно набирать несложные формулы, например указание в функции text строки

'\forall{\itn} \exists{\epsilon}: |{\itx}-{\itx_n}|\leq\epsilon'

приводит к следующему тексту:

а строки

text(0.5, 0.5, '\Sigma_{{\itn}=1}^\infty1/{\itn} = \infty',  'FontSize', 30)

к формуле

которая уже выглядит не очень красиво.

БОльшие возможности для набора математических формул предоставляет интерпретатор LaTeX.

Интерпретатор LaTeX.

Для того, чтобы MATLAB использовал интерпретатор LaTeX вместо интерпретатора TeX, следует установить свойству Interpreter текстового объекта значение 'latex' и заключать выносную формулу (т.е. формулу, записываемую на отдельной строке) слева и справа в знаки $$ (два идущих подряд знака доллара). Если формула должна быть в тексте, то ее следует окружать слева и справа знаками $. Установить значение свойству текстового объекта можно при помощи функции set (см., например разд. Размещение текстового объекта, определение его размеров и положения), либо прямо при его создании функцией text в ее входных аргументах, как и будет делаться во всех следующих примерах.

Подробную информацию о работе в пакете LaTeX можно почерпнуть, например, из следующих источников:

  • С.М. Львовский. Набор и верстка в пакете LaTeX. М.: Космос-информ, 1995.
  • L.Lamport. LaTeX. A Document Preparation System, User's Guide and Reference Manual. Addison-Wesley, 1994.
  • сайт http://www.latex-project.org.

Мы рассмотрим основные приемы набора наиболее часто встречающихся формул при помощи интерпретатора LaTeX пакета MATLAB.

Суммы, произведения, интегралы, дроби, предел, корни.

Предыдущая формула, полученная в интерпретаторе TeX,

может быть выведена следующим образом (во всех примерах используется figure для создания нового графического окна, поскольку, если оси существуют, то низкоуровневая функция text выводит новый текстовый объект на них, не удаляя имеющиеся на них графические объекты, что приводит к наложению объектов):

figure
text('Position', [0.5 0.5], 'Interpreter', 'latex', 'String',...
    '$$\sum_{n=1}^\infty\frac1n=\infty$$', 'FontSize', 30)

В этом примере использованы следующие команды:

  • команда \sum для вывода знака суммирования, в которой верхний и нижний пределы суммирования указываются при помощи знаков верхнего и нижнего индексов ( ^ и _ );
  • команда \frac для получения дроби.

Если числитель и знаменатель дроби содержат больше одного символа (или числитель не цифра), то их следует заключать в фигурные скобки. В дальнейшем, для избежания путаницы, будем всегда использовать фигурные скобки, т.е. например вместо \frac12 будем писать \frac{1}{2}. Последовательность команд:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$F(x)=\frac{1+x}{1+\frac{1+x^2}{1+x^3}}$$','FontSize', 20)

приводит к формуле

в которой символы x и цифры имеют разные размеры в зависимости от того, в какой из дробей они находятся.

Для того, чтобы размер символов в дроби , стоящей в знаменателе в предыдущей формуле, совпадал с размером остальных символов в этой формуле, следует использовать команду \displaystyle, помещаемую перед командой \frac, как это сделано в следующем примере

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$F(x)=\frac{1+x}{1+\displaystyle\frac{1+x^2}{1+x^3}}$$', 'FontSize', 20)

Для написания интегралов используется команда \int, однако указание пределов при помощи знаков _ и ^ приводит к тому, что пределы расположены не сверху и снизу от знака интеграла (как для суммы), а правее него:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\frac{1}{b^a\Gamma(a)}\int_{0}^{x}t^{a-1}e^{\frac{t}{b}} dt$$','FontSize', 20)

Если же требуется расположить верхний и нижний пределы интегрирования строго сверху и снизу по отношению к знаку интеграла, то необходимо добавить команду \limits сразу после команды \int, например:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\frac{1}{b^a\Gamma(a)}\int\limits_{0}^{x}t^{a-1}e^{\frac{t}{b}} dt$$','FontSize', 20)

делает формулу, которая занимает немного больше места по вертикали, по сравнению с предыдущей, но выглядит несколько красивее:

Кроме обычного знака интеграла есть еще знак для контурного интеграла, который выводится при помощи команды \oint, например:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\oint_{\Gamma} f(s) ds$$', 'FontSize', 30)

выводит интеграл по контуру:

Разумеется, для того, чтобы символ Г находился снизу, а не справа от знака интеграла, следует сразу после \oint применить команду \limits, как и в предыдущем примере.

В отличие от интегралов, пределы суммирования по умолчанию указываются над и под знаком суммы. Если же требуется расположить их справа от знака суммирования, то следует указать команду \nolimits, например:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\sum\nolimits_{n=1}^\infty\frac1n=\infty$$', 'FontSize', 20)
обеспечивает требуемый результат

Для вывода знака предела применяется команда \lim, которая позволяет задать подпись под ней при помощи знака нижнего индекса:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\lim_{x\rightarrow0} \frac{\sin x}{x}=1$$', 'FontSize', 20)

Команды для других символов, допускающих задание пределов, примеры их использования и получающийся результат приведены в следующей таблице.

Команда Пример Результат
\min '$$\min_{x\in[a,b]}f(x)$$'
\max '$$\max_{x\in[a,b]}f(x)$$'
\inf '$$\inf_{x\in[a,b]}f(x)$$'
\sup '$$\sup_{x\in[a,b]}f(x)$$'
\bigcup '$$\bigcup_{i=1}^{n+1}A_{i}$$'
\bigcap '$$\bigcap_{i=1}^{n+1}B_{i}$$'
\bigoplus '$$\bigoplus_{k=1}^{\infty}\tau^{(k)}$$'
\bigotimes '$$\bigotimes_{k\ne i}\Delta^k$$'

Знак квадратного корня выводится при помощи команды \sqrt, а само подкоренное выражение заключается в фигурные скобки, например:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\sqrt{1+\sqrt{1+x}}$$', 'FontSize', 20)

создает выражение, в которое входят квадратные корни

Если же требуется получить корень заданной степени, то значение степени указывается в квадратных скобках после команды \sqrt, а уже после нее идет подкоренное выражение, взятое в фигурные скобки, например:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\sqrt[3]{1+\sqrt[7]{1+x}}$$', 'FontSize', 20)

приводит к

Разные скобки и ограничители переменного размера.

Скобки, набранные в формуле, не меняют своего размера в зависимости от того, что они окружают, например команды

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$[1+(\frac{a}{b})^3]^{-1}$$','FontSize', 20)

приводят к не очень красивой формуле

Скобки или ограничители (например, знак модуля) могут изменять свои размеры автоматически, для чего следует использовать команды \left и \right в сочетании с нужными скобками или ограничителями, например:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\left[1+\left(\frac{a}{b}\right)^3\right]^{-1}$$','FontSize', 20)

приводят к той же формуле, что и в предыдущем примере, которая выглядит намного лучше.

Возникает вопрос, как выводить фигурные скобки, используемые в LaTeX с целью ограничения некоторой группы символов, которые к примеру, должны стать верхним или нижним индексом в формуле или верхним или нижним пределом суммы или интеграла. Следующее обращение

text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\left{1+\left(\frac{a}{b}\right)^3\right}^{-1}$$','FontSize', 20)

приведет к выводу предупреждения в командное окно о невозможности интерпретировать строку Warning: Unable to interpret TeX string. Missing delimiter (. inserted). а сам текстовый объект не будет содержать формулы. Вместо символов фигурных скобок этого следует указать команды \{ и \}, т.е.

figure
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\left\{1+\left(\frac{a}{b}\right)^3\right\}^{-1}$$','FontSize', 20)

приведет к правильному результату

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

Ограничитель Пример Результат
| '$$\left| \frac{a}{b} \right|$$'
\| '$$\left\| \frac{a}{b} \right\|$$'
\lfloor и \rfloor '$$\left\lfloor \frac{a}{b} \right\rfloor$$'
\langle и \rangle '$$\left\langle \frac{a}{b} \right\rangle$$'
\lceil и \rceil '$$\left\lceil \frac{a}{b} \right\rceil$$'

Часто нужно поставить только один ограничитель, размер которого подбирается автоматически. Для этого так же используется комбинация команд \left и \right, и вместо одного ограничителя ставится точка, например:

figure
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\left. \frac{1}{1+x} \right|_{1/2}^{3/2}$$', 'FontSize', 20)

приводит к появлению справа от дроби знака вертикальной черты:

Тригонометрические, гиперболические функции и логарифмы

Для тригонометрических, гиперболических функций и логарифмов предусмотрены специальные команды:

\sin \cos \tan \cot \arcsin \arccos \arctan \log \ln  \sinh \cosh \tanh \coth

поскольку по принятым правилам они должны набираться прямым шрифтом. Например команда \sin и текст sin приводят к разным результатам, причем первый является правильным, поскольку по умолчанию латинские буквы выводятся курсивом

Если же требуется набрать не tan, а tg, как это принято в русской литературе, то придется прибегнуть к смене шрифтов.

Для установки прямого шрифта при работе с интерпретатором LaTeX следует использовать команду

\mathrm. Строка '$${\mathrm tg}x$$'

приводит к формуле

в которой не хватает небольшого пробела после знака тангенса. Для того установки пробела можно действовать двумя способами:

  1. либо установить его при помощи специальных команд (пробел в строке '$${\mathrm tg} x$$' перед x не приведет к желаемому результату), которые описаны в разд. Установка интервалов в формулах;
  2. либо воспользоваться командой \mathop следующим образом: '$$\mathop{{\mathrm tg}}x$$', тогда получится стандартный пробел между именем функции и ее аргументом, такой же, как делается по умолчанию в других функциях:

Смена шрифтов для интерпретатора LaTeX

При использовании интерпретатора LaTeX, команды \rm, \bf и \it, которые меняли начертание в TeX, работать не будут. Вместо них применяются другие команды, одна из них, \mathrm, использовалась в предыдущем разделе Тригонометрические, гиперболические функции и логарифмы для получения прямого шрифта. Другие команды приведены в таблице вместе с примерами и получающимся результатом.

Шрифт Пример Результат
\mathcal
каллиграфический
'$${\mathcal A}$$'
\mathbf
жирный
'$${\mathbf A}$$'
\mathit
курсив для греческих букв
'$${\mathit \Pi}$$'

Установка интервалов в формулах

Как правило, интервалы в формулах ставятся автоматически и результат выглядит хорошо, однако иногда приходится прибегать к ручной установке интервалов. Например, в формуле

лучше сделать небольшой интервал перед dx воспользовавшись командой установки пробела \, (косая черта и запятая) следующим образом '$$\int_{0}^{1}x\,dx$$'

Для задания интервалов различной ширины существует несколько команд:

  • \quad - интервал, длина которого совпадает с шириной буквы M;
  • \qquad - интервал, равный 2-ум \quad;
  • \, - интервал, равный 1/6-ой \quad;
  • \: - интервал, равный 2/9-ым \quad;
  • \; - интервал, равный 5/18-ым \quad;
  • \! - уменьшение интервала на 1/6-ую \quad.

Горизонтальные скобки, линии и стрелки

Для получения горизонтальных линий, скобок и стрелок над и под формулами следует использовать следующие команды, заключая выделяемый текст в фигурные скобки и помещая его после команды:

  • \overline - черта над формулой
  • \underline - черта под формулой
  • \overrightarrow - стрелка над формулой, направленная вправо
  • \overleftarrow - стрелка над формулой, направленная влево
  • \overbrace - горизонтальная фигурная скобка над формулой
  • \underbrace - горизонтальная фигурная скобка под формулой

Для скобок можно использовать и подпись к ней, задавая ее индексом. Например,

'$$\underbrace{a_1 + a_2+ \cdots + a_n}_{n}$$'

приводит к

Аналогично при помощи верхнего индекса делается подпись для верхней горизонтальной скобки.

Формулы в тексте и текст в формулах.

Если формулы должны быть в тексте, то их следует окружать знаками $ с каждой стороны, например

figure
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String', ...
    'If $a=0$ and $b=0$ then $\int_{a}^{b}f(x)dx=0$', 'FontSize', 15)

приводит к

Для получения такого же знака интеграла, как в выносной формуле, достаточно поставить в последней формуле два знака доллара $$ без пробела слева и справа:

figure
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String', ...
    'If $$a=0$$ and $$b=0$$ then $$\int_{a}^{b}f(x)dx=0$$', 'FontSize', 15)

В этом отличие интерпретатора LaTeX в MATLAB от классического LaTeX, в котором формула, заключенная в два знака доллара $$ становится выносной, т.е размещается на отдельной строке документа.

Текст в формуле вводится при помощи команды \mbox, сам текст помещается после нее в фигурных скобках, причем пробелы в тексте учитываются. Например, следующая последовательность операторов

figure
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String', ...
    '$$\mbox{If } a=0 \mbox{ and } b=0 \mbox{ then } \int_{a}^{b}f(x)dx=0$$', 'FontSize', 15)

приводит к тому же самому результату:

Если не использовать команду \mbox, то символы текста будет интерпретироваться как переменные, выводиться курсивом без пробелов и получится некрасиво:

Расположение формул в несколько строк и вывод матриц

Разумеется, вывод формул в несколько строк возможен при помощи создания нескольких текстовых объектов при помощи функции text. Однако, использование одного текстового объекта и интерпретатора LaTeX дает определенные преимущества, например при наборе матриц. Для вывода формулы в несколько строк следует использовать окружение array, в котором указываются: способ выравнивания (c - по центру, l - по левому краю и r - по правому краю), разделители в строке символом & и концы строк символами \\

\begin{array}{lll}
формула & формула & формула \\
формула & формула & формула \\
формула & формула & формула
\end{array}

Например, команды

figure
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    '$$\begin{array}{lll} 2x+3y&=&5 \\ 4x+y&=&5 \end{array}$$', 'FontSize', 20)

приводят к появлению двух формул (одного текстового объекта), в которых выравнивание сделано по знаку равенства

При включенном интерпретаторе LaTeX, функция text требует в качестве значения свойства String строку или строковую переменную, которую можно сформировать из нескольких строк для того, чтобы обращение к функции text не занимало слишком длинную строку. Предыдущий текстовый объект можно было вывести, разбив строку с формулой на две части, записав их в переменные s1 и s2 и сцепить их затем, например при помощи квадратных скобок или функции horzcat:

figure
s1 = '$$\begin{array}{lll} 2x+3y&=&5 \\';
s2 = '4x+y&=&5 \end{array}$$';
text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String', [s1 s2], 'FontSize', 20)

Расположение формул одного текстового объекта в несколько строк позволяет использовать скобку, автоматически изменяющую размер, для записи уравнений в виде системы, например:

figure
s1='$$\left\{\begin{array}{lll} 2x+3y&=&5 \\'
s2='4x+y&=&5 \end{array}\right.$$'
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',...
    [s1 s2], 'FontSize', 20)

приводит к системе

Окружение array позволяет набирать и более сложные формулы, например матрицы. Операторы

figure
s1='$$A=\left(\begin{array}{llll} a_{11}&a_{12}&\ldots&a_{1n}\\'
s2='a_{21}&a_{22}&\ldots&a_{2n}\\'
s3='\vdots&\vdots&\ddots&\vdots\\'
s4='a_{m1}&a_{m2}&\ldots&a_{mn}'
s5='\end{array}\right)$$'
s=[s1 s2 s3 s4 s5]
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String', s, 'FontSize', 20)

выводят в графическое окно следующую матрицу

В результате получается один текстовый объект, который позволяет применить к нему свойства текстового объекта, описанные в разделе Изменение вида текстового объекта, например можно изменить цвет фона и шрифта

 set(hT,'Color','y','BackgroundColor','k')

В качестве примера автоматизации этого процесса для матриц, содержащих числовые значения, приведем простую функцию mat2tex, которая по заданной матрице формирует соответствующую строку для интерпретатора LaTeX (слишком длинные строки интерпретатор MATLAB не может обработать):

function s=matr2tex(A,fmt)
[m,n]=size(A);
s='$$\left(\begin{array}';
s=[s '{' repmat('l',1,n) '}'];
for i=1:m-1
    for j=1:n-1
      s=[s  num2str(A(i,j),fmt) '\,' '&'];  
    end
    s=[s  num2str(A(i,j),fmt) '\\'];  
end
for j=1:n-1
    s=[s num2str(A(m,j),fmt) '\,' '&'];  
end
s=[s num2str(A(m,n),fmt) '\end{array}\right)$$'];

Ее входные аргументы: A - матрица и fmt - строка с форматом представления числа или количество значащих цифр, например:

figure
A=rand(5)
s=matr2tex(A,'%11.2f')
hT=text('Position', [0.1 0.5], 'Interpreter', 'latex', 'String',s, 'FontSize', 15)

приводит к

Преобразование формулы в рисунок (объект Image)

На сайте http://www.mathworks.com/matlabcentral/ в File Exchange > Graphics > Specialized Plot and Graph Types можно скачать функцию teximage, которая по заданной строке с формулой в формате LaTeX создает рисунок, т.е. объект Image. Это оказывается полезным, при размещении формул не на осях, а на других графических объектах, например, кнопках.



Поиск по сайту:

Система Orphus

Яндекс.Метрика