Автоматизация легенды сюжета Matlab
Я решаю pde, который зависит от x и t, и хотел бы показать решение по всем x для нескольких значений t. Я пытаюсь написать код, который автоматически сгенерирует легенду для этого сюжета. Например, если я строю график решения при t = 0, 1, 5 и 9, я хочу, чтобы легенда показывала "t=0", "t=1" и т. Д.
Допустим, мое решение содержится в матрице u. Мои времена проводятся в векторе т. Индекс времени моей выборки будет в векторной выборке. Обратите внимание, что это не то же самое время, которое я хочу на графике. Если я возьму время на индекс 6 вектора t, это значение не равно 6, но может быть любым.
В настоящее время я пытаюсь сделать это:
tlen = max(size(t));
tsampled = [2, floor(tlen/5), floor(2*tlen/5), floor(3*tlen/5), floor(4*tlen/5), floor(tlen)];
t(tsampled)
legnd = {'', '', '', '', '', ''};
hold on
for i = 1:1:size(tsampled)
plot(x,u(tsampled(i),:))
legnd(i) = sprintf('t = %0.2f s \n', t(tsampled(i)));
end
title('my PDE solution');
legend(legnd, 0);
xlabel('x')
ylabel('u')
hold off
Но это приводит к ошибке "Преобразование в ячейку из символа невозможно".
Когда я вместо этого пытаюсь использовать строку:
legend (sprintf('t = %0.2f s \n', t(tsampled)))
Я получаю правильные "строки" на графике, но они отформатированы так:
Я хотел бы, чтобы рядом с синей линией было показано "t=10,20 с", рядом с оранжевой линией "t = 91,84 с" и т. Д. Как получить желаемый результат?
1 ответ
Потому что вы предопределены legnd
в качестве массива ячеек нужно использовать {}
вместо ()
чтобы получить правильный индекс. Пытаться:
legnd{i} = sprintf('t = %0.2f s \n', t(tsampled(i)));