Error in the loop
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi all, I am trying to plot the y co-ordinates for different files with respect to one x value but when i execute the program it is showing the following error:
Attempted to access x(133); index out of bounds because numel(x)=132.Error in ==> new2 at 48 if x(j) == Z1
It is pointing the following lines of code:
for i=1:4 prompt1 = {'enter next input file name including extension'}; fname1 = inputdlg(prompt1); a = importdata(char(fname1), DELIMITER, HEADERLINES); new2()
for j = 1:200
if x(j) == Z1
Z2 = y(j)
break;
end
end
figure(1);
plot(Z1,Z2,'r*');
hold on;
end
Can anyone pls help me out,
regards
2 commentaires
bym
le 6 Avr 2011
please post the code that defines y,Z1 and x before the loop.
essentially x(133) (and higher) don't exist
Réponses (3)
Matt Tearle
le 6 Avr 2011
Well, the obvious answer is basically what the error message is saying: x only has 132 elements, but you're looping j up to 200. So when j gets to 133, the line if x(j) ... is going to fail.
What may be causing the problem is the ==. If x and Z1 are doubles, you may not get exact equality. If you were planning on that, that could be causing your indexing error. Try
if abs(x(j)-Z1) < tol
where tol is some small value.
Trying to interpret your code, it seems like you're trying to define Z2 to be the value of y at whichever index x is equal to Z1. If so, why not use logical indexing instead:
Z2 = y(x==Z1);
or, as discussed above,
Z2 = y(abs(x-Z1)<tol);
(This line replaces the whole for-loop, BTW)
2 commentaires
Matt Tearle
le 6 Avr 2011
Again, this shouldn't be in a loop.
But, regardless, now you've posted the full code I can see the problem. I'll add another answer.
Walter Roberson
le 6 Avr 2011
Your function is named new2, and inside that function you define a subfunction that is also named new2. At least one of us is confused.
2 commentaires
Jan
le 6 Avr 2011
Please update the posted code by editing your original question - and please use code formatting to improve the readability.
Matt Tearle
le 6 Avr 2011
The problem is that Z1 is the median of x, and x has an even number of elements. In that case, the median is the average of the two middle values. If they're not the same, the median will not be any of the values in x. The real question is what y you want back in that case. The average of the two x values in the middle?
Z1 = median(x);
tmp = abs(x-Z1);
Z2 = mean(y(tmp == min(tmp)));
This will work for any number of elements of x.
1 commentaire
Matt Tearle
le 6 Avr 2011
Just to clarify, these three lines replace
Z1= median(x)
for i = 1:100
if x(i) == Z1
Z2 = y(i)
break;
end
end
Voir également
Catégories
En savoir plus sur Graphics Performance dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!