Я решаю pde, который зависит от x и t, и хотел бы показать решение для всех x для нескольких значений t. Я пытаюсь написать код, который будет автоматически генерировать легенду для этого сюжета. Например, если я рисую решение при t = 0, 1, 5 и 9, я хочу, чтобы легенда показывала «t = 0», «t = 1» и т. д.
Допустим, мое решение содержится в матрице u. Мое время хранится в векторе t. Индекс времени, когда я сэмплирую, будет в векторе tsampled. Обратите внимание, что это не то же самое, что и время, которое я хочу на графике. Если я возьму время с индексом 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
Но это вызывает ошибку «Преобразование в ячейку из char невозможно».
Когда я вместо этого пытаюсь использовать строку:
legend (sprintf('t = %0.2f s \n', t(tsampled)))
Я получаю правильные «строки» на графике, но они имеют следующий формат:
Я хотел бы, чтобы это отображало «t = 10,20 с» рядом с синей линией, «t = 91,84 с» рядом с оранжевой линией и так далее. Как мне получить желаемый результат?
t
иu
? - person jadhachem   schedule 26.04.2015size
вместоlength
в строкеfor i=1:1:size(tsampled)
. Вместо этого попробуйтеlength
. Я не могу точно сказать, потому что я не мог воспроизвести вашу проблему. - person jadhachem   schedule 26.04.2015tsampled
является вектором, поэтомуsize(tsampled)
возвращает[1 n]
для некоторого целого числаn
. Это приведет к тому, что ваш цикл будет выполняться только один раз. Я подозреваю, что вы рисуете все данные за один раз. И строкаlegend(sprintf('t = %0.2f s \n', t(tsampled)))
создает одну большую строку со всеми строками t= в ней. - person jadhachem   schedule 26.04.2015