Вы можете записать эволюцию u
с течением времени.Поскольку температура зависит только от радиуса, для каждого таймфрейма вам придется преобразовать одно значение температуры в матрицу, которая приемлема для surf
, то есть для CData
, который имеет тот же размер, что и x,y,z
.
r=1;
t=0;
N=1000;
T0=-10;
T1=10;
a=1.3e-7;
% evaluate u(r,t) at each time step, and record
[x,y,z]= sphere(100);
u = zeros(N,1);
u(1) = T0;
for k = 2:N
La_k= (k*pi/r)^2;
r_k=(r^-1).*sin(sqrt(La_k)*r);
u(k) = u(k-1)+ (T1-T0)^2 * (-1)^(k+1) * r_k/(k*pi) * exp(-a*La_k*t);
end
% create dummy plot
hs = surf(x,y,z,nan(size(z)));
colorbar
colormap(jet)
title(' ')
% fix color scale so you can see color change along with time
hs.Parent.CLim = [min(u),max(u)];
% iterate over time and show temperature with color
for kk = 1:N
hs.CData = ones(size(z))*u(kk);
title(sprintf('t = %d', kk))
drawnow
pause(0.01)
end