Автоматизация легенды сюжета 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)));
Другие вопросы по тегам