Index exceeds the number of array elements .
1.293 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
parag gupta
am 11 Mär. 2019
Beantwortet: Nargiz
am 14 Dez. 2023
function v = model(t,y,Z)
r=10^(-1);
d=5*10^(-1);
delta = 10^(-1);
c = 10^(2);
K = 10^(8);
C = 10^(8);
x = 1;
sigma = 10^(-2);
delta_m = 2.5*10^(-2);
ylag1 = Z(:,1);
dy = zeros(4,1);
for i = 1:6
dy(4*(i-1)+1) = r*y(4*(i-1)+1)*(1-((y(4*(i-1)+1)+y(4*(i-1)+2))/K))-d*y(4*(i-1)+3)*y(4*(i-1)+1);
dy(4*(i-1)+2) = r*y(4*(i-1)+1)*((y(4*(i-1)+1)+y(4*(i-1)+2)/K))-delta*y(4*(i-1)+3)*y(4*(i-1)+2)-delta_m*y(4*(i-1)+2);
dy(4*(i-1)+3) = c*(((ylag1(4*(i-1)+1)+ylag1(4*(i-1)+2))/C)^x)*(1-y(4*(i-1)+3));
dy(4*(i-1)+4) = 0;
end
got error in dy(4*(i-1)+1) = r*y(4*(i-1)+1)*(1-((y(4*(i-1)+1)+y(4*(i-1)+2))/K))-d*y(4*(i-1)+3)*y(4*(i-1)+1); line that Index exceeds the number of array elements .
Can someone please help me?
1 Kommentar
Busuyi Adebayo
am 22 Feb. 2022
Hi Gupta. Curious what process led to this type of model formulation in delay diffenetial equations. Can you share the process?
Thanks!
Akzeptierte Antwort
Guillaume
am 11 Mär. 2019
Bearbeitet: Guillaume
am 11 Mär. 2019
In the code you wrote,
for i = 1:6
So, maximum value of i is 6. It is used in your expression:
dy(4*(i-1)+1) = xxx*y(4*(i-1)+3)*xxx
So, maximum index for y is 4*(6-1)+3 == 23. So if y does not have at least 23 elements, your code will error with index exceeds the number of array elements error. We can safely conclude that it is indeed the case. The fix is to either pass an y with enough elements, or change your algorithm so that it needs less elements.
In the same vein, you declare dy as an array of 4 elements, but will assign 24 elements to it (if your i loop goes up to 6). This will not cause an error (matlab will automatically grow the array), but clearly indicates that something has not been thought out properly.
edit: As you wrote as a comment to Jan's answer, your y has 4 elements. As said, your code requires a y with 23 elements. So change your code or your y.
4 Kommentare
Somkenechukwu Mamah
am 25 Okt. 2021
Use
for i=0:6
Your starting value of i must start from 0 since your have (i-1) in your equation.
Just start your i value from 0 instaed of 1. This should fix the error.
Weitere Antworten (4)
Jan
am 11 Mär. 2019
Simplify your code:
ii = 4 * (i-1) + 1;
dy(ii) = r * y(ii) * (1 - (y(ii) + y(ii+1)) / K) - d * y(ii+2) * y(ii);
Now use the debugger:
dbstop if error
When Matlab stops at the error, check the values of the indices:
size(y)
ii
By the way, 5*10^(-1) is an expensive power operation and a multiplication, while 5e-1 or 0.5 is a cehap constant.
3 Kommentare
Giomara Llumiquinga
am 31 Mai 2022
costo=abs((picos(I+1))-pico_ref)/pico_ref; %devuelve el pico siguiente
El índice supera el número de elementos de la matriz. El índice no debe exceder de 1.
0 Kommentare
Enguerrand Galmiche
am 13 Feb. 2023
Hello,
This code return the error message "Index exceeds the number of array elements. Index must not exceed 6.". The idea is read the values of table Excel and concatenate the values for every iterate of loop. What can I for correct this error and this problem.
Thanks
for ifile=1:nfiles
disp(['Traitement du fichier n° ',sprintf('%d',ifile)])
filename = fullfile('C:\Users\Stagiaire\Desktop\Enguerrand\Analyse_Pose_Docking',filelist(ifile).name); % Récupération du nom de fichier complet
disp(filename)
% Importation des données de RMSD et De Score de chaque fichier excel
% du répertoire de données
RMSD = xlsread(filename,'B:B');
Glide_Score = xlsread(filename,'C:C');
RMSD_Random = [RMSD(ifile); RMSD];
Glide_Score_Random = [Glide_Score(ifile); Glide_Score];
Analyse_Vec = horzcat(RMSD_Random, Glide_Score_Random); %Concatène les 2 vecteurs dans une matrice
disp(RMSD)
disp(Glide_Score)
disp(Glide_Score_Random)
disp(RMSD_Random)
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!