用Matlab绘制各种半径的导热温度

时间:2013-08-21 00:23:57

标签: matlab plot geometry matlab-figure heatmap

我在Matlab中有一个数组,每个时间步都会更新:每行对应一个时间,每列代表距离中心一定半径的温度。如果可以使用meshgridcontourf命令将颜色渐变应用于绘图,也会很方便。到目前为止,这是我所拥有的Matlab代码,但我不确定如何将温度调整到绘图中并为温度变化设置动画。

Tinf = 200;  % ambient temperature

% where r1 = radius1, r2 = radius2, etc.
%        t = time
%        rows = time
%        columns = radius

%    r1   r2    r3    r4    r5
T = [98   105   110   118   128;  % t=1
     109  110   117   124   134;  % t=2
     110  118   120   130   144]; % t=3

r = 0.08;  % radius of circle

rx = -r:0.01:r;
ry = r:-0.01:-r;

[x_coor, y_coor] = meshgrid(rx, ry);

radius = sqrt(x_coor.^2+y_coor.^2);

figure(1)
contourf(radius,'edgecolor','none')

我正在尝试在Matlab中创建一个圆形图,它将显示每个半径的温度(颜色),并随着时间的推移随着时间的推移而增加或减少该温度(变化颜色)。

某个时间的这种情节的一个例子是:

radius temperature

因此T阵列中的列1对应于图中的节点1,列2对应于节点2等。因此,在时间= 0,则node1 = 98,node2 = 105,node3 = 110,node4 = 118,node5 = 128;在时间= 1,则node1 = 109,node2 = 110,node3 = 117,node4 = 124,node5 = 134;等等。

任何有关完成此类情节的建议都会非常有用。

2 个答案:

答案 0 :(得分:2)

与@Magla的好答案相同,但绘制单个曲面(不是叠加)允许插值

T = [98   105   110   118   128;
    109  110   117   124   134;
    114  118   120   130   138];

Rmax = 30;
[x,y,z] = sphere(100);
x=x*Rmax;
y=y*Rmax;

rxy2 = x.^2+y.^2;


r = [0 10 20 30];
r2 = r.^2;

figure('Color', 'w');

for ind_t = 1:size(T,1)
    for ii = 1:length(r2)-1
        ir_find = find(rxy2<=r2(ii+1) & rxy2>r2(ii));
        z(ir_find) = T(ind_t,ii);
    end

    hax = axes('Position',[0 0 1 1]);
    h = surf(x,y,z)  % sphere centered at origin

    shading interp
    set(h, 'EdgeColor', 'None');

    view(0,90);
    axis equal;
    set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
    pause(0.5);
end

修改

重写为使用meshgrid并使用感兴趣的特定半径等。确保将r_res调整为您认为合适的值。

T = [98   105   110   118   128;
    109  110   117   124   134;
    114  118   120   130   138];

%---------------------------------------
r = 0.08;  % radius of circle

r_res = 0.0005;

rx = -r:r_res:r;
ry = rx;

[x, y] = meshgrid(rx, ry);

rxy2 = x.^2+y.^2;
z=ones(size(rxy2))*NaN;

%---------------------------------------

Nshells = size(T,2);
r = [0:1/Nshells:1]*r;
r2 = r.^2;

figure('Color', 'w');
colormap hot

for ind_t = 1:size(T,1)
    for ii = 1:Nshells
        ir_find = find(rxy2<=r2(ii+1) & rxy2>r2(ii));
        z(ir_find) = T(ind_t,ii);
    end

    hax = axes('Position',[0 0 1 1]);
    h = surf(x,y,z)  % sphere centered at origin

    shading interp
    set(h, 'EdgeColor', 'None');

    view(0,90);
    axis equal;
    set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
    pause(0.5);
end

答案 1 :(得分:1)

这是一个使用sphere的解决方案。 sphere生成矩阵xy,乘以减少的半径r,矩阵z减少为单个值(球体变为一个磁盘)。 z乘以温度,磁盘相互重叠。颜色取决于整个输入矩阵的minmax。动画使用pause完成。

T = [98   105   110   118   128;
    109  110   117   124   134;
    114  118   120   130   138];

[x,y,z] = sphere(100);
r = [50 40 30 20 10];

figure('Color', 'w');

for ind_t = 1:size(T,1)

    hax = axes('Position',[0 0 1 1]);

    for ii = 1:length(r)
        h = surf(x*r(ii),y*r(ii),z*0+T(ind_t,ii))  % sphere centered at origin
        set(h, 'EdgeColor', 'None');
        hold on;
    end

    view(0,90);
    axis equal;
    set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
    pause(0.5);

end

这给出了

enter image description here