Arrays 索引超过while循环的数组元素数(1)

Arrays 索引超过while循环的数组元素数(1),arrays,matlab,loops,error-handling,Arrays,Matlab,Loops,Error Handling,我试图在Matlab中使用while循环函数,但遇到错误“索引超过数组元素数(1)”。我怎样才能解决这个问题?我的代码粘贴在下面: clear all clc % Defining variables alpha=0.047;% growth rate dt=1; % timestep of 1 second Tatm=293.15; % atm temperature, deg Kelvin. (20 deg Celsius + 273.15) A=20; % Area = 4m x 5m

我试图在Matlab中使用
while
循环函数,但遇到错误“索引超过数组元素数(1)”。我怎样才能解决这个问题?我的代码粘贴在下面:

clear all
clc

% Defining variables
alpha=0.047;% growth rate
dt=1; % timestep of 1 second
Tatm=293.15; % atm temperature, deg Kelvin. (20 deg Celsius + 273.15)
A=20; % Area = 4m x 5m
MW=28.97;% Molecular weight of air in g/mol
P=101325; % atmospheric pressure in pascals
R=8.314; % J/kg/Kelvin
Cp=1000; % Specific Heat Capacity of air J/kg
Mu0=0;% mass entrained in upper layer initial
Mp=0; % mass entrained in plume
H=5; % height of compartment 

z(1)=5;
t(1)=1;
T(1)=293.15;
m(1)=0;
k=1;

while z(k)>0
    Q=0.7*alpha*t^(2);
    Mp=0.076*(Q^(1/3))*(5^(5/3));
    Tp=(Q/(Mp*Cp))+293.15;
    m(k)=m(1)+Mp*dt;
    T(k)=((m(1)*T(1))+(Mp*Tp*dt))/m;
    p=(P*MW)/(R*T(1));
    V=m(k)/p;
    deltaz=(V/A);
    z(k)=z(1)-deltaz;
    k=k+1;
end

谢谢

直线
z(1)=5创建长度为1的向量。在while循环的第二次迭代中,
k
的值为2,因此
z(k)=z(1)-deltaz
尝试写入
z(2)
,超过
z
的长度。一种选择是允许
z
在循环中增长:
z=[z;z(1)-deltaz]。这会导致大量内存重新分配,因此计算效率很低,但应该可以防止您所问的错误。@Harry:允许编制超出写入范围的索引。事实上,
z(end+1)=0
是一种比
z=[z;1]
更有效的数组增长方式。所发生的是
而z(k)>0
在第二次迭代时索引超出了界限。这里我们不是在写,而是在读一个不存在的值。解决方案可能是在赋值到
z(k)
之前增加
z
,交换循环的最后两行。