我试图绘制等温线和热流线,我做了一些研究,并且能够达到这一点:
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)
任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:0)
你有很多问题。我看到的是:
首先,在顶部,您将x
定义为x=[0:dx:1];
,但在您的三重循环中,您将其覆盖为x=((((-1)^(n+1))+1/n).*sin(n.*pi.*x/Lx).* ...
。你真的想要覆盖它吗?或者,是否应将三重循环中的行分配给新变量?
其次,在您的三重循环中,您对j
和i
的循环似乎没有做任何事情。看起来您想要遍历x
和y
中的每个元素,但您并没有这样做。这些循环都是不必要的,或者您需要使用它们来索引您在循环核心计算中使用的x
和y
变量。
第三,假设您的三重循环是必要的,我发现您通过T
和i
为每一步计算j
,但您没有保存{{1}以任何方式的值... T
被每个循环覆盖。我想你可能希望通过类似`T(i,j)=(Theta *(T2-T1))+ T1;"来保存T
值。
最后,当您调用T
命令时,contour
的大小(即行数和列数)必须与T
和x
兼容你也给y
的向量。具体来说,contour
必须等于length(x)
的行数,而T
必须等于length(y)
的列数(反之亦然,如果您只是使用转置{ {1}})。
鉴于您现有的T
圈T
,我认为您不会以for
的正确尺寸结束。所以,你可能需要做一些像`contour(x(2:end),y(2:end),T,v);'