2012-10-23 59 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兩倍多的元素,這至少使錯誤消失。然而,由您決定底層物理是否仍然有意義。