I want to animate this function through time

32 ビュー (過去 30 日間)
L
L 2018 年 8 月 15 日
編集済み: Walter Roberson 2018 年 8 月 15 日
I have a function T producing temperatures through time and depth and can plot individual temperature profiles in time (see attached image), but want to animate it so it is a single line moving through time. I have tried the "animatedline" function without success so far. I want to show the line moving through time as a function of temperature and depth. Is animatedline the proper command or should I use something else?
%settings
conductivity=.0033; %W m-1 K-1
heat_capacity=671.8; %J kg-1K-1
density=1300; %kgm-1^3
diffusivity=conductivity/(heat_capacity*density);
synodic_period=2.55e6; %seconds
synodic_frequency=(2*pi)/synodic_period;
T_av=250; %K
T_amp=150; %K
skin_depth=sqrt(2*diffusivity/synodic_frequency);
t_list=linspace(0,synodic_period,20); %time
%t_list = 0:5:synodic_period;
z_list=linspace(0,.5,100); %depth
T=nan(length(t_list),length(z_list)); %output vector
for t_index=1:length(t_list)
t=t_list(t_index); %first timestep
for z_index=1:length(z_list)
z=z_list(z_index);
T(t_index,z_index)=T_av+T_amp*exp(-z*sqrt(synodic_frequency/(2*diffusivity)))*cos(synodic_frequency*t-z*sqrt(synodic_frequency/(2*diffusivity)));
end
end
max_T=[];
for i=1:size(T,2)
max_T(i)=max(T(:,i));
end
min_T=[];
for i=1:size(T,2)
min_T(i)=min(T(:,i));
end
%%graph
plot((T), (z_list));
hold on
plot((max_T), (z_list), 'k-', 'LineWidth', 1.0)
set (gca,'YDir','reverse');
plot((min_T), (z_list), 'k-', 'LineWidth', 1.0);
title('Temperature Profile')
xlabel('Temperature (K)')
ylabel('Depth (m)')

回答 (1 件)

jonas
jonas 2018 年 8 月 15 日
編集済み: Walter Roberson 2018 年 8 月 15 日
read here
I would rather update the xdata and ydata of your line handle in a for loop, perhaps with a pause() at the end to reduce the speed.
  2 件のコメント
L
L 2018 年 8 月 15 日
Hi Jonas, thank you, I am working on this (new to Matlab).
jonas
jonas 2018 年 8 月 15 日
編集済み: jonas 2018 年 8 月 15 日
No problem! Just let me know if you need help. It is always easier if you provide some sample data to work with!
If I understand correctly, each row in T describe a temperature profile that you want to plot against z_list (depth). Basically you write something like this
figure;hold on
h=plot(T(1,:),z_list)
for i=2:size(T,1)
h.XData=T(i,:)
pause(0.1)
end

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeAnimation についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by