Я довольно новичок в среде Matlab, и я работаю над симуляцией теплопередачи в Matlab (2014b). Я намерен иметь многослойную стену из разных материалов (на данный момент имеется только один материал - медь) и отображать результаты на одном участке. Все работает нормально, пока я не попытаюсь добавить третий слой стены к сюжету. Ниже приводится определение основных переменных и геометрии для PDE решателем (r3-r0):MatLab PDE plotting issue
k = 400;
rho = 8960;
specificHeat = 386;
thick = .01;
stefanBoltz = 5.670373e-8;
hCoeff = 1;
ta = 300;
emiss = .5;
c = thick*k;
a = sprintf('2*%g + 2*%g*%g*u.^3', hCoeff, emiss, stefanBoltz);
f = 2*hCoeff*ta + 2*emiss*stefanBoltz*ta^4;
d = thick*rho*specificHeat;
r0 = [3 4 0 1 1 0 1 1 1.3 1.3];
r1 = [3 4 0 1 1 0 0.6 0.6 1 1];
r2 = [3 4 0 1 1 0 0.3 0.3 0.6 0.6];
r3 = [3 4 0 1 1 0 0 0 0.3 0.3];
Теперь, следующий фрагмент кода вычисляет перенос тепла через нижний слой (r3) стенки, с входом температура 1000 к:
gdm = r3';
g = decsg(gdm, 'R3', ('R3')');
hmax = .1; % element size
[p, e, t] = initmesh(g, 'Hmax', hmax);
numberOfPDE = 1;
pb = pde(numberOfPDE);
pg = pdeGeometryFromEdges(g);
uBottom = pdeBoundaryConditions(pg.Edges(1),'u',1000);
pb.BoundaryConditions = uBottom;
u = pdenonlin(pb,p,e,t,c,a,f, 'jacobian', 'lumped');
fprintf('Temperature at the top edge of the plate = %5.1f degrees-K\n', ...
u(4));
figure
pdeplot(p, e, t, 'xydata', u, 'contour', 'on', 'colormap', 'jet')
hold on
После того, как «удерживать», я в основном повторить предыдущий код для прямоугольника «r2», с температурой на входе «и (4)» (выход предыдущего слоя), за которым следует этот последний бит кода:
hold off
axis([0,1,0,2])
caxis manual
caxis([u(4) 1000]);
colorbar;
Как я уже сказал, все это работает, и результаты для первого и второго уровней находятся в одном и том же сюжете. Но после повторения процесса для третьего слоя (r1) и построения результатов в исходном рисунке (конечно, бит «hold off» находится в самом конце кода, конечно), график отображает только результат для третий слой. Я не уверен, что это ограничение Matlab или если мое решение неверно, поэтому я хотел бы попросить немного помощи или какого-то направления. Заранее спасибо
Ниже приведен полный код для лучшего понимания:
k = 400;
rho = 8960;
specificHeat = 386;
thick = .01;
stefanBoltz = 5.670373e-8;
hCoeff = 1;
ta = 300;
emiss = .5;
c = thick*k;
a = sprintf('2*%g + 2*%g*%g*u.^3', hCoeff, emiss, stefanBoltz);
f = 2*hCoeff*ta + 2*emiss*stefanBoltz*ta^4;
d = thick*rho*specificHeat;
r0 = [3 4 0 1 1 0 1 1 1.3 1.3];
r1 = [3 4 0 1 1 0 0.6 0.6 1 1];
r2 = [3 4 0 1 1 0 0.3 0.3 0.6 0.6];
r3 = [3 4 0 1 1 0 0 0 0.3 0.3];
%---------------------------------------------------------
gdm = r3';
g = decsg(gdm, 'R3', ('R3')');
hmax = .1; % element size
[p, e, t] = initmesh(g, 'Hmax', hmax);
numberOfPDE = 1;
pb = pde(numberOfPDE);
pg = pdeGeometryFromEdges(g);
uBottom = pdeBoundaryConditions(pg.Edges(1),'u',1000);
pb.BoundaryConditions = uBottom;
u = pdenonlin(pb,p,e,t,c,a,f, 'jacobian', 'lumped');
fprintf('Temperature at the top edge of the plate = %5.1f degrees-K\n', ...
u(4));
figure
pdeplot(p, e, t, 'xydata', u, 'contour', 'on', 'colormap', 'jet')
hold on
%----------------------------------------------------------------------
gdm = r2';
g = decsg(gdm, 'R2', ('R2')');
hmax = .1; % element size
[p, e, t] = initmesh(g, 'Hmax', hmax);
numberOfPDE = 1;
pb = pde(numberOfPDE);
pg = pdeGeometryFromEdges(g);
uBottom = pdeBoundaryConditions(pg.Edges(1),'u',u(4));
pb.BoundaryConditions = uBottom;
u = pdenonlin(pb,p,e,t,c,a,f, 'jacobian', 'lumped');
fprintf('Temperature at the top edge of the plate = %5.1f degrees-K\n', ...
u(4));
pdeplot(p, e, t, 'xydata', u, 'contour', 'on', 'colormap', 'jet')
%----------------------------------------------------------------------------
gdm = r1';
g = decsg(gdm, 'R1', ('R1')');
hmax = .1; % element size
[p, e, t] = initmesh(g, 'Hmax', hmax);
numberOfPDE = 1;
pb = pde(numberOfPDE);
pg = pdeGeometryFromEdges(g);
uBottom = pdeBoundaryConditions(pg.Edges(1),'u',u(4));
pb.BoundaryConditions = uBottom;
u = pdenonlin(pb,p,e,t,c,a,f, 'jacobian', 'lumped');
fprintf('Temperature at the top edge of the plate = %5.1f degrees-K\n', ...
u(4));
pdeplot(p, e, t, 'xydata', u, 'contour', 'on', 'colormap', 'jet')
%----------------------------------------------------------------------------
gdm = r0';
g = decsg(gdm, 'R0', ('R0')');
hmax = .1; % element size
[p, e, t] = initmesh(g, 'Hmax', hmax);
numberOfPDE = 1;
pb = pde(numberOfPDE);
pg = pdeGeometryFromEdges(g);
uBottom = pdeBoundaryConditions(pg.Edges(1),'u',u(4));
pb.BoundaryConditions = uBottom;
u = pdenonlin(pb,p,e,t,c,a,f, 'jacobian', 'lumped');
fprintf('Temperature at the top edge of the plate = %5.1f degrees-K\n', ...
u(4));
pdeplot(p, e, t, 'xydata', u, 'contour', 'on', 'colormap', 'jet')
%hold off
axis([0,1,0,2])
%caxis manual
caxis([u(4) 1000]);
В конце нет необходимости ни для последнего 'hold off', ни для' caxis manual'. Вы можете удалить их. – Ratbert
спасибо, но это все равно не разрешает мою проблему с сюжетом, отображающим только один слой стены. –
Можете ли вы опубликовать всю свою программу? – Ratbert