2

時間ステップごとに更新される Matlab の配列があります。各行は時間に対応し、各列は中心から特定の半径の温度を表します。meshgridおよびcontourfコマンドを使用してプロットに色のグラデーションを適用できると便利です。これまでのところ、これは私が持っている 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 で、各半径の温度 (色) を表示し、時間の経過とともに温度が上昇または低下するにつれてその温度をアニメーション化 (色の変化) する円形プロットを作成しようとしています。

特定の時点でのそのようなプロットの例は次のとおりです。

半径温度

したがって、T 配列の列 1 は図のノード 1 に対応し、列 2 はノード 2 に対応する、というようになります。したがって、時間 = 0 の場合、ノード 1 = 98、ノード 2 = 105、ノード 3 = 110、ノード 4 = 118、ノード 5 = 128 になります。時間 = 1 の場合、node1 = 109、node2 = 110、node3 = 117、node4 = 124、node5 = 134; 等々。

そのようなプロットを達成するための提案は非常に役に立ちます。

4

2 に答える 2

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
于 2013-08-21T11:58:52.383 に答える
1

を活用した解決方法をご紹介しますsphere。減少する半径を掛けsphereた行列xと、および単一の値に縮小された行列 (球は円盤になります) を生成します。に温度を掛けると、ディスクが互いに重ねてプロットされます。色は入力行列全体のとに依存します。アニメーションは で行います。yrzzminmaxpause

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

これは与える

ここに画像の説明を入力

于 2013-08-21T01:52:53.267 に答える