Я пытаюсь использовать строку LaTex для метки оси в MATLAB и получить число без видимой причины - PullRequest
3 голосов
/ 03 марта 2012

Я пытаюсь использовать строку LaTex для вставки дроби для метки оси Y, и я получаю число (в стандартном шрифте и позиции ylabel), а также то, что я ожидал (дробь, которую я пытаюсь вставить). Это изменилось для меня, когда я отредактировал код, но остановился, как только я попытался исследовать это (это 353.191, когда я печатаю, на случай, если это поможет). Номер отсутствует, если я не пытаюсь добавить метку к оси Y или добавить метку без LaTex. Нет сообщения об ошибке.

Код вопроса:

ylabel(text('Interpreter','LaTex',...
    'string','$\frac{\tau_b(t)}{\phi \bar{U}}$',...
    'FontSize',20,'position',[-1.25,0.2]));

Полная программа (код выше перед завершением программы):

% --- MM3CAI Coursework 1 ---

clear all; clf('reset'); clc;

fig_num=0;

disp('Started program');
disp(' ');

% --- Task 1. About the water-brake only ---

disp('Started task 1');
disp(' ');

w_t=0.003;          % Volume of water in the brake at time t        [m^3]
thet_t=250;         % Angular velocity of brake at time t           [rads^-1]

percent=0.1;        % Percent added to values for small change      [%]
fraction=percent/100;

del_w=w_t*fraction;
del_t=thet_t*fraction;

w_del=w_t+del_w;
thet_del=thet_t+del_t;

clear percent fraction;

% --- Q1 ---

disp('Started question 1');
disp(' ');

tau  =150*w_t  *thet_t;
tau_w=150*w_del*thet_t;
tau_t=150*w_t  *thet_del;

tau_mat=[tau;...
     tau_w;...
     tau_t];

A=[w_t   thet_t   1;...
w_del thet_t   1;...
w_t   thet_del 1];

variables_mat=A\tau_mat;

phi=variables_mat(1,1);
psi=variables_mat(2,1);
eta=variables_mat(3,1);

disp(['Phi = ', num2str(phi)]);
disp(['Psi = ', num2str(psi)]);
disp(['Eta = ', num2str(eta)]);
disp(' ');

disp('Finished question 1');
disp('----------');

% --- Q2 ---

disp('Started question 2');
disp(' ');

beta=-eta/phi;

disp(['Beta = ', num2str(beta)]);
disp(' ');

disp('Finished question 2');
disp('----------');

% --- Q4 ---

disp('Started question 4');
disp(' ');

G=@(omega) phi./(1+(5i.*omega));

frequency=logspace(-3,3,700)';

G_mat=G(frequency);

phase_mat_rad=angle(G_mat);
phase_mat_deg=phase_mat_rad.*(180/pi);

magnitude_mat=abs(G_mat);
gain_mat=20.*log10(magnitude_mat);

fig_num=fig_num+1;
figure(fig_num);
subplot(2,1,1);
semilogx(frequency,gain_mat);
title('Bode Plot');
xlabel('Frequency [rads^-^1]');
ylabel('Gain [dBs]');
subplot(2,1,2);
semilogx(frequency,phase_mat_deg);
xlabel('Frequency [rads^-^1]');
ylabel('Phase Angle [degrees]');

disp('Finished question 4');
disp('----------');

% --- Q5 ---

disp('Started question 5');
disp(' ');

U_bar=1;
step=@(t) (phi*U_bar)*(1-exp(-t/5));

time=(0:0.01:8);

step_mat=step(time);
normalised=step_mat./(phi*U_bar);

fig_num=fig_num+1;
figure(fig_num);
plot(time,normalised);
title('Step Response');
xlabel('Time [s]');
ylabel(text('Interpreter','LaTex',...
        'string','$\frac{\tau_b(t)}{\phi \bar{U}}$',...
        'FontSize',20,'position',[-1.25,0.2]));

disp('Finished question 5');
disp('----------');

Я действительно смущен этим, что затрудняет поиск чего-либо. Все, что я мог найти, это базовая справка по MatLab об использовании LaTex (именно так я запутал строку) и людей, у которых были проблемы, когда text() не работал и генерировал ошибку - ничего там, где генерировался ожидаемый результат и что-то еще появилось.

1 Ответ

6 голосов
/ 03 марта 2012

Функция TEXT возвращает дескриптор текстового объекта, который на самом деле является числом.Это число, которое вы получаете как Y-метка.Вам нужно только передать строку в качестве первого аргумента в YLABEL и указать свойство InterpreterFontSize):

ylabel('$\frac{\tau_b(t)}{\phi \bar{U}}$','Interpreter','LaTex','FontSize',20);

Положение определяется автоматически ylabel.

В вашем операторе ylabel текстовый объект фактически создан (именно поэтому вы не получаете сообщение об ошибке), но позиция выбрана таким образом, что текст находится за пределами видимой области.-1,25 означает, что текст расположен на 1,25 от размера осей слева.

Вы также можете использовать текстовый объект в качестве метки осей, но вам придется настроить положение текста с изменением размера осей.

text('Interpreter','LaTex',...
    'string','$\frac{\tau_b(t)}{\phi \bar{U}}$',...
    'FontSize',20,'position',[-0.1,0.5]);

Обратите внимание, свойство Position не x и y, а дроби осей.

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