Azzera filtri
Azzera filtri

unusual subscriptied assignment mismatch

2 visualizzazioni (ultimi 30 giorni)
Sebastian Priebe
Sebastian Priebe il 11 Giu 2018
Modificato: Jan il 11 Giu 2018
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

Risposta accettata

Jan
Jan il 11 Giu 2018
Modificato: Jan il 11 Giu 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".

Più risposte (1)

Matt J
Matt J il 11 Giu 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

Prodotti


Release

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by