Ho ottenuto esattamente questo errore:
Attempted to access E(3,1); index must be a positive integer or logical.
Ma l'indice è E(3,1)
quei numeri sono entrambi positivi Cosa sta succedendo?
for t=T:0.2:4
for i=1:N
% D = D +1
x = randi(Nsamples,1,1);
if(x==1)
Etemp = E(t*5,i) - S(x)*S(x+1) + (-S(x))*S(x+1);
elseif(x==Nsamples)
Etemp = E(t*5,i) - S(x)*S(x-1) + (-S(x))*S(x-1);
else
%********************* This is the error line
Etemp = E(t*5,i) - (S(x-1)*S(x)+S(x)*S(x+1))+ (S(x-1)*(-S(x))+(-S(x))*S(x+1));
end
end
end
risposte:
0 per risposta № 13
indice in E(3,1)
potrebbe non essere esattamente un numero intero. Nel tuo caso, indice row index 3
è generato moltiplicando t*5
cioè 0.6*5
(se t = 0,6). Non garantisce che sia un numero intero.
In un controllo di alta precisione sul valore dell'indice generato 3
, scoprirai che è fuori dall'esatto intero 3 per 1 bit o così alla sua estremità meno significativa.
Pertanto, durante l'indicizzazione E(3,1)
, 3
non è percepito come un numero intero.
Nei casi in cui si genera l'indice moltiplicando con un decimale, assicurarsi di convertirlo in int prima di utilizzarlo per l'indicizzazione come round(t*0.5)
o int8(t*0.5)
.
O tutti insieme evitare l'indice generato moltiplicando i decimali.