필터 지우기
필터 지우기

Index exceeds number of array elements. Index must not exceed 8. HELP

조회 수: 4 (최근 30일)
Elizabeth Pickford
Elizabeth Pickford 2024년 4월 25일
편집: Walter Roberson 2024년 4월 25일
Here's my model code:
clear all;
close all;
S = 99;
I = 1;
R = 0;
N = 100; %Total population
beta= 0.1; % birth rate
alpha= 0.1; % infection person to person rate
lambda= 0.3; % infection by water rate
vac= 0.05; % recovery by vaccination rate
d= 0.03; % death rate
gamma= 0.8; % recovery rate
c= 0.9; % rate of contamination
m= 0.4; % rate of decay of V. cholera
t_f = 500; %Ending time of simulation
Q = [beta alpha lambda vac d gamma c m];
[t,y]=ode45('cholera_de',[0:t_f/100:t_f],[S I R]',[],Q);
figure(1)
plot(t,y(:,1),'k-',t,y(:,2),'r--',t,y(:,3),'b:');
xlabel('\bf Time (days)');
ylabel('\bf Number of People by Category');
legend('S','I','R');
z=y(end,:)'
SN=y(:,1)/N;
IN=y(:,2)/N;
figure(2)
plot(IN,SN);
xlabel('\bf I/N');
ylabel('\bf S/N');
r0=beta/beta
[maxIN,y_maxtime]=max(y(:,2)/N);
maxIN
maxtime=y(y_maxtime)
eqIN=y(100,2)/N;
eqIN
And my Function code:
function dy=cholera_de(t,Y,flag,Q)
beta= Q(1);
alpha= Q(2);
lambda= Q(3);
vac= Q(4);
d=Q(5);
gamma=Q(6);
c=Q(7);
m=Q(8);
B= Q(9);
S= Y(1);
I= Y(2);
R= Y(3);
N= S+I+R;
dy(1,1)= beta - alpha*I - lambda*B - vac*S - d;
dy(2,1)= alpha*I + lambda*B - d - gamma*I;
dy(3,1)= gamma*I + vac*S - d;
dy(4,1)= c*I - m*B;
Why am I getting this error?
Index exceeds the number of array elements. Index must not exceed 8.
Error in cholera_de (line 11)
B= Q(9);
Error in odearguments (line 92)
f0 = ode(t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 104)
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);
Error in cholera_model (line 22)
[t,y]=ode45('cholera_de',[0:t_f/100:t_f],[S I R]',[],Q);

답변 (1개)

VBBV
VBBV 2024년 4월 25일
편집: VBBV 2024년 4월 25일
Q = [beta alpha lambda vac d gamma c m];

The size of the vector is 1x8

  댓글 수: 2
VBBV
VBBV 2024년 4월 25일
But you try to access the non existent element of vector in this line
B=Q(9)
Cris LaPierre
Cris LaPierre 2024년 4월 25일
이동: Cris LaPierre 2024년 4월 25일
The error means you are trying to access an element in Q that does not exist. From the message, Q contains 8 elements, so you get an error when trying to indext a 9th element.
This makes sense. You define Q as having 8 elements.
Q = [beta alpha lambda vac d gamma c m];
but in your function, you try to access a 9th element
B= Q(9);

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

카테고리

Help CenterFile Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기

태그

제품


릴리스

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by