График в матлабе
02.07.2020
Всем здравствуйте. Очень нужна помощь. Не получается нарисовать график в матлаб.
Вот допустим, у меня есть массив A=T(1,1,:)
Я пишу plot(A), но ничего не выходит, я пробовала по всякому, но ничего не получается, прошу, помогите...
- Или может быть проще перенести данные в Excel и там уже построить график, но это у меня тоже не выходит...
Лучший ответ
Если выполнить
A=T(1,1,:);
squeeze(A);
то лишние измерения ликвидируются. Дальше
plot(A)
должен работать.Ответы
Вы задаете А, как функцию T с входными аргументами (1,1,:)
Попробуйте написать
A=[1,1,1,2,1,1,1];%Или любые другие значения
Затем
plot(A);
Давайте с конкретикой и предысторией. Если выдаёт ошибку - скажите текст ошибки.
Судя по синтаксису, вы выделяете какой-то вектор (по 3-му измерению) из трёхмерного массива Т, и записываете его в переменную А. Это так?
У меня решение уравнения в сеточной форме. Хочу получить график изменения температуры определённой точки во время всех иттераций.
Решение размерности три? Массив Т у вас что из себя представляет? Сохраните его в mat-файл, выложите тут, если не трудно.
Если там трехмерность, то такое выделение (1,1,:) все равно дает в результате формально массив трехмерный, хоть и кол-во элементов по двум из "направлений" равно единице. Поэтому плот его не скушает.
for i=2:M-1
if(T(i,1,k)<Tref)
T(i,1,k+1)=T(i,1,k)+a*tau*(T(i+1,1,k)-2*T(i,1,k)+T(i-1,1,k)+T(i,2,k)-T(i,1,k))/(h^2);
else
res=a*(T(i+1,1,k)-2*T(i,1,k)+T(i-1,1,k)+T(i,2,k)-T(i,1,k))/(h^2);
func=@(t,Y)(A*(Y/Tref).^b+res); % определяем функцию, которая возвращает dT/dt
% T(i,j,k+1)
[Tout,Yout]=ode45(func,[0 tau],T(i,1,k)); % Находим новую температуру
res1=Yout(end);
if(res1>Tmax) % если новая температура слишком велика - ограничиваем её температурой горения
res1=Tmax;
end
T(i,1,k+1)=res1;
end
if(T(i,H,k)<Tref)
T(i,H,k+1)=T(i,H,k)+a*tau*(T(i+1,H,k)-2*T(i,H,k)+T(i-1,H,k)-T(i,H,k)+T(i,H-1,k))/(h^2);
else
res=a*(T(i+1,H,k)-2*T(i,H,k)+T(i-1,H,k)-T(i,H,k)+T(i,H-1,k))/(h^2);
func=@(t,Y)(A*(Y/Tref).^b+res); % определяем функцию, которая возвращает dT/dt
% T(i,j,k+1)
[Tout,Yout]=ode45(func,[0 tau],T(i,H,k)); % Находим новую температуру
res1=Yout(end);
if(res1>Tmax) % если новая температура слишком велика - ограничиваем её температурой горения
res1=Tmax;
end
T(i,H,k+1)=res1;
end
end
for j=2:H-1
if(T(1,j,k)<Tref)
T(1,j,k+1)=T(1,j,k)+a*tau*(T(2,j,k)-T(1,j,k)+T(1,j+1,k)-2*T(1,j,k)+T(1,j-1,k))/(h^2);
else
res=a*(T(2,j,k)-T(1,j,k)+T(1,j+1,k)-2*T(1,j,k)+T(1,j-1,k))/(h^2);
func=@(t,Y)(A*(Y/Tref).^b+res); % определяем функцию, которая возвращает dT/dt
% T(i,j,k+1)
[Tout,Yout]=ode45(func,[0 tau],T(1,j,k)); % Находим новую температуру
res1=Yout(end);
if(res1>Tmax) % если новая температура слишком велика - ограничиваем её температурой горения
res1=Tmax;
end
T(1,j,k+1)=res1;
end
А я и не понял, что это выборка из массива 0))
Если выполнить
A=T(1,1,:);
squeeze(A);
то лишние измерения ликвидируются. Дальше
plot(A)
должен работать.Тогда уж надо написать
A=squeeze(A);
иначе массив А по-прежнему останется трёхмерным.
Спасибо большое, все заработало!
да, либо использовать squeeze