[英]Matlab coding help matrix manupulation
我正在为我的传热课程编写代码。 这个数字被认为是其他方程式,但我用数字代替它们
l=.2;
w=.2;
dx=.05;
dy=.05;
k=400;
q=500;
Nx = (l/dx+1); %nodes in the x direction
Ny = (w/dy+1); %nodes in the y direction
T=zeros(Nx,Ny);
for m = (1:Nx) %node counter in x nodes
for n = (1:Ny) %node counter in y nodes
if n==1; %left side
T(m,n)=50;
elseif m==1 && n<Ny;%Heat Flux
T(m,n)=60;
elseif m>=2 && n==Ny && m<Nx; %insulated, right side
T(m,n)=70;
elseif n>=2 && n<=Ny-1 && m==Nx ; %insulated, bottom side
T(m,n)=80;
elseif m>=((.325*l)/dx)+1 && m<=((.675*l)/dx)+1 && n>=((.325*w)/dy)+1 && n<=
((.675*w)/dy)+1;
T(m,n) = 400;%center or steam
elseif m>1 && m<Nx && n>1 && n<Ny
T(m,n) = 90;
elseif m==1 && n==Ny;
**T(m,n)=T(m+2,n)/2;%**<-------------------this wont work properly****
elseif n==Nx && m==Ny;
T(m,n)= 110;
end
end
end
我不确定为什么它不会选择正确的值并将其除以2而不是说当答案是T(2,5)时它是0(= 20 = 35)?
T =
50 60 60 60 0
50 90 90 90 70
50 90 400 90 70
50 90 90 90 70
50 80 80 80 110
任何帮助都会很感激
谢谢
照我看来,
您正在尝试访问仍初始化为零的Matrix元素。 T矩阵为零(5,5)。
条件: if m==1 && n==Ny
在迭代的早期执行,那时m = 1,n = 5,T(2,5)= 0。
所以你有T(1,5)= 0
所以,我建议你调试代码,并在每次迭代结束时检查Matrix M的内容。
T(1,5)为零的原因是所指示的代码行在T(3,5)仍被设置为零时执行 - 它尚未填充值70,因此T( 1,5)设置为0/2 = 0。
如果以相反的顺序遍历m
的值,则通过修改代码
for m = (Nx:-1:1)
你会发现T(3,5)现在在设置T(1,5)之前设置为70,而T(1,5)现在正确设置为35。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.