Arrays 索引超过while循环的数组元素数(1)
我试图在Matlab中使用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
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
,交换循环的最后两行。