0
    clear all; clc;
% Constants
width=12*0.0254; %Conversion: 1 inch = 0.0254 meters
thickness=0.5*0.0254;
length=16*0.0254;
gravity=9.81;
temp_i=293;
temp_r=293:473;
sigma=5.67*(10^-8);
temp_film=(temp_i+temp_r)/2; %Temp at convection boundary layer
beta=1./temp_film;
pr=0.713; %Prandtl number
v=15.09*(10^-6); %m^2/s
k=0.02564;
k_steel=60.5; 
cp_steel=460;
denstity_steel=7845;
volume=length*width*thickness;
area=2*length*width;
x=volume/area;

%% Calculations
Ra_bottom=(gravity.*beta.*(temp_r-temp_i).*(length.*(1./16))^3.*pr)./(v^2);
psi_Pr=(1+(.492./pr).^(9./16))^(-16./9);
Nu_bottom=0.68+0.503.*[(Ra_bottom.*psi_Pr).^(1./4)];
h_bottom=(k./length).*Nu_bottom;

%Initial values to set up loops and evaluate temp. change over time.
  i=0;
  t_bottom1=473; %Assume all parts of plate start at 200C
  t_middle1=473;
  t_top1=473;
  dt1=15;
  l=dt1;


%Evaluating temperature at bottom (t_bottom)
while t_bottom1 > 294 %294 is t_inf (20C) times 1.05 (21) in Kelvin (294K)
    i=i+1;
    l=l+dt1;
    h_bottom1=h_bottom(i)+sigma.*(t_bottom1.^4-temp_i^4)./(t_bottom1-temp_i); %Error Occurs here LINE: 41
    t_bottom1=(t_bottom1-temp_i).*exp(-h_bottom1.*dt1/(denstity_steel.*cp_steel.*volume))+293;
    y_bottom(i)=t_bottom1; %temp in K
    x_bottom(i)=l;
end 

错误:

试图访问 h_bottom(182);索引超出范围,因为 numel(h_bottom)=181。

Untitled9 中的错误(第 41 行) h_bottom1=h_bottom(i)+sigma.*(t_bottom1.^4-temp_i^4)./(t_bottom1-temp_i);

我知道为什么会发生这种情况,但我很难解决这个问题。

4

2 回答 2

0

我不确定是否可以这样做,但如果你定义

temp_r = 293:0.5:473;

您将拥有两倍的元素h_bottom,这至少使错误消失。但是,由您决定基础物理是否仍然有意义。

于 2012-10-23T04:47:57.570 回答
0

当然,错误是因为您访问h_botton(182)when size(h_bottom,1)is 181。您应该检查 while 循环的条件(t_bottom1 是 298,... 在那一刻,不小所以满足条件),所以它永远不会超过 181。我不知道你到底想在这里做什么但问题就在那里。

当 matlab 代码给出错误时,它一直执行到该行,因此您实际上可以在错误发生的确切时刻看到变量的值。为此,只需在命令行中键入变量的名称,或查看工作区。这会对你有很大帮助。

于 2012-10-23T07:57:16.087 回答