2012-10-23 126 views
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 

错误:MATLAB:索引超出范围误差的

试图访问h_bottom(182);索引越界,因为numel(h_bottom)= 181。 (t_bottom1-temp_i);()()()()()()()()()()()()()()()()()()()()

我知道为什么会发生这种情况,但我在解决问题时遇到了困难。

回答

0

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

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

0

我不知道,如果它是确定的事,但如果你定义

temp_r = 293:0.5:473; 

你必须在h_bottom两倍多的元素,这至少使错误消失。然而,由您决定底层物理是否仍然有意义。