필터 지우기
필터 지우기

Index exceeds the number of array elements (4).

조회 수: 2 (최근 30일)
Craig Johnson
Craig Johnson 2023년 5월 2일
편집: Walter Roberson 2023년 5월 22일
function [therm,chem,r_c,mfuel,mC02,ddt] = FourStrokeCycle(D,d,rpm,fuel,N)
AirMatrix= readmatrix('AirProperties.xlsx');
pa=101325
Ta=273
sa=3796
cpi= AirMatrix(3,:)
Mi= AirMatrix(2,:)
nin= AirMatrix(1,:)
FuelMatrix= readmatrix('FuelProperties.xlsx');
ReactionMatrix= readmatrix('ReactionRatios.xlsx');
fuel= input("indicate fuel type:",'s');
while fuel ~= "gasoline" & fuel~="Gasoline" & fuel~="diesel" & fuel~="Diesel"
fuel= input("Unrecognized entry, indicate fuel type:",'s');
end
switch fuel
case {"gasoline","Gasoline"}
Mf= FuelMatrix(1,1)
rhof= FuelMatrix(1,2)
Tai= FuelMatrix(1,3)
Hf= FuelMatrix(1,4)
Si= ReactionMatrix(1,:)
case {"diesel","Diesel"}
Mf= FuelMatrix(2,1)
rhof= FuelMatrix(2,2)
Tai= FuelMatrix(2,3)
Hf= FuelMatrix(2,4)
Si= ReactionMatrix(2,:)
end
%test inputs
rpm=1500
d=.02
N=6
V0=0.00006
L=0.1
D=0.02
PhiI=pi/6
PhiE=pi/6
omega= rpm* 0.10472
% convert rpm to omega rad/s
k=[1:1:N+1]
PhiK=(k-1)*(4*pi)/N
tK=(k-1)*(4*pi)/(N*omega)
PhiT= omega.*tK
x=(D/2)*cos(PhiT)+sqrt(((4*L^2)/D^2)-sin(PhiT).^2)
Vt= V0+(pi.*d^2)./4.*(L+(D./2)-x)
r_c= (V0+D*(pi*d^2)/4)/V0
therm = zeros(8,N+1)
P=zeros(1,N+1)
T=zeros(1,N+1)
P(1)=101325
Ru=8.3145
Mbar=Mi*nin(1)/nin
R=Ru/Mbar
m=nin.*Mi
mu=((nin.*Mi)./m)
n(1)=(P(1)*Vt(1))/(R(1)*T(1))
v(1)=Vt(1)/m(1)
c_p=mu(1)*cpi
c_v=c_p-R
for k=1:N
if PhiK(k)< pi
P(k+1)=P(k)
T(k+1)=T(k)
mu(k+1)=mu(k)
nin(k+1)=nin(k)
n(k+1)=n(k)*Vt(k+1)/Vt(k)
m(k+1)=m(k)*Vt(k+1)/Vt(k)
v(k+1)=Vt(k+1)/m(k+1)
elseif PhiK(k)<2*pi- PhiI
nin(k+1)=nin(k)
mu(k+1)=mu(k)
n(k+1)=n(k)
m(k+1)=m(k)
v(k+1)=Vt(k+1)/m(k+1)
P(k+1)=P(k)*(v(k)/v(k+1))^(c_p/c_v)
T(k+1)=(P(k+1)*v(k+1))/R
elseif PhiK(k)>=2*pi-PhiI
if n(k+1)>=0 %ERROR LINE
CF=(1+10*(rpm-800)/5200)*(r_c-6.854)
mdot=CF/1000
ndot=mdot/M
nin(k+1)=nin(k)+ndot*Si*(tK(k+1)-tK(k))
Index exceeds the number of array elements (4).
Error in test (line 113)
if n(k+1)>=0
  댓글 수: 1
Walter Roberson
Walter Roberson 2023년 5월 2일
We do not have your data and do not know the answers to the input() statements, so we cannot test your code. Also, you stopped posting in the middle of a if elseif chain, so the code is not complete so we cannot invent our own data to test with.

댓글을 달려면 로그인하십시오.

답변 (1개)

Gokul Nath S J
Gokul Nath S J 2023년 5월 22일
Hi Carig,
It seems that your code is throwing out an error in the form of incorrect inputs. From the limited information, it seems obvious that the index values of n(k+1) is exeeding the limit it can intake. Further note that variable n can only take 4 array elements and you are accessing a value which is the 5th one. This might be a logical error that would have taken place. Please check for the condition of end of the array by using the length function and input the variable once the verification is passed. A reduced code will looking something like this.
lengthn = length(n);
if k + 1 < n
if n(k+1) >= 0
% code
end
end
with regards,
Gokul Nath S

카테고리

Help CenterFile Exchange에서 Database Toolbox에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by