2d稳态热传导Matlab误差

时间:2014-12-19 22:02:19

标签: matlab transfer heat

我试图绘制等温线和热流线,我做了一些研究,并且能够达到这一点:

clear ,clc
T1=10;
Lx=1;
Ly=1;
Nx=5;
Ny=5;
Nz=5;
Lz=1;
T2=150;
%input('input temperature at y=Ly in deg. C:  ')
dx=Lx/Nx;
dy=Ly/Ny;
x=[0:dx:1];
y=[0:dy:1];
theta = zeros(Nx + 1, Ny + 1);
theta(:,Ny+1) = 1;
Nc=12;

for j = 2:Ny
    for i = 2:Nx
        for n=1:1:199
            Theta=(2/pi).*x;
            x=((((-1)^(n+1))+1/n).*sin(n.*pi.*x/Lx).* ...
                (sinh(n.*pi.*y/Lx)/sinh(n.*pi.*Ly/Lx)));
            T=(Theta*(T2-T1))+T1;
        end
    end
end

for j = Ny+1:-1:1
    fprintf('%7.1f', T(:,j))
    fprintf('\n')
end

dT = (T2-T1)/Nc;
v = T1:dT:T2;
colormap(jet)
contourf(x, y, T, v)
colorbar
Tmax = max(T1,T2)
Tmin = min(T1,T2)
caxis ([Tmin, Tmax])
axis equal tight
title('Contour Plot of Temperature in deg. C')
xlabel('x (m)')
ylabel('y (m)')

但是当我尝试运行它时,我收到以下错误:

   76.6
   10.0
   10.0
   10.0
   10.0
   10.0
Error using contourf (line 69)
Z must be size 2x2 or greater.

Error in Isotherms (line 35)
contourf(x, y, T, v)

任何帮助将不胜感激,提前谢谢。

1 个答案:

答案 0 :(得分:0)

你有很多问题。我看到的是:

首先,在顶部,您将x定义为x=[0:dx:1];,但在您的三重循环中,您将其覆盖为x=((((-1)^(n+1))+1/n).*sin(n.*pi.*x/Lx).* ...。你真的想要覆盖它吗?或者,是否应将三重循环中的行分配给新变量?

其次,在您的三重循环中,您对ji的循环似乎没有做任何事情。看起来您想要遍历xy中的每个元素,但您并没有这样做。这些循环都是不必要的,或者您需要使用它们来索引您在循环核心计算中使用的xy变量。

第三,假设您的三重循环是必要的,我发现您通过Ti为每一步计算j,但您没有保存{{1}以任何方式的值... T被每个循环覆盖。我想你可能希望通过类似`T(i,j)=(Theta *(T2-T1))+ T1;"来保存T值。

最后,当您调用T命令时,contour的大小(即行数和列数)必须与Tx兼容你也给y的向量。具体来说,contour必须等于length(x)的行数,而T必须等于length(y)的列数(反之亦然,如果您只是使用转置{ {1}})。

鉴于您现有的TT,我认为您不会以for的正确尺寸结束。所以,你可能需要做一些像`contour(x(2:end),y(2:end),T,v);'