MATLAB:索引越界错误

时间:2012-10-23 04:13:53

标签: matlab indexing bounds

    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);因为数字(h_bottom)= 181。

,因此索引越界

Untitled9中的错误(第41行)     h_bottom1 = h_bottom(ⅰ)+西格玛* ./(t_bottom1-TEMP_I)。(t_bottom1 ^ 4-TEMP_I ^ 4);

我知道为什么会这样,但我在解决这个问题时遇到了困难。

2 个答案:

答案 0 :(得分:0)

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

temp_r = 293:0.5:473;

h_bottom中的元素数量将增加两倍,这至少会使错误消失。但是,由你决定基础物理学是否仍然有意义。

答案 1 :(得分:0)

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

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