Index exceeds the number of array elements (1).

Please i need help !
i'm trying to use the extended kalman filter to estimate Li-ion battery SOC.
this is my code :
%ocv(soc) curve fitting equation
%Voc=M0 + M1*xtrue + M2*xtrue^2+ M3*xtrue^3 + M4*xtrue^4 + M5*xtrue^5 - R*i + sigmaV;
%xtrue the true value of SOC
%xhat the estimated value of SOC
%initialization
xtrue=100;
xhat=0;
sigmaX=100; %kalman error covariance
xstore=zeros(length(xtrue),maxIter);
xstore(:,1)=xtrue;
xhatstore=zeros(length(xhat),maxIter);
sigmaXstore=zeros(length(xhat)^2,maxIter);
for i=1:maxIter
%state equation
xhat(i+1)=xhat(i)-(eff*deltat/Cn)*I(i) +w;
yhat=Voc(i)-R*I(i)+v;
C=M0 + M1 + 2*M2*xtrue+ 3*M3*xtrue^2 + 4*M4*xtrue^3 + 4*M5*xtrue^4 - R*i + sigmaV;
sigmaX=A*sigmaX*A'+sigmaW;
sigmaY=C*sigmaX*C'+sigmaV;
L=sigmaX*C'/sigmaY;
xhat = xtrue +L.*(ytrue-yhat);
%[Store infromation for evaluation/plotting purposes]
xstore(1:17,k+1)= xtrue(:);
xhatstore(1:17,k)=xhat(:);
sigmaXstore(:,k)=sigmaX(:);
end
%code plot
figure(1);
plot(1:maxIter,xstore(1:maxIter)','k-',1:maxIter,xhatstore','b--');grid;
legend('true','estimate');
title('Kalman filter in action');
xlabel('iteration/time'); ylabel('soc');
and i'm guetting this error everytime:
Index exceeds the number of array elements (1).
Error in anothertry22 (line 33)
yhat=Voc(i)-R*I(i)+v;
i verified all the values but don't know how to solve it !
any suggestions please ?!

 Accepted Answer

KSSV
KSSV on 18 Mar 2021
Edited: KSSV on 18 Mar 2021
The error is clear, you are trying to extract more number of elements then pesent in the array.
EXample:
A = rand(1,10) ;
A(1) % no error
A(10) % no error
A(11) % error, there is no 11th element in A
This line:
yhat=Voc(i)-R*I(i)+v;
check the dimension of each array: Voc, I .. they should be within or equal to maxIter.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!