unusual subscriptied assignment mismatch
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I narrowed the occurence of the error down to some change in the variable b that happens in the 9th iteration of the loop. For some reason the zeros at the end are no longer kept and the assignment fails.
I figured out, that this change happens exactly when b becomes greater than 512, so I guess it has something to do with matlabs handling of doubles? Further, using the uncommented variable makes the code work just fine.
Please help me solve this problem.
var1 = 0.1;
vec = 1:1000;
% length_var = 100.0000;
length_var = 1/(var1 * 0.1);
for ii=1:20
a = round(ii*(0.25*length_var));
b = a - 1 + 3*length_var;
disp(b-a)
c(ii,:) = vec(a:b);
end
0 commentaires
Réponse acceptée
Jan
le 11 Juin 2018
Modifié(e) : Jan
le 11 Juin 2018
You get a warning in each iteration:
Warning: Integer operands are required for colon operator when used as index
var1 = 0.1;
vec = 1:1000;
length_var = 1/(var1 * 0.1);
for ii=1:20
a = round(ii*(0.25*length_var));
b = a - 1 + 3*length_var;
fprintf('%.16g\n', b - a); % 298.9999999999999 in the first 8 iterations
c(ii,:) = vec(a:b);
end
In the 9th iteration b-a becomes 299. Then vec(a:b) has 300 elements, but c(ii,:) has 299 only.
Do not use floating point numbers as indices. You have applied a round for the index a already. Do this for b also. Or even better: Let length_var have an integer value:
fprintf('%.16g', 1/(var1 * 0.1))
99.99999999999999
This is an expected effect when working with floating point numbers stored with limited precision. To get more explanations search in this forum or in the net for "IEEE754".
0 commentaires
Plus de réponses (1)
Matt J
le 11 Juin 2018
var1 = 0.1;
vec = 1:1000;
length_var = round( 1/(var1 * 0.1) );
c=nan(20,3*length_var);
for ii=1:20
a = round(ii*(0.25*length_var));
b = a - 1 + 3*length_var;
disp(b-a)
c(ii,:) = vec(a:b);
end
0 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing 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!